Boomgebaseerde imputatie

Omgaan met missende data met imputaties in R

Michal Oleszak

Machine Learning Engineer

Boomgebaseerde imputatie-aanpak

Gebruik machinelearningmodellen om missende waarden te voorspellen!

  • Niet-parametrisch: geen aannames over relaties tussen variabelen.
  • Vangt complexe niet-lineaire patronen.
  • Vaak betere voorspellingen dan simpele statistische modellen.

In deze course: missForest-pakket, gebaseerd op randomForest

Omgaan met missende data met imputaties in R

Beslisbomen

Een beslisboom die laat zien hoe een model beslissingen neemt. Het model kent een andere kans op diabetes toe aan combinaties van lengte en gewicht.

Omgaan met missende data met imputaties in R

Random forests

Schema van hoe random forests werken. Originele data levert drie gebootstrapte datasets met willekeurige kolomsubsets. Op elk wordt een beslisboom getraind; de resultaten van alle bomen worden geaggregeerd.

Omgaan met missende data met imputaties in R

missForest-algoritme

  1. Maak een eerste gok voor missende waarden met gemiddelde-imputatie.
  2. Sorteer variabelen oplopend naar aantal missende waarden.
  3. Voor elke variabele x:
    • Train een random forest op het geobserveerde deel van x (andere variabelen als voorspellers).
    • Gebruik dit om het missende deel van x te voorspellen.
  4. Herhaal stap 3 tot de geïmputeerde waarden nauwelijks nog veranderen.
Omgaan met missende data met imputaties in R

missForest in de praktijk

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
Omgaan met missende data met imputaties in R

Imputatiefout

missForest() geeft een out-of-bag (OOB) schatting van de imputatiefout:

  • Genormaliseerde root mean squared error (NRMSE) voor continue variabelen.
  • Aandeel fout geclassificeerde invoeren (PFC) voor categorische variabelen.

In beide gevallen duidt een waarde dicht bij 0 op goede prestaties; rond 1 is slecht.

imp_res <- missForest(nhanes)
imp_res$OOBerror
      NRMSE         PFC 
0.147687025 0.003676471
Omgaan met missende data met imputaties in R

Imputatiefout

missForest() geeft een out-of-bag (OOB) schatting van de imputatiefout:

  • Genormaliseerde root mean squared error (NRMSE) voor continue variabelen.
  • Aandeel fout geclassificeerde invoeren (PFC) voor categorische variabelen.

In beide gevallen duidt een waarde dicht bij 0 op goede prestaties; rond 1 is slecht.

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
Omgaan met missende data met imputaties in R

Snelheid–nauwkeurigheid-afruil

Meerdere random forests trainen kost tijd.

Idee: lever wat nauwkeurigheid in en verklein het bos om rekentijd te besparen.

  • Verlaag het aantal bomen per bos (ntree).
  • Verlaag het aantal variabelen voor splitsen (mtry).

Effect op rekentijd verschilt:

  • Minder ntree heeft een lineair effect.
  • Minder mtry versnelt meer bij veel variabelen.
Omgaan met missende data met imputaties in R

Snelheid–nauwkeurigheid in de praktijk

Standaardinstellingen:

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

Verkleinde forests:

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
Omgaan met missende data met imputaties in R

Laten we oefenen!

Omgaan met missende data met imputaties in R

Preparing Video For Download...