Imputasi berbasis pohon

Menangani Data Hilang dengan Imputasi di R

Michal Oleszak

Machine Learning Engineer

Pendekatan imputasi berbasis pohon

Gunakan model machine learning untuk memprediksi nilai hilang!

  • Pendekatan non-parametrik: tanpa asumsi relasi antarvariabel.
  • Menangkap pola non-linear yang kompleks.
  • Sering lebih akurat dibanding model statistik sederhana.

Kursus ini: paket missForest, berbasis randomForest

Menangani Data Hilang dengan Imputasi di R

Pohon keputusan

Skema pohon keputusan yang menunjukkan cara model mengambil keputusan. Model memberi probabilitas Diabetes berbeda untuk kombinasi Tinggi dan Berat.

Menangani Data Hilang dengan Imputasi di R

Random forest

Skema cara kerja random forest. Data asli menghasilkan tiga set bagging dengan subset kolom acak. Pohon keputusan dipasang ke masing-masing, lalu hasil semua pohon diagregasi.

Menangani Data Hilang dengan Imputasi di R

Algoritme missForest

  1. Buat tebakan awal untuk nilai hilang dengan imputasi mean.
  2. Urutkan variabel naik berdasarkan jumlah nilai hilang.
  3. Untuk tiap variabel x:
    • Pasang random forest pada bagian teramati dari x (variabel lain sebagai prediktor).
    • Gunakan untuk memprediksi bagian hilang dari x.
  4. Ulangi langkah 3 hingga nilai imputasi stabil.
Menangani Data Hilang dengan Imputasi di R

missForest dalam praktik

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
Menangani Data Hilang dengan Imputasi di R

Galat imputasi

missForest() menyediakan perkiraan galat imputasi out-of-bag (OOB):

  • Normalized root mean squared error (NRMSE) untuk variabel kontinu.
  • Proportion of falsely classified entries (PFC) untuk variabel kategorikal.

Pada keduanya, kinerja baik mendekati 0; nilai ~1 menunjukkan hasil buruk.

imp_res <- missForest(nhanes)
imp_res$OOBerror
      NRMSE         PFC 
0.147687025 0.003676471
Menangani Data Hilang dengan Imputasi di R

Galat imputasi

missForest() menyediakan perkiraan galat imputasi out-of-bag (OOB):

  • Normalized root mean squared error (NRMSE) untuk variabel kontinu.
  • Proportion of falsely classified entries (PFC) untuk variabel kategorikal.

Pada keduanya, kinerja baik mendekati 0; nilai ~1 menunjukkan hasil buruk.

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
Menangani Data Hilang dengan Imputasi di R

Trade-off kecepatan vs akurasi

Menumbuhkan banyak random forest bisa memakan waktu.

Gagasan: korbankan sedikit akurasi dan kecilkan ukuran hutan untuk mengurangi waktu komputasi.

  • Kurangi jumlah pohon per hutan (argumen ntree).
  • Kurangi jumlah variabel untuk split (argumen mtry).

Dampaknya pada waktu komputasi berbeda:

  • Mengurangi ntree berdampak linear.
  • Mengurangi mtry lebih mempercepat saat variabel banyak.
Menangani Data Hilang dengan Imputasi di R

Trade-off kecepatan vs akurasi: praktik

Pengaturan default:

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

Hutan diperkecil:

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
Menangani Data Hilang dengan Imputasi di R

Ayo berlatih!

Menangani Data Hilang dengan Imputasi di R

Preparing Video For Download...