機械学習を活用した変数重要度評価
モデルを作った後、説明する際に
「ここら辺の特徴量が効いてます。」 的なことを言わないといけない。
そこで、変数重要度をよく使う。
ランダムフォレストやXGboostでの変数の重要度評価をメモがてらまとめてみた。
RandomForestを活用した変数重要度評価
RandomForestについての整理
RandomForestを使った変数評価
変数の重要度は、分岐に使用する変数を入れ替えた際、ジニ係数にどれくらい影響があるかを見ている。(多分)
特徴量が出てくる回数とかではないので、多重共線性があっても重要度は変化しない。
要は、「多重共線性が存在しても、変数間の重要度の順位関係は保存される。」ということ。
そこらへんの話は、この論文に詳しく載ってる。
Variable selection using random forests
XGboostを活用した変数重要度評価
XGboostについての整理
ジニ係数を小さくさせて学習するRandomForestとは違い、Xgboostは損失関数を小さくする向きに学習を進める。
XGboostを使った重要度
XGboostの重要度の定義には、weight, gain, cover の3つがある
- weight:全学習木で、特徴量が分岐に使用された回数
gain:Nodeでの以下の式で定義付けられる値の減少度の平均 gradientとhessianの意味が、ちょっと何言ってるか分かんない場合は、 とりま損失関数を最小化させる方向に寄与する特徴量を、いい感じに評価してる程度に理解しておけば良いかと。
たぶん、RandomForestのジニ係数での評価に近い概念
参考にした文章: Introduction to Boosted Treescover:各Nodeにおいて、変数を使って分けたデータの数 この指標の定義が、どこを探しても見つからなかったので感覚での記述。
多分、学習をさせる中でどれくらいのデータを識別するのに特徴量が使われたかの指標のこと。
おそらく、以下のイメージ。(間違ってたらごめんなさい。)
ここだと、特徴量1がcover 100, 特徴量2がcover 50っていう理解。 あとは、全体の集計・平均すれば出る。
一応、このQAを参考。 https://datascience.stackexchange.com/questions/12318/how-do-i-interpret-the-output-of-xgboost-importance