Reproduire la variabilité des données

Gérer les données manquantes avec des imputations en R

Michal Oleszak

Machine Learning Engineer

Variabilité des données imputées

Un « margin plot » : nuage de points « Height » vs « Weight », où les valeurs imputées dans l'une des deux variables sont mises en évidence par une autre couleur.

  • Aucune variabilité dans les données imputées.
  • Nous voulons que l'imputation reproduise la variabilité des données observées.
  • En imputation par modèle, mêmes prédicteurs → même valeur imputée.
  • Solution : tirer des distributions conditionnelles.
Gérer les données manquantes avec des imputations en R

Qu'est-ce qu'une prédiction ?

La plupart des modèles estiment la distribution conditionnelle de la variable réponse :

$p(y|X)$

Pour faire une prédiction unique, on résume cette distribution :

  • Régression linéaire : valeur attendue de la distribution conditionnelle.
  • Régression logistique : classe à la probabilité la plus élevée.

À la place, on peut tirer dans ces distributions pour accroître la variabilité.

Gérer les données manquantes avec des imputations en R

Tirer des distributions conditionnelles

Courbe de densité d'une loi normale, avec la moyenne 25 mise en évidence.

Gérer les données manquantes avec des imputations en R

Tirer des distributions conditionnelles

Un tableau à quatre colonnes : probabilité prédite par régression logistique (0,7 pour toutes les lignes), booléen indiquant si > 0,5 (TRUE pour toutes), valeurs imputées par seuil (1 pour toutes) et valeur imputée tirée de la distribution conditionnelle (1 pour la plupart, mais 0 pour certaines).

Gérer les données manquantes avec des imputations en R

Imputation par régression logistique

Tâche : imputer PhysActive à partir des données nhanes avec une régression logistique.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
Gérer les données manquantes avec des imputations en R

Imputation par régression logistique

Tâche : imputer PhysActive à partir des données nhanes avec une régression logistique.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
Gérer les données manquantes avec des imputations en R

Imputation par régression logistique

Tâche : imputer PhysActive à partir des données nhanes avec une régression logistique.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
Gérer les données manquantes avec des imputations en R

Imputation par régression logistique

Tâche : imputer PhysActive à partir des données nhanes avec une régression logistique.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
Gérer les données manquantes avec des imputations en R

Imputation par régression logistique

Tâche : imputer PhysActive à partir des données nhanes avec une régression logistique.

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Gérer les données manquantes avec des imputations en R

Imputation par régression logistique

Variabilité des données imputées :

table(preds[missing_physactive])
 1 
26

Variabilité des données PhysActive observées :

table(nhanes$PhysActive)
  0   1 
181 610
Gérer les données manquantes avec des imputations en R

Tirer depuis les probabilités de classe

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Gérer les données manquantes avec des imputations en R

Tirer depuis les probabilités de classe

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")

nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Gérer les données manquantes avec des imputations en R

Tirer depuis les probabilités de classe

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- rbinom(length(preds), size = 1, prob = preds)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
Gérer les données manquantes avec des imputations en R

Tirer depuis les probabilités de classe

Variabilité des données imputées :

table(preds[missing_physactive])
0  1 
5 21

Variabilité des données PhysActive observées :

table(nhanes$PhysActive)
  0   1 
181 610
Gérer les données manquantes avec des imputations en R

Passons à la pratique !

Gérer les données manquantes avec des imputations en R

Preparing Video For Download...