記事の概要
Qiita初投稿です
本記事は、Kaggleのコンペティション「House Prices」で公開されているいろいろなNotebookを参考にさせてもらいつつ、特徴量選択やEDAについて自分の勉強も兼ねてまとめたもの。
特徴量選択とEDAのポイント
まずはEDAや特徴量選択におけるポイントをまとめていく。今回紹介するポイントは次の4つ。
- SalePriceとの相関
- 特徴量重要度
- 特徴量どうしの相関
- 共通の単語がついた特徴量
それぞれもう少し具体的に説明していく。
SalePriceとの相関
まず大多数の参加者が行っていたのが、予測対象である「SalePrice」との相関関係をみるということだった。
下図のように、SalePriceと各特徴量との相関係数を調べる。
そして、相関が一定以上の(0.5以上くらい?)特徴量については散布図で可視化していく。
例えば上の散布図では、右下あたりにある2つの外れ値が気になる。面積が広いのに販売価格はだいぶ安くなっている。このように、可視化の過程で外れ値に目をつけておいたりしておくと後々役に立つかもしれない。(外れ値を削除すると相関係数はどうなる?モデル精度はどうなる?など)
ちなみに「OverallQual」といったカテゴリ変数(ただし順序尺度に限る)の場合は、下図のように箱ひげ図にした方が見やすくなる。
しかし、順序のないカテゴリ変数は散布図の描きようがない。順序のないカテゴリ変数とSalePriceとの関係を調べたいなら、単純に各カテゴリのSalePriceの平均値や中央値をとって棒グラフにしてみるとよい。
特徴量重要度
いったん何かしらのモデルで学習させて、特徴量重要度を見てみるのも一つの手。
下は簡易的なランダムフォレストを使ったときに、各特徴量がMSEに与える影響を表したもの。
(Source:"House prices: Lasso, XGBoost, and a detailed EDA", Erik Bruin, LastAccess:2022-02-11)
あるいは、重回帰モデルでそれぞれの係数を見るという方法でもよい。
特徴量どうしの相関
ある2つの特徴量に強い相関がある場合は、一方の特徴量だけを使えば十分。不要な特徴量はできるだけなくしておきたい。また、重回帰モデルなどの場合は多重共線性の問題が生じる。
そのため、必ず特徴量どうしの相関関係についても調べておかなくてはならない。
seabornにheatmapという便利なツールがあるので、それを使って相関係数が非常に高い組を探していく。
共通の単語がついた特徴量
特徴量どうしの相関係数を調べてみると、共通の単語が入っている特徴量どうしの相関が高くなりがちだということがわかる。
例えば、
- Year……
- Bsmt……
- Garage……
など。
このように同じ単語が含まれている特徴量があるときは、以下のことに注意してみる。
- それらの特徴量どうしの相関係数は?
特徴量どうしの相関係数をみて、相関係数が高いものは削除候補とする。相関係数が非常に高い場合は、この段階で一方を削除してしまってもよい。
- 必然的な関連性はないか?
例えば、Garageの面積が広けりゃ当然車もたくさん入る。なので「GrageArea」「GarageCars」のどちらかは不要。実際、相関係数は0.88でかなり高いです。この場合は迷わず、どちらかの列を削除しても大丈夫だと思われる。
- SalePriceとの相関が最も高い変数はどれか?
当たり前ですが、SalePriceとできるだけ関係のある変数で予測をしたいので、SalePriceとの相関関係もしっかり見ておく。
- 分布に違いはあるか?
分布が偏りすぎていると区別がしづらいため、予測には若干不利になる可能性がある。そのことを考慮して残す特徴量を選んでいく。データの粒度も参考になるかも。
次回の記事
次回は欠損値の扱いについてまとめようと思う。
参考リンク
https://www.kaggle.com/erikbruin/house-prices-lasso-xgboost-and-a-detailed-eda
https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python