Kaggleで勝つデータ分析技術の第3章 『特徴量の作成』の欠損値についてまとめてみました。
分析コンペでモデルの精度を上げるためにも、特徴量の作成は最も重要な要素の一つで、その中でも欠損値の取り扱いは大切です。
ここでは、Kaggleで勝つデータ分析技術の欠損値の言及がされているところをまとめてみました。
そもそも欠損値とは
欠損値とは、値が入力されていない空の値のことを示します。
下記のテーブルの中で、名前が入力されていない行があります。
この入力されていない値が欠損値になります。
名前 | 年齢 |
---|---|
安井 | 28 |
25 | |
石崎 | 21 |
では、なぜ欠損が発生しているのでしょうか?
理由を一度、考えてみてください。
欠損が発生している理由には下記の分類で分けられます。
- 値が存在しない場合
- 年齢が100歳を超えているが、100歳以上を選択ができない場合
- 何らかの意図があるケース
- 痩せ過ぎているのを伝えたくないために、体重を記載しない
- 値を取得するのに失敗しているケース
- 人為的ミスや観測機器のエラーなど
これらの欠損値の扱い方には様々な方法があります。
ここでは、下記の例をそれぞれ紹介します。
- 欠損値のまま取り扱う
- 欠損値を代表値で埋める
- 欠損値を他の変数から予測する
- 欠損値から新たな特徴量を作成する
- データ上の欠損の認識
欠損値のまま取り扱う
GBDTライブラリなどは、欠損値を埋めずにそのまま取り扱うことができます。
欠損値はその値がなんらかの理由で欠損しているという情報を持っていると考えると、その情報を捨ててしまうのはもったいないです。
なので、欠損値をそのまま取り扱い、モデルを作成することは自然な方法になります。
欠損値を代表値で埋める
欠損値を埋める最もシンプルな方法は、その変数の代表値で埋めることです。
代表値とは、平均や中央値、最頻値などが挙げられます。
たとえば、年齢が欠損していたら、年齢の平均で埋めるなどです。
名前 | 年齢 |
---|---|
安井 | 28 |
上林 | 30 |
石崎 |
上記の場合、石崎さんの年齢が欠損しているので、年齢の平均値 29歳で埋めるようにします。
名前 | 年齢 |
---|---|
安井 | 28 |
上林 | 30 |
石崎 | 29 |
実際は石崎さんは21歳なので、実のデータからかなりはずれてしまいました。
このように何も考えずに平均で穴埋めすると、実際のデータから大きくずれてしまうという懸念もあります。
なので、どのような代表値で穴埋めをするかをよく検討した上で、穴埋めをする必要があります。
ただ欠損があるとモデルが作成できない機械学習モデルは多いので、代表値で穴埋めを行うことはよくkaggleで行われています。
欠損値を他の変数から予測する
欠損している変数が他の変数と関連している場合には、それらの変数から本来の値を予測することができます。
例えば、下記の例です。
年齢 | 職業 |
---|---|
28 | 社会人 |
21 | |
22 | 大学生 |
24 | 社会人 |
・・・・ | ・・・・ |
上記の場合、年齢から職業を大学生と予測できるかもしれないです。
実際の予測による補完は以下のような流れになります。
- 欠損を補完したい変数を目的変数とみなし(上の例だと、職業)、その他の変数を特徴量とした補完のためのモデルを作成します。(上の例であれば、年齢がその他の変数)
- 補完のためのモデルで予測を行った欠損値で埋める
上記で作ったモデルに、21歳というデータを渡したときに、大学生という結果が返ってきたら、その返ってきた値 大学生で欠損値を埋めるという流れになります。
欠損値から新たな特徴量の作成
欠損の発生が完全にランダムに起こることはあまりなく、何らかの理由がある場合が多いです。
その場合、欠損している事自体に情報があるため、欠損かどうかが表す特徴量を作成することが有効になります。
シンプルな方法としては、欠損かどうかを表す二値変数を作成する方法です。
欠損値を埋めたとしても、この二値変数を別に作ることで情報を減らさないことができます。
例
年齢 | 年齢が欠損している |
---|---|
28 | False |
True | |
22 | False |
24 | False |
・・・・ | ・・・・ |
データ上の欠損の認識
欠損は基本的には、空白やNAと表現されます。
しかし、データによって数値データの欠損が-1や99999などの値で入力されていることがあります。
そのままの数値として扱うと、本来欠損値として扱うべき値を通常の数値として解釈するため、モデルの精度が上がらないなどの問題が発生したりします。
このような可能性を考慮して、最初の段階で変数の分布をヒストグラムで見て、欠損として認識すべき値がないかどうかを確認しておくことが望ましいです。
まとめ
いかがだったでしょうか。
今回の記事はKaggleで勝つデータ分析技術での欠損値の取り扱いについてまとめてみました。
今年中に自分はKaggle Exeprtになることを目指して、頑張っていますので
もし誤りなどあればご指摘いただけると助かります。
お読みいただいてありがとうございました。