Imputation par k plus proches voisins (kNN)

Traitement des données manquantes par imputation dans R

Michal Oleszak

Machine Learning Engineer

Imputation par k plus proches voisins (kNN)

Un tableau à trois colonnes : A, B et C. Une valeur est manquante dans la colonne A.

Traitement des données manquantes par imputation dans R

Imputation par k plus proches voisins (kNN)

Un tableau à trois colonnes : A, B et C. Une valeur est manquante dans la colonne A. Trois lignes sans valeur manquante sont mises en évidence en couleur.

Pour chaque observation avec des valeurs manquantes :

  1. Trouver les k autres observations (donneurs, voisins) les plus similaires.
Traitement des données manquantes par imputation dans R

Imputation par k plus proches voisins (kNN)

Un tableau à trois colonnes : A, B et C. Trois lignes sans valeur manquante sont mises en évidence en couleur. La valeur auparavant manquante dans A a été remplacée par la moyenne des nombres de la même colonne dans les lignes mises en évidence.

Pour chaque observation avec des valeurs manquantes :

  1. Trouver les k autres observations (donneurs, voisins) les plus similaires.
  2. Remplacer les valeurs manquantes par une agrégation des k donneurs (moyenne, médiane, mode).
Traitement des données manquantes par imputation dans R

Mesures de distance

La distance entre deux observations a et b :

Distance euclidienne pour n variables numériques :

$\sqrt{\Sigma_{i=1}^{n} (a_i - b_i)^{2}}$

Distance de Manhattan pour f variables factorielles :

$\Sigma_{i=1}^{f} |a_i - b_i|$

Distance de Hamming pour c variables catégorielles :

$\Sigma_{i=1}^{c} I(a_i \neq b_i)$

Un repère avec deux points reliés par une ligne droite.

Un repère avec deux points reliés par deux lignes perpendiculaires, comme deux coins opposés d'un rectangle.

Traitement des données manquantes par imputation dans R

Distance de Gower

Un faux tableau de données comprenant trois types de variables, chacune en couleur : numériques, factorielles et catégorielles.

Traitement des données manquantes par imputation dans R

Distance de Gower

Un faux tableau de données comprenant trois types de variables, chacune en couleur : numériques, factorielles et catégorielles. Chaque type de variable a une flèche pointant vers la mesure de distance correspondante : euclidienne, Manhattan et Hamming. Les trois mesures convergent vers une ellipse « Distance de Gower », combinaison des trois.

Traitement des données manquantes par imputation dans R

Imputation kNN en pratique

library(VIM)
nhanes_imp <- kNN(nhanes, k = 5, variable = c("TotChol", "Pulse"))
head(nhanes_imp)
  Age Gender Weight Height Diabetes TotChol Pulse PhysActive TotChol_imp Pulse_imp
1  16   male   73.2  172.0    FALSE    3.00    76       TRUE       FALSE     FALSE
2  17   male   72.3  176.0    FALSE    2.61    74       TRUE       FALSE     FALSE
3  12   male   57.7  158.9    FALSE    4.27    80       TRUE       FALSE     FALSE
4  16   male   88.9  183.3    FALSE    3.62    58       TRUE       FALSE     FALSE
5  13 female   45.1  157.6    FALSE    2.66    92       TRUE       FALSE     FALSE
6  16 female   48.7  158.4    FALSE    4.32    58      FALSE       FALSE     FALSE
Traitement des données manquantes par imputation dans R

Pondérer les donneurs

  • Parmi les k voisins choisis pour une observation, certains sont plus proches que d'autres.
  • On peut vouloir accorder plus de poids aux voisins plus proches lors de l'agrégation.
  • Agrégerez les voisins par une moyenne pondérée, avec des poids égaux aux distances inverses à chaque voisin.
  • Possible seulement pour l'imputation de variables numériques.
nhanes_imp <- nhanes %>% 
  kNN(variable = c("TotChol", "Pulse"),
      k = 5,
      numFun = weighted.mean,
      weightDist = TRUE)
Traitement des données manquantes par imputation dans R

Trier les variables

  • L'algorithme kNN parcourt les variables et les impute une à une.
  • Les distances entre observations sont recalculées chaque fois.
  • Si la première variable a beaucoup de valeurs manquantes, le calcul de distance pour la deuxième reposera sur de nombreuses valeurs imputées.
  • Il est préférable de trier les variables par nombre de valeurs manquantes, en ordre croissant, avant d'exécuter kNN.
Traitement des données manquantes par imputation dans R

Trier les variables en pratique

vars_by_NAs <- nhanes %>% 
  is.na() %>%
  colSums() %>%
  sort(decreasing = FALSE) %>% 
  names()
nhanes_imp <- nhanes %>% 
  select(vars_by_NAs) %>% 
  kNN(k = 5)
Traitement des données manquantes par imputation dans R

Passons à la pratique avec l'imputation kNN !

Traitement des données manquantes par imputation dans R

Preparing Video For Download...