Commit 62b77bc2 authored by Simon Clarke's avatar Simon Clarke
Browse files

Final version of Imputation notebook.

parent 1adb9ff8
%% Cell type:markdown id: tags:
# Imputing Missing Data
%% Cell type:markdown id: tags:
In this notebook we investigate ways for dealing with missing data using Scikit-Learn's imputation routines. There are three main routines we will discuss: `SimpleImputer`, `KNNImputer` and `IterativeImputer`. We will also only discuss imputing continuous, numerical values, for imputing categorical values possible approaches are using the mode or the `KNNImputer`.
We will use the [Pima Indians Diabetes Dataset](https://www.kaggle.com/uciml/pima-indians-diabetes-database), which can be downloaded from [Monash Gitlab](https://gitlab.erc.monash.edu.au/bads/data-challenges-resources/-/tree/main/Machine-Learning/Imputation/pima_indians_diabetes.csv). This aims to predict whether the patient has diabetes from a number of diagnostic measurements. All patients are females of Pima Indian heritage, who are at least 21 years old.
Previously, we have dealt with missing data by deleting that entry. However, that means losing valuable data which contributes to the training of your model. A better approach is to impute the data, i.e., infer the missing data from the existing observations.
We will concentrate here on Scikit-Learn's imputation routines, although some of the techniques, such as replacement of values with the mean or mode, can be easily implemented in Pandas.
%% Cell type:markdown id: tags:
## Contents
%% Cell type:markdown id: tags:
* Introduction
* Cross-validation analysis
* Exercises
%% Cell type:markdown id: tags:
## Introduction
%% Cell type:markdown id: tags:
We first import the standard libraries and the csv file.
%% Cell type:code id: tags:
``` python
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
pima = pd.read_csv("pima_indians_diabetes.csv")
```
%% Cell type:markdown id: tags:
We can now view a random sample of the data. In the columns `BloodPressure`, `SkinThickness` and `Insulin` there are values of 0, which are clearly not physical. This is indicative of missing values.
%% Cell type:code id: tags:
``` python
pima.sample(20)
```
%%%% Output: execute_result
Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \
480 3 158 70 30 328 35.5
652 5 123 74 40 77 34.1
219 5 112 66 0 0 37.8
205 5 111 72 28 0 23.9
359 1 196 76 36 249 36.5
672 10 68 106 23 49 35.5
402 5 136 84 41 88 35.0
626 0 125 68 0 0 24.7
564 0 91 80 0 0 32.4
34 10 122 78 31 0 27.6
68 1 95 66 13 38 19.6
639 1 100 74 12 46 19.5
400 4 95 64 0 0 32.0
314 7 109 80 31 0 35.9
508 2 84 50 23 76 30.4
105 1 126 56 29 152 28.7
35 4 103 60 33 192 24.0
164 0 131 88 0 0 31.6
244 2 146 76 35 194 38.2
220 0 177 60 29 478 34.6
11 10 168 74 0 0 38.0
111 8 155 62 26 495 34.0
186 8 181 68 36 495 30.1
396 3 96 56 34 115 24.7
258 1 193 50 16 375 25.9
26 7 147 76 0 0 39.4
679 2 101 58 17 265 24.2
139 5 105 72 29 325 36.9
269 2 146 0 0 0 27.5
589 0 73 0 0 0 21.1
547 4 131 68 21 166 33.1
401 6 137 61 0 0 24.2
168 4 110 66 0 0 31.9
12 10 139 80 0 0 27.1
412 1 143 84 23 310 42.4
6 3 78 50 32 88 31.0
153 1 153 82 42 485 40.6
71 5 139 64 35 140 28.6
632 2 111 60 0 0 26.2
DiabetesPedigreeFunction Age Outcome
480 0.344 35 1
652 0.269 28 0
219 0.261 41 1
205 0.407 27 0
359 0.875 29 1
672 0.285 47 0
402 0.286 35 1
626 0.206 21 0
564 0.601 27 0
34 0.512 45 0
68 0.334 25 0
639 0.149 28 0
400 0.161 31 1
314 1.127 43 1
508 0.968 21 0
105 0.801 21 0
35 0.966 33 0
164 0.743 32 1
244 0.329 29 0
220 1.072 21 1
11 0.537 34 1
111 0.543 46 1
186 0.615 60 1
396 0.944 39 0
258 0.655 24 0
26 0.257 43 1
679 0.614 23 0
139 0.159 28 0
269 0.240 28 1
589 0.342 25 0
547 0.160 28 0
401 0.151 55 0
168 0.471 29 0
12 1.441 57 0
412 1.076 22 0
6 0.248 26 1
153 0.687 23 0
71 0.411 26 0
632 0.343 23 0
%% Cell type:markdown id: tags:
This can be investigated further by displaying the descriptive statistics, for which it is apparent that `Glucose` and `BMI` also have unrealistic values of 0. A value of `Pregnancies` of 0, is a physically realistic value.
This can be investigated further by displaying the descriptive statistics, for which it is apparent that `Glucose` and `BMI` also have unrealistic values of 0. A value of 0 for `Pregnancies` is a physically realistic value.
%% Cell type:code id: tags:
``` python
pima.describe()
```
%%%% Output: execute_result
Pregnancies Glucose BloodPressure SkinThickness Insulin \
count 768.000000 768.000000 768.000000 768.000000 768.000000
mean 3.845052 120.894531 69.105469 20.536458 79.799479
std 3.369578 31.972618 19.355807 15.952218 115.244002
min 0.000000 0.000000 0.000000 0.000000 0.000000
25% 1.000000 99.000000 62.000000 0.000000 0.000000
50% 3.000000 117.000000 72.000000 23.000000 30.500000
75% 6.000000 140.250000 80.000000 32.000000 127.250000
max 17.000000 199.000000 122.000000 99.000000 846.000000
BMI DiabetesPedigreeFunction Age Outcome
count 768.000000 768.000000 768.000000 768.000000
mean 31.992578 0.471876 33.240885 0.348958
std 7.884160 0.331329 11.760232 0.476951
min 0.000000 0.078000 21.000000 0.000000
25% 27.300000 0.243750 24.000000 0.000000
50% 32.000000 0.372500 29.000000 0.000000
75% 36.600000 0.626250 41.000000 1.000000
max 67.100000 2.420000 81.000000 1.000000
%% Cell type:markdown id: tags:
To see how many 0 values there are in these fields, we can sum the number of rows which match this criteria. The two fields with the most missing values are `SkinThickness` and `Insulin`.
%% Cell type:code id: tags:
``` python
print((pima[['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']] == 0).sum())
```
%%%% Output: stream
Glucose 5
BloodPressure 35
SkinThickness 227
Insulin 374
BMI 11
dtype: int64
%% Cell type:markdown id: tags:
Since 0 is a valid entry in `Pregnancies` and `Outcome`, it is easiest to mark the missing values as NaN (not a number). This is the default for missing values for the sklearn imputation routines. Marking the values as NaN gives the same number of missing entries as previously.
%% Cell type:code id: tags:
``` python
pima[['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']] = \
pima[['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']].replace(0, np.NaN)
print(pima.isnull().sum())
```
%%%% Output: stream
Pregnancies 0
Glucose 5
BloodPressure 35
SkinThickness 227
Insulin 374
BMI 11
DiabetesPedigreeFunction 0
Age 0
Outcome 0
dtype: int64
%% Cell type:markdown id: tags:
We now set up a simple random forest model to investigate the effect of a selection of different imputation methods on the accuracy and feature importance. The function below creates a random forest model for the diabetes data, prints the accuracy and feature importance in descending order.
%% Cell type:code id: tags:
``` python
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
def rf_model(pimadf):
Xf = pimadf.drop(columns=['Outcome'])
Yf = np.ravel(pimadf[['Outcome']])
X_train, X_test, Y_train, Y_test = train_test_split(Xf,Yf,test_size=0.8,random_state=0)
X_train, X_test, Y_train, Y_test = train_test_split(Xf, Yf, test_size=0.2, random_state=0)
rfc = RandomForestClassifier()
rfc.fit(X_train,Y_train) # fit the data to the model
rfc.fit(X_train, Y_train) # fit the data to the model
Y_pred = rfc.predict(X_test)
acc = accuracy_score(Y_test,Y_pred)
print("Testing score is %5.3f" % acc)
feature_importances = pd.DataFrame(rfc.feature_importances_,
index = X_train.columns,
columns=['Importance']).sort_values('Importance', ascending=False)
print(feature_importances)
```
%% Cell type:markdown id: tags:
The first example is to drop all rows which have a missing value. This results in approximately half of the dataset being dropped. For this data one of the most important features is `Insulin`, which is the feature with the most missing values.
%% Cell type:code id: tags:
``` python
pima_drop = pima.copy()
pima_drop.dropna(inplace=True)
print('Dropping rows')
print('Shape of array',pima_drop.shape)
print('Shape of original array',pima.shape)
rf_model(pima_drop)
```
%%%% Output: stream
Dropping rows
Shape of array (392, 9)
Shape of original array (768, 9)
Testing score is 0.761
Testing score is 0.810
Importance
Glucose 0.277382
Age 0.150262
Insulin 0.146099
BMI 0.127310
BloodPressure 0.092259
SkinThickness 0.084266
DiabetesPedigreeFunction 0.078590
Pregnancies 0.043832
Glucose 0.250222
Insulin 0.148675
Age 0.143560
DiabetesPedigreeFunction 0.112166
BMI 0.111587
SkinThickness 0.087640
BloodPressure 0.082608
Pregnancies 0.063542
%% Cell type:markdown id: tags:
For reference we can plot the distribution of `Insulin` and `SkinThickness` to investigate how different imputation methods affect this. For the other features with missing values the distributions will not be significantly affected, and the exact imputation method probably is not critical to the model.
%% Cell type:code id: tags:
``` python
fig, axes = plt.subplots(1, 2, figsize=(10,4))
sns.histplot(pima_drop, x="Insulin", stat="density", ax = axes[0])
sns.histplot(pima_drop, x="SkinThickness", stat="density", ax = axes[1])
axes[1].set_xlim(0,100)
axes[1].set_ylim(0,0.06)
```
%%%% Output: execute_result
(0.0, 0.06)
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:markdown id: tags:
Replacing the missing values with the mean or the median now results in a decrease in the accuracy of the model, and the feature importance of `SkinThickness` and `Insulin` being ranked very low. This is understandable, as replacing the missing values with a constant results in the reduction of the variance of the feature.
%% Cell type:code id: tags:
``` python
pima_mean = pima.copy()
pima_mean.fillna(pima_mean.mean(), inplace=True)
print('Imputation using mean')
rf_model(pima_mean)
```
%%%% Output: stream
Imputation using mean
Testing score is 0.733
Testing score is 0.818
Importance
Glucose 0.217646
BMI 0.169133
BloodPressure 0.134262
DiabetesPedigreeFunction 0.121409
Age 0.105867
SkinThickness 0.102177
Pregnancies 0.075955
Insulin 0.073552
Glucose 0.238235
BMI 0.163498
Age 0.136670
DiabetesPedigreeFunction 0.129249
Insulin 0.087349
BloodPressure 0.085985
Pregnancies 0.082068
SkinThickness 0.076946
%% Cell type:code id: tags:
``` python
pima_median = pima.copy()
pima_median.fillna(pima_mean.median(), inplace=True)
print('Imputation using median')
rf_model(pima_median)
```
%%%% Output: stream
Imputation using median
Testing score is 0.741
Testing score is 0.818
Importance
Glucose 0.232470
BMI 0.165862
BloodPressure 0.132452
DiabetesPedigreeFunction 0.114867
Age 0.107119
SkinThickness 0.102624
Insulin 0.077583
Pregnancies 0.067023
Glucose 0.242399
BMI 0.157620
Age 0.136504
DiabetesPedigreeFunction 0.126532
BloodPressure 0.092300
Insulin 0.088321
SkinThickness 0.078420
Pregnancies 0.077905
%% Cell type:markdown id: tags:
This reduction in variance can be clearly seen by plotting the distributions of the mean and median datasets. For both, the plots are now dominated by a single peak.
%% Cell type:code id: tags:
``` python
fig, axes = plt.subplots(2, 2, figsize=(10,7))
sns.histplot(pima_mean, x="Insulin", stat="density", ax = axes[0,0])
axes[0,0].set_xlabel('Insulin - Mean')
sns.histplot(pima_median, x="Insulin", stat="density", ax = axes[1,0])
axes[1,0].set_xlabel('Insulin - Median')
sns.histplot(pima_mean, x="SkinThickness", stat="density", ax = axes[0,1])
axes[0,1].set_xlabel('SkinThickness - Mean')
sns.histplot(pima_median, x="SkinThickness", stat="density", ax = axes[1,1])
axes[1,1].set_xlabel('SkinThickness - Median');
```
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:markdown id: tags:
The first machine learning imputer we consider is the k-Nearest Neighbours imputer. This iterates through all the missing values, treating each one as a label, and then finds the corresponding label of its k-Nearest Neighbours. This will be affected by the distance metric that is used, the number of neighbours and the order that the features are imputed. In this case we use the default values and 5 neighbours.
Now the accuracy is approximately the same as for the dataset where we dropped the rows, and higher than using the mean and median. Also, since the ranking of features is more consistent with the original dataset.
%% Cell type:code id: tags:
``` python
from sklearn.impute import KNNImputer
pima_knnn = pima.copy()
X = pima_knnn.iloc[:,0:8]
Xm = X.mean()
Xs = X.std()
X = (X-X.mean())/X.std()
Xt = KNNImputer(n_neighbors=5).fit_transform(X)
pima_knnn.iloc[:,0:8] = Xt
print('Imputation using k-Nearest Neighbours')
pima_knnn.iloc[:,0:8] = Xs*pima_knnn.iloc[:,0:8]+Xm
rf_model(pima_knnn)
```
%%%% Output: stream
Imputation using k-Nearest Neighbours
Testing score is 0.741
Testing score is 0.792
Importance
Glucose 0.206801
Insulin 0.165200
BMI 0.138590
BloodPressure 0.114475
SkinThickness 0.114471
DiabetesPedigreeFunction 0.101659
Age 0.094806
Pregnancies 0.063998
Glucose 0.222666
Insulin 0.165023
BMI 0.137235
Age 0.125017
DiabetesPedigreeFunction 0.109920
SkinThickness 0.100569
BloodPressure 0.073761
Pregnancies 0.065809
%% Cell type:markdown id: tags:
The second method we consider is the sklearn `IterativeImputer`. This is an experimental addition to sklearn, so needs to be enabled as well as imported. As it is experimental, it may change in future versions.
`IterativeImputer` works be marking the missing values, and then repeating the imputation process N times or until the data converges. Initially the missing values are set using a simple scheme, such as being replaced by the mean or median. Then on each iteration a machine learning algorithm is used as a regressor to update each column which is marked as having missing values. The non-missing values are used to train the model, and then the model is used to predict the missing values. Any regression technique could be used to predict the missing values. Common ones that are used are BayesianRidge, k-Nearest Neighbours and Random Forest Regression. Using this algorithm with Random Forest Regression is equivalent to the R routine `missForest`. The routine `KNNImputer` can be seen as `IterativeImputer` with one iteration.
In this example, we use the default algorithm, BayesianRidge. This gives that the testing score slightly, however the feature importance is consistent with the original dataset and the results of ``KNNImputer`.
In this example, we use the default algorithm, BayesianRidge. This gives that the testing score slightly, however the feature importance is consistent with the original dataset and the results of `KNNImputer`.
%% Cell type:code id: tags:
``` python
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
pima_ii = pima.copy()
X = pima_ii.iloc[:,0:8]
Xm = X.mean()
Xs = X.std()
X = (X-X.mean())/X.std()
Xt = IterativeImputer(max_iter=20).fit_transform(X)
pima_ii.iloc[:,0:8] = Xt
print('Iterative imputation using Bayesian Ridge')
pima_ii.iloc[:,0:8] = Xs*pima_ii.iloc[:,0:8]+Xm
rf_model(pima_ii)
```
%%%% Output: stream
Iterative imputation using Bayesian Ridge
Testing score is 0.722
Testing score is 0.779
Importance
Glucose 0.204022
BMI 0.164737
Insulin 0.129289
BloodPressure 0.121702
SkinThickness 0.117260
DiabetesPedigreeFunction 0.109276
Age 0.089874
Pregnancies 0.063840
Glucose 0.227739
BMI 0.148859
Age 0.131762
Insulin 0.125641
DiabetesPedigreeFunction 0.119427
SkinThickness 0.101870
BloodPressure 0.074792
Pregnancies 0.069910
%% Cell type:markdown id: tags:
Plotting the distributions shows that the `KNNImputer` and `IterativeImputer` gives similar results for `Insulin`, but that `IterativeImputer` seems to give a distribution which is more consistent with the original dataset for `SkinThickness`.
%% Cell type:code id: tags:
``` python
fig, axes = plt.subplots(3, 2, figsize=(10,10))
sns.histplot(pima_drop, x="Insulin", stat="density", ax = axes[0,0])
axes[0,0].set_xlabel('Insulin - Drop Rows')
sns.histplot(pima_knnn, x="Insulin", stat="density", ax = axes[1,0])
axes[1,0].set_xlabel('Insulin - kNN')
sns.histplot(pima_ii, x="Insulin", stat="density", ax = axes[2,0])
axes[2,0].set_xlabel('Insulin - Iterative Imputer')
sns.histplot(pima_drop, x="SkinThickness", stat="density", ax = axes[0,1])
axes[0,1].set_xlabel('SkinThickness - Drop Rows')
axes[0,1].set_xlim(0,100)
axes[0,1].set_ylim(0,0.06)
sns.histplot(pima_knnn, x="SkinThickness", stat="density", ax = axes[1,1])
axes[1,1].set_xlabel('SkinThickness - kNN')
axes[1,1].set_xlim(0,100)
axes[1,1].set_ylim(0,0.06)
sns.histplot(pima_ii, x="SkinThickness", stat="density", ax = axes[2,1])
axes[2,1].set_xlabel('SkinThickness - Iterative Imputer')
axes[2,1].set_xlim(0,100)
axes[2,1].set_ylim(0,0.06)
```
%%%% Output: execute_result
(0.0, 0.06)
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:markdown id: tags:
## Cross-validation analysis
%% Cell type:markdown id: tags:
For all the examples so far we have only consider one realisation of the Random Forest Regressor. To understand the effectiveness of the various imputation algorithms we need to combine this with cross validation. The following code consider the variation of the f1-score using Logistic Regression for the imputation strategies:
* Drop rows with missing values.
* Simple imputation using the mean.
* Simple imputation using the median.
* k-Nearest Neighbours imputation.
* Iterative imputation using:
* BayesianRidge,
* DecisionTreeRegressor,
* RandomForestRegressor,
* k-Nearest Neighbours Regression.
The individual scores for each run are stored in a dataframe, for which we can finally investigate the descriptive statistics.
%% Cell type:code id: tags:
``` python
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RepeatedKFold
N_SPLITS = 10