Dans les cahiers précédents, nous avons appris à remplacer les valeurs manquantes par différentes techniques. Ces méthodes supposent que les données sont complètement manquantes au hasard (MCAR).
Il existe d’autres méthodes qui peuvent être utilisées lorsque les valeurs ne sont pas manquantes au hasard, par exemple l’imputation de valeur arbitraire ou l’imputation de fin de distribution. Cependant, ces techniques d’imputation affecteront considérablement la distribution des variables et ne sont donc pas adaptées aux modèles linéaires.
**Que pouvons-nous faire si les données ne sont pas MCAR et que nous voulons utiliser des modèles linéaires ?
Si les données ne sont pas manquantes au hasard, il est judicieux de remplacer les observations manquantes par la moyenne / médiane / mode ET de signaler ces observations manquantes également par un Indicateur manquant. Un indicateur manquant est une variable binaire supplémentaire, qui indique si les données étaient manquantes pour une observation (1) ou non (0).
Pour quelles variables puis-je ajouter un indicateur manquant ?
Nous pouvons ajouter un indicateur manquant aux variables numériques et catégorielles.
Note
L’ajout d’un indicateur manquant n’est jamais utilisé seul. Au contraire, il est toujours utilisé conjointement avec une autre technique d’imputation, qui peut être l’imputation moyenne / médiane pour les variables numériques, ou l’imputation fréquente par catégorie pour les variables catégorielles. Nous pouvons également utiliser l’imputation par échantillonnage aléatoire en ajoutant un indicateur manquant pour les variables catégorielles et numériques.
Utilisés ensemble :
- Imputation moyenne / médiane + indicateur manquant (Variables numériques)
- Imputation fréquente par catégorie + indicateur manquant (Variables catégorielles)
- Échantillon aléatoire Imputation + indicateur manquant (numérique et catégorique)
Hypothèses
- Les données ne manquent pas au hasard
- Les données manquantes sont prédictives
Avantages
- Facile à mettre en œuvre
- Saisit l’importance des données manquantes s’il y en a une
Limitations
- Élargir l’espace de présentation
- La variable originale doit encore être imputée pour éliminer le NaN
L’ajout d’un indicateur manquant augmentera d’une variable par variable l’ensemble de données comportant des valeurs manquantes. Ainsi, si l’ensemble de données contient 10 caractéristiques, et que toutes ont des valeurs manquantes, après avoir ajouté un indicateur manquant, nous aurons un ensemble de données avec 20 caractéristiques : les 10 caractéristiques originales plus 10 caractéristiques binaires supplémentaires, qui indiquent pour chacune des variables originales si la valeur était manquante ou non. Ce n’est peut-être pas un problème pour les ensembles de données comportant des dizaines ou quelques centaines de variables, mais si notre ensemble de données original contient des milliers de variables, en créant une variable supplémentaire pour indiquer NA, nous nous retrouverons avec de très grands ensembles de données.
Important
En outre, les données ont tendance à manquer pour une même observation dans plusieurs variables, ce qui fait que de nombreuses variables indicatrices manquantes sont en fait similaires ou identiques les unes aux autres.
Note finale
Généralement, l’imputation de la moyenne / médiane / mode est effectuée en ajoutant une variable pour saisir les observations pour lesquelles les données sont manquantes, couvrant ainsi deux angles : si les données sont complètement manquantes au hasard, cela sera pris en compte par l’imputation de la moyenne / médiane / mode, et si ce n’est pas le cas, cela sera pris en compte par l’indicateur manquant.
Ces deux méthodes sont extrêmement simples à mettre en œuvre et constituent donc un choix de premier ordre dans les concours de science des données.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# to split the datasets
from sklearn.model_selection import train_test_split
data = pd.read_csv('../exportfeature.csv',usecols=['iCote', 'nbPartants.1', 'place'],sep=";",encoding='ANSI')
# Imputation de valeur manquantes
# 7 % dans nbPartants.1
data.loc[data.sample(frac=0.07).index, 'nbPartants.1'] = np.nan
data.head()
place nbPartants.1 iCote
0 1 17.0 12.0
1 1 18.0 12.0
2 0 10.0 9.0
3 1 13.0 4.0
4 0 17.0 8.0
# Vérification des valeurs manquantes
data.isnull().mean()
place 0.000000
nbPartants.1 0.069986
iCote 0.171381
dtype: float64
Pour ajouter un indicateur binaire manquant, nous n’avons pas nécessairement besoin d’apprendre quoi que ce soit de l’ensemble de formation, donc en principe nous pourrions le faire dans l’ensemble de données original et ensuite séparer en formation et test. Cependant, je ne recommande pas cette pratique. En outre, si vous utilisez scikit-learn pour ajouter l’indicateur manquant, l’indicateur tel qu’il est conçu doit apprendre de la série de données du train, c’est-à-dire les caractéristiques à imputer, c’est-à-dire les caractéristiques pour lesquelles la variable binaire doit être ajoutée. Nous verrons plus en détail les différentes mises en œuvre des indicateurs manquants dans les prochains cahiers. Pour l’instant, voyons comment créer manuellement un indicateur binaire manquant.
# Création du jeu d'entrainement et de test
X_train, X_test, y_train, y_test = train_test_split(
data[['iCote', 'nbPartants.1']],
data['place'],
test_size=0.3,
random_state=0)
X_train.shape, X_test.shape
((14352, 2), (6152, 2))
# % de valeurs absentes
X_train['M1'].isnull().mean()
age 0.191048
fare 0.000000
dtype: float64
# ajouter l'indicateur manquant
# ceci est fait très simplement en utilisant np.where de numpy
# et est nul de pandas :
X_train['iCote_NA'] = np.where(X_train['iCote'].isnull(), 1, 0)
X_test['iCote_NA'] = np.where(X_test['iCote'].isnull(), 1, 0)
X_train.head()
iCote nbPartants.1 iCote_NA
2540 3.0 16.0 0
19008 5.0 13.0 0
7624 34.0 15.0 0
2575 4.0 13.0 0
852 26.0 17.0 0
# la moyenne de la variable binaire, coïncide avec la
# pourcentage de valeurs manquantes dans la variable originale
X_train['iCote_NA'].mean()
0.17147435897435898
X_train.isnull().mean()
iCote 0.171474
nbPartants.1 0.070234
iCote_NA 0.000000
dtype: float64
# Imputation par la médiane
median = X_train['iCote'].median()
X_train['iCote'] = X_train['iCote'].fillna(median)
X_test['iCote'] = X_test['iCote'].fillna(median)
# on regarde les résultats
X_train.isnull().mean()
iCote 0.000000
nbPartants.1 0.070234
iCote_NA 0.000000
dtype: float64

Je télécharge mon guide gratuit
Thank you!
You have successfully joined our subscriber list.
Vous recevrez votre guide par email sans aucun engagement de votre part.