ホットデッキ補完

R による欠損データの補完処理

Michal Oleszak

Machine Learning Engineer

ホットデッキの歴史

  • 1950年代、データがパンチカードで管理されていた頃に遡る。
  • データを前後に移動するのは非常に遅かった。
  • 米国国勢調査局が、データを1回だけ通過すれば済む手法を考案した。

コンピュータプログラミングに使用された古いパンチカードの画像。

1 Image source: https://en.wikipedia.org/wiki/Punched_card#/media/File:Used_Punchcard_(5151286161).jpg
R による欠損データの補完処理

ホットデッキ補完

  • 各変数について、すべての欠損値を直前の観測値で置き換える。
  • ホットデッキとは、実際に処理中のパンチカードの束を指す。

デメリット

  • データがMCARである必要がある。
  • 基本的なホットデッキは変数間の関係を壊す可能性がある。

メリット

  • 高速(データを1回通過するだけ)。
  • 補完値が一定にならない。
  • 簡単な工夫で関係の破壊を防げる。
R による欠損データの補完処理

ホットデッキ補完の実践

nhanes_imp <- hotdeck(nhanes, variable = c("Height", "Weight"))
head(nhanes_imp)
  Age Gender Weight Height Diabetes TotChol Pulse PhysActive Height_imp Weight_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  180.7    FALSE    4.32    58      FALSE       TRUE      FALSE
R による欠損データの補完処理

ドメイン内での補完

「PhysActive」と「体重」の2列を持つテーブル。体重に1つの欠損値がある。行がランダムな順序のため、PhysActive=FALSEの行がPhysActive=TRUEで体重が欠損している行の前に来ており、非活動的な人の体重値が活動的な人の行に引き継がれることを示している。

「PhysActive」と「体重」の2列を持つテーブル。体重に1つの欠損値がある。PhysActiveでグループ化されているため、活動的な人の値が別の活動的な人の行に引き継がれる。

nhanes_imp <- hotdeck(
    nhanes, 
    variable = "Weight", 
    domain_var = "PhysActive"
)
R による欠損データの補完処理

相関変数によるソート

2つの変数「身長」と「体重」を持つテーブル。体重に1つの欠損値がある。行がランダムな順序のため、身長の高い行が低い行(欠損値あり)の前に来ており、高身長の体重値が低身長の行に引き継がれることを示している。

2つの変数「身長」と「体重」を持つテーブル。体重に1つの欠損値がある。身長でソートされているため、低身長の人の体重値が別の低身長の行に引き継がれる。

nhanes_imp <- hotdeck(
    nhanes, 
    variable = "Weight"
    ord_var = "Height"
)
R による欠損データの補完処理

ホットデッキ補完を練習しましょう!

R による欠損データの補完処理

Preparing Video For Download...