Reproduire la variabilité des données

Traitement des données manquantes par imputation dans R

Michal Oleszak

Machine Learning Engineer

Variabilité des données imputées

Un diagramme de dispersion « Height » vs « Weight », où les valeurs imputées dans l'une ou l'autre des variables sont mises en évidence par une couleur différente.

  • Aucune variabilité dans les données imputées.
  • Nous voulons que l'imputation reflète la variabilité des données observées.
  • En imputation fondée sur un modèle, les mêmes valeurs de prédicteurs donnent la même valeur imputée.
  • Solution : tirer des distributions conditionnelles.
Traitement des données manquantes par imputation dans R

Qu'est-ce qu'une prédiction

La plupart des modèles statistiques 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.

Au lieu de cela, on peut échantillonner dans ces distributions pour accroître la variabilité.

Traitement des données manquantes par imputation dans R

Tirer des distributions conditionnelles

Un tracé de la fonction de densité d'une loi normale. La moyenne de 25 est mise en évidence.

Traitement des données manquantes par imputation dans 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 la probabilité dépasse 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).

Traitement des données manquantes par imputation dans 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)
Traitement des données manquantes par imputation dans 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)
Traitement des données manquantes par imputation dans 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")
Traitement des données manquantes par imputation dans 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)
Traitement des données manquantes par imputation dans 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]
Traitement des données manquantes par imputation dans R

Imputation par régression logistique

Variabilité des données imputées :

table(preds[missing_physactive])
 1 
26

Variabilité des données observées PhysActive :

table(nhanes$PhysActive)
  0   1 
181 610
Traitement des données manquantes par imputation dans R

Échantillonner selon 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]
Traitement des données manquantes par imputation dans R

Échantillonner selon 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]
Traitement des données manquantes par imputation dans R

Échantillonner selon 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]
Traitement des données manquantes par imputation dans R

Échantillonner selon les probabilités de classe

Variabilité des données imputées :

table(preds[missing_physactive])
0  1 
5 21

Variabilité des données observées PhysActive :

table(nhanes$PhysActive)
  0   1 
181 610
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...