Imputation par arbres de décision

Traitement des données manquantes par imputation dans R

Michal Oleszak

Machine Learning Engineer

Approche d'imputation par arbres

Utilisez des modèles de Machine Learning pour prédire les valeurs manquantes !

  • Approche non paramétrique : aucune hypothèse sur les liens entre variables.
  • Capte des motifs non linéaires complexes.
  • Souvent plus performante que de simples modèles statistiques.

Dans ce cours : le paquet missForest, basé sur randomForest

Traitement des données manquantes par imputation dans R

Arbres de décision

Schéma d'un arbre de décision montrant comment un modèle peut prendre des décisions. Le modèle attribue une probabilité différente de diabète selon les combinaisons de taille et de poids.

Traitement des données manquantes par imputation dans R

Forêts aléatoires

Schéma expliquant le fonctionnement des forêts aléatoires. Les données d'origine produisent trois ensembles par « bagging » avec des sous-ensembles de colonnes aléatoires. Un arbre de décision est ajusté à chacun, puis les résultats sont agrégés.

Traitement des données manquantes par imputation dans R

Algorithme missForest

  1. Faire une première estimation des valeurs manquantes par imputation à la moyenne.
  2. Trier les variables par ordre croissant de valeurs manquantes.
  3. Pour chaque variable x :
    • Ajuster une forêt aléatoire sur la partie observée de x (en utilisant les autres variables comme prédicteurs).
    • L'utiliser pour prédire la partie manquante de x.
  4. Répéter l'étape 3 jusqu'à ce que les valeurs imputées changent peu.
Traitement des données manquantes par imputation dans R

missForest en pratique

nhanes %>% is.na() %>% colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0          9          8          1         85         32         26
library(missForest)
imp_res <- missForest(nhanes)
nhanes_imp  <- imp_res$ximp
nhanes_imp %>% is.na() %>% colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0          0          0          0          0          0          0
Traitement des données manquantes par imputation dans R

Erreur d'imputation

missForest() fournit une estimation de l'erreur d'imputation hors sac (OOB) :

  • NRMSE (erreur quadratique moyenne normalisée) pour les variables continues.
  • PFC (proportion d'entrées mal classées) pour les variables catégorielles.

Dans les deux cas, une bonne performance donne une valeur proche de 0, et des valeurs autour de 1 indiquent un piètre résultat.

imp_res <- missForest(nhanes)
imp_res$OOBerror
      NRMSE         PFC 
0.147687025 0.003676471
Traitement des données manquantes par imputation dans R

Erreur d'imputation

missForest() fournit une estimation de l'erreur d'imputation hors sac (OOB) :

  • NRMSE (erreur quadratique moyenne normalisée) pour les variables continues.
  • PFC (proportion d'entrées mal classées) pour les variables catégorielles.

Dans les deux cas, une bonne performance donne une valeur proche de 0, et des valeurs autour de 1 indiquent un piètre résultat.

imp_res <- missForest(nhanes, variablewise = TRUE)
imp_res$OOBerror
    MSE       PFC       MSE       MSE       PFC       MSE       MSE       MSE 
0.00000   0.00000 285.79563  40.42142   0.00735   0.53444 129.03609   0.17576
Traitement des données manquantes par imputation dans R

Compromis vitesse–précision

Faire croître plusieurs forêts aléatoires peut être long.

Idée : sacrifier un peu de précision et réduire la taille de la forêt pour diminuer le temps de calcul.

  • Réduire le nombre d'arbres dans chaque forêt (argument ntree).
  • Réduire le nombre de variables utilisées pour le partitionnement (argument mtry).

L'effet sur le temps de calcul diffère :

  • Réduire ntree a un effet linéaire.
  • Réduire mtry accélère davantage quand il y a beaucoup de variables.
Traitement des données manquantes par imputation dans R

Compromis vitesse–précision en pratique

Paramètres par défaut :

start_time <- Sys.time()
imp_res <- missForest(nhanes)
end_time <- Sys.time()
print(imp_res$OOBerror)
print(end_time - start_time)
      NRMSE         PFC 
0.147687025 0.003676471
Time difference of 5.496582 secs

Forêts réduites :

start_time <- Sys.time()
imp_res <- missForest(nhanes,
                      ntree = 10,
                      mtry = 2)
end_time <- Sys.time()
print(imp_res$OOBerror)
print(end_time - start_time)
      NRMSE         PFC 
0.162420139 0.007425743
Time difference of 0.516367 secs
Traitement des données manquantes par imputation dans R

Passons à la pratique !

Traitement des données manquantes par imputation dans R

Preparing Video For Download...