Comment gérer les données manquantes

L’un des problèmes les plus courants auxquels j’ai été confronté dans le nettoyage des données/l’analyse exploratoire est la gestion des valeurs manquantes: comment gérer les données manquantes. Tout d’abord, comprenez qu’il n’y a AUCUNE bonne façon de traiter les données manquantes. 

comment gérer les données manquantes

Avant de passer aux méthodes d’imputation des données, nous devons comprendre la raison pour laquelle les données manquent.

Manquant au hasard (MAR) : Manquant au hasard signifie que la propension d’un point de données à manquer n’est pas liée aux données manquantes, mais elle est liée à certaines des données observées

Missing Completely at Random (MCAR): Le fait qu’une certaine valeur manque n’a rien à voir avec sa valeur hypothétique et avec les valeurs des autres variables.

Données manquantes non aléatoires (MNAR) : deux raisons possibles sont que la valeur manquante dépend de la valeur hypothétique (par exemple, les personnes à hauts salaires ne veulent généralement pas révéler leurs revenus dans les enquêtes) ou que la valeur manquante dépend de la valeur d’une autre variable (par exemple, Supposons que les femmes ne veulent généralement pas révéler leur âge ! Ici, la valeur manquante dans la variable d’âge est impactée par la variable de sexe).

Dans les deux premiers cas, il est sûr de supprimer les données avec des valeurs manquantes en fonction de leurs occurrences, tandis que dans le troisième cas, la suppression des observations avec des valeurs manquantes peut produire un biais dans le modèle. Nous devons donc être très prudents avant de supprimer des observations. Notez que l’imputation ne donne pas nécessairement de meilleurs résultats.

Comment gérer les données manquantes données manquantes

Effacement (deletion)

  • Listwise

La suppression par liste (analyse de cas complète) supprime toutes les données d’une observation qui a une ou plusieurs valeurs manquantes. En particulier si les données manquantes se limitent à un petit nombre d’observations, vous pouvez simplement choisir d’éliminer ces cas de l’analyse. Cependant, dans la plupart des cas, il est souvent désavantageux d’utiliser la suppression par liste. En effet, les hypothèses de MCAR (Missing Completely at Random) sont généralement rares à prendre en charge. Par conséquent, les méthodes de suppression par liste produisent des paramètres et des estimations biaisés.

newdata <- na.omit(mydata)# In python
mydata.dropna(inplace=True)
  • Pairwise

La suppression par paires analyse tous les cas dans lesquels les variables d’intérêt sont présentes et maximise ainsi toutes les données disponibles par une base d’analyse. L’un des points forts de cette technique est qu’elle augmente la puissance de votre analyse, mais elle présente de nombreux inconvénients. Il suppose que les données manquantes sont MCAR. Si vous supprimez par paires, vous vous retrouverez avec un nombre différent d’observations contribuant à différentes parties de votre modèle, ce qui peut rendre l’interprétation difficile.

Comment gérer les données manquantes données manquantes
#Pairwise Deletion
ncovMatrix <- cov(mydata, use="pairwise.complete.obs")
#Listwise Deletion
ncovMatrix <- cov(mydata, use="complete.obs")
  • Dropping Variables

Il est toujours préférable de conserver les données que de les jeter. Parfois, vous pouvez supprimer des variables si les données manquent pour plus de 60 % des observations, mais uniquement si cette variable est insignifiante. Cela dit, l’imputation est toujours un choix préférable à l’abandon de variables.

df <- subset(mydata, select = -c(x,z) )
df <- mydata[ -c(1,3:4) ]
In python
del mydata.column_name
mydata.drop('column_name', axis=1, inplace=True)

Méthodes sur les séries temporelles

  • Last Observation Carried Forward (LOCF) et Next Observation Carried Backward (NOCB)

Il s’agit d’une approche statistique commune à l’analyse des données longitudinales de mesures répétées où certaines observations de suivi peuvent être manquantes. Les données longitudinales suivent le même échantillon à différents moments dans le temps. Ces deux méthodes peuvent introduire un biais dans l’analyse et donner de mauvais résultats lorsque les données présentent une tendance visible.

  • Interpolation linéaire

Cette méthode fonctionne bien pour une série chronologique avec une certaine tendance, mais ne convient pas aux données saisonnières.

  • Saisonnalité + interpolation

Cette méthode fonctionne bien pour les données présentant à la fois une tendance et une saisonnalité.

library(imputeTS)na.random(mydata)                  # Random Imputation
na.locf(mydata, option = "locf") # Last Obs. Carried Forward
na.locf(mydata, option = "nocb") # Next Obs. Carried Backward
na.interpolation(mydata) # Linear Interpolation
na.seadec(mydata, algorithm = "interpolation") # Seasonal Adjustment then Linear Interpolation

Imputation (méthodes classiques)

Moyenne, médiane et mode

Le calcul de la moyenne globale, de la médiane ou du mode est une méthode d’imputation très basique, c’est la seule fonction testée qui ne tire aucun avantage des caractéristiques de la série chronologique ou de la relation entre les variables. Il est très rapide, mais présente des inconvénients évidents. Un inconvénient est que l’imputation moyenne réduit la variance dans l’ensemble de données.

library(imputeTS)na.mean(mydata, option = "mean")   # Mean Imputation
na.mean(mydata, option = "median") # Median Imputation
na.mean(mydata, option = "mode") # Mode Imputation
In Python
from sklearn.preprocessing import Imputer
values = mydata.values
imputer = Imputer(missing_values=’NaN’, strategy=’mean’)
transformed_values = imputer.fit_transform(values)
# strategy can be changed to "median" and “most_frequent”

Régression linéaire

Pour commencer, plusieurs prédicteurs de la variable avec des valeurs manquantes sont identifiés à l’aide d’une matrice de corrélation. Les meilleurs prédicteurs sont sélectionnés et utilisés comme variables indépendantes dans une équation de régression. La variable avec des données manquantes est utilisée comme variable dépendante. Les cas avec des données complètes pour les variables prédictives sont utilisés pour générer l’équation de régression ; l’équation est ensuite utilisée pour prédire les valeurs manquantes pour les cas incomplets.

Dans un processus itératif, les valeurs de la variable manquante sont insérées, puis tous les cas sont utilisés pour prédire la variable dépendante. Ces étapes sont répétées jusqu’à ce qu’il y ait peu de différence entre les valeurs prédites d’une étape à l’autre, c’est-à-dire qu’elles convergent.

Il fournit « théoriquement » de bonnes estimations pour les valeurs manquantes. Cependant, ce modèle présente plusieurs inconvénients qui tendent à l’emporter sur les avantages. Premièrement, parce que les valeurs remplacées ont été prédites à partir d’autres variables, elles ont tendance à s’accorder « trop bien » et l’erreur type est donc dégonflée. Il faut également supposer qu’il existe une relation linéaire entre les variables utilisées dans l’équation de régression lorsqu’il n’y en a peut-être pas.

Imputation multiple

  1. Imputation : imputez m fois les entrées manquantes des ensembles de données incomplets (m = 3 dans la figure). Notez que les valeurs imputées sont tirées d’une distribution. La simulation de tirages au sort n’inclut pas l’incertitude dans les paramètres du modèle. Une meilleure approche consiste à utiliser la simulation Markov Chain Monte Carlo (MCMC). Cette étape aboutit à m ensembles de données complets.
  2. Analyse : analysez chacun des m ensembles de données complétés.
  3. Mise en commun : intégrez les résultats de l’analyse m dans un résultat final
Comment gérer les données manquantes données manquantes
# We will be using mice library in r
library(mice)
# Deterministic regression imputation via mice
imp <- mice(mydata, method = "norm.predict", m = 1)

# Store data
data_imp <- complete(imp)

# Multiple Imputation
imp <- mice(mydata, m = 5)
#build predictive model
fit <- with(data = imp, lm(y ~ x + z))
#combine results of all 5 models
combine <- pool(fit)

C’est de loin la méthode d’imputation préférée pour les raisons suivantes :

  • Facile à utiliser
  • Aucun biais (si le modèle d’imputation est correct)

Imputation de données catégoriques

  1. L’imputation modale est une méthode, mais elle introduira certainement un biais.
  2. Les valeurs manquantes peuvent être traitées comme une catégorie distincte en soi. Nous pouvons créer une autre catégorie pour les valeurs manquantes et les utiliser comme un niveau différent. C’est la méthode la plus simple.
  3. Modèles de prédiction : Ici, nous créons un modèle prédictif pour estimer les valeurs qui remplaceront les données manquantes. Dans ce cas, nous divisons notre ensemble de données en deux ensembles : un ensemble sans valeurs manquantes pour la variable (formation) et un autre avec des valeurs manquantes (test). Nous pouvons utiliser des méthodes telles que la régression logistique et l’ANOVA pour la prédiction.
  4. Imputation multiple.

Avec le machine learning (knn) - voir les autres cours pour des méthodes plus élaborées

Il existe d’autres techniques d’apprentissage automatique telles que XGBoost et Random Forest pour l’imputation de données, mais nous discuterons de KNN car il est largement utilisé. Dans cette méthode, k voisins sont choisis en fonction d’une mesure de distance et leur moyenne est utilisée comme estimation d’imputation.

La méthode nécessite la sélection du nombre de voisins les plus proches et une métrique de distance. KNN peut prédire à la fois des attributs discrets (la valeur la plus fréquente parmi les k voisins les plus proches) et des attributs continus (la moyenne parmi les k voisins les plus proches)
La métrique de distance varie selon le type de données :

  1.  Données continues : les métriques de distance couramment utilisées pour les données continues sont Euclidienne, Manhattan et Cosinus.
  2. Données catégorielles : La distance de Hamming est généralement utilisée dans ce cas. Il prend tous les attributs catégoriels et pour chacun, comptez-en un si la valeur n’est pas la même entre deux points. La distance de Hamming est alors égale au nombre d’attributs pour lesquels la valeur était différente.

L’une des caractéristiques les plus attrayantes de l’algorithme KNN est qu’il est simple à comprendre et facile à mettre en œuvre. La nature non paramétrique de KNN lui donne un avantage dans certains contextes où les données peuvent être hautement « inhabituelles ».

L’un des inconvénients évidents de l’algorithme KNN est qu’il prend du temps lors de l’analyse de grands ensembles de données, car il recherche des instances similaires dans l’ensemble de données.

De plus, la précision de KNN peut être sévèrement dégradée avec des données de grande dimension car il y a peu de différence entre le voisin le plus proche et le plus éloigné.

library(DMwR)
knnOutput <- knnImputation(mydata)
In python
from fancyimpute import KNN

# Use 5 nearest rows which have a feature to fill in each row's missing features
knnOutput = KNN(k=5).complete(mydata)

Parmi toutes les méthodes décrites ci-dessus, l’imputation multiple et le KNN sont largement utilisés, et l’imputation multiple étant plus simple est généralement préférée.

Partager