MachineLearning

データ分析 : 欠損値を補完/処理する方法4つ

 

 

データ分析 : 欠損値を補完/処理する方法4つ

 

欠損値の補完/処理① : そのまま扱う

 

 

これはGBDT(Gradient Boosting Decision Tree)を使う場合に有効になるのですが、欠損値を埋めることなく、そのまま利用する方法です。

GBDTで欠損値をそのまま扱うのは「データが欠損しているということは、それ自体に何らかの意味を含んでいるはずである」という考え方からです。欠損していることも大事な情報であろうという、いわば物が捨てられない人みたいな感じです。

XGBoostやLightGBMなどのGBDTライブラリでは欠損値のままで、データを利用できます。

scikit-learnでランダムフォレスト等の決定木モデルを使う場合には、-9999などの通常取りうる範囲外の値を代入することで、擬似的に欠損値として取り扱いできます。

 

欠損値の補完/処理② : 代表値で埋める

 

こちらはタイタニック号のチュートリアルや、その他データサイエンス/機械学習の入門書で見られる補完方法で、欠損値を代表値で埋めるパターンです。

中央値や平均値といった代表値を使って、欠けている値を埋めていきます。

「欠損値を代表値で埋める」というのは、「欠損の発生がランダムなら、もっともありそうな値で埋めてあげれば良いだろう」という発想の元、施工される方法です。

 

単純な平均ではなく、Bayesian averageが使われる場合もあります。

※後日、ここら辺も詳しく書こうと思っています

 

欠損値の補完/処理③ : 他の変数から予測する

 

欠損している変数が、他の変数と関連を持っている(相関がある)場合には、相関を持つ他の変数から欠損値を予測できます。

つまり、欠損値を補完したい変数を目的変数として、その他の関連のある変数を特徴量(説明変数)としたモデルを作成して、学習結果(=モデル)を使って予測をおこなうことで欠損値を埋めるということです。

 

欠損値の補完/処理④ : 欠損値から新たな特徴量を作成する

 

欠損値が存在するということは、ランダムで発生したというより、何らかの理由があって欠損してしまった可能性が高いです。

だとすると、データが欠損していること自体に情報があると考えられるので、欠損力特徴量を作成することが可能です。

※先ほどの他の変数から予測するときには、特徴量として欠損していなくて関連のあるデータを特徴量にしていました。今回は、完全に欠損値を特徴量としています。

 

欠損値から特徴量を作成する方法としては、「欠損しているか否か」の二値変数を作成する方法があります。

こうすることで、仮に欠損値を埋めたとしても、「もともと欠損していた」という情報を逃さないで済みます。

欠損している変数が複数ある場合には、それぞれに対して二値変数を設定してあげればOKです。

 

他にも欠損値から新たな特徴量を作成する方法がありますが、今回は省略しますm(_ _)m

 

世の中には欠損しているデータで溢れているので、いずれかの方法を使って対処してあげましょう!

 

関連図書