【機械学習】決定木モデルの変数重要度をわかりやすく解説する

こんにちは。今日は決定木モデルのふるまいの解釈に使われる変数重要度について、自分でも理解が少しあいまいだったので整理してみようと思ってこの記事を書いています。

同じ疑問を持たれている方のお役に少しでも立ちましたら幸いです。

Contents

変数重要度とは?

ざっくりいうと、「モデルに投入した各特徴量が、予測精度にどれだけ影響を与えたか」を表す指標と言えます。

超適当な例ですが、以下のような、「外出するか?」という目的変数に対して「天気」「湿度」「風の強さ」という3つの特徴量を考慮した決定木モデルを作ったときに、「外出するか?」を決定するために一番影響した特徴量は何だったの?という疑問に答えるための指標と考えることができます。

決定木モデルのイメージ

いろいろな変数重要度の測定方法

さて、この変数重要度ですが、実はいくつもの測定方法があります。私の知る限りでは、以下の4種類の測定方法がよく知られているのではないかと思います。

  • Split Importance
  • Gini Importance
  • Permutation Importance
  • SHAP Importance

それぞれどういうものか、見ていきたいと思います。

Split Importance

ツリーの分割にその特徴量が使われた回数をカウントするという非常にシンプルなもの。

使われるケースは・・・あるのか?(と思ったら後述しますがなぜかLightGBMのデフォルトはSplit Importanceが計測されていました)

Gini Importance

その特徴量で不純度(ジニ不純度:Gini Inpurity)をどれだけ改善できたかという指標で評価する方法。直感的には、決定木において、きれいに目的変数を分類できる(不純度が低くなるような分類ができる)特徴量ほど重要度が高いとみなされる。

Scikit-Learnのランダムフォレストの変数重要度などは、規定値でこのGini Importanceで計測されていますね。

Permutation Importance

Permutateとは、「並び替える」の意。

その特徴量を完全に無意味なものに(データレコード間で値をシャッフルする)したときに、しなかった場合のモデルと比べて精度がどの程度落ちるかを評価するもの。精度の低下が大きい=その変数は重要という考え方。

Permutation Importance計測のイメージ

Gini Importanceとの使い分け含めて、詳しくはこちらにまとめました。Gini ImportanceやSplit Importanceと比べるとやや計算コストがかかりますが、Gini Importanceの課題も克服して、かつどんなモデルに対しても計測できるため、重宝します。

SHAP Importance

こちらは、これまでの変数重要度とは少し毛色が変わり、ゲーム理論の考え方をもとに編み出された重要度です。詳しくはこちらにまとめました。

SHAP ImportanceとPermutation Importanceの違いについては、以下のWebサイトにこんな記載がありましたので引用します。

SHAP feature importance is an alternative to permutation feature importance. There is a big difference between both importance measures: Permutation feature importance is based on the decrease in model performance. SHAP is based on magnitude of feature attributions.

https://christophm.github.io/interpretable-ml-book/shap.html

LightGBMでの実装

私はLightGBMを使うことが多いので、LightGBMでの設定についても確認しておきます。

上記の重要度評価の方法はLightGBMの関数”feature_importance()”のオプションで指定可能です。

https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.Booster.html#lightgbm.Booster.feature_importance

・・・!なんと、LightGBMのデフォルトはSplitでした!OMG!
Gini Importanceによる評価を行いたい場合は、importance_type=“gain”と指定する必要があるようです。

*gainとありますが、giniによる評価と等価とかいてあります。
https://github.com/Microsoft/LightGBM/issues/1842

ちなみに、Permutation ImportanceについてはLightGBMの実装としては提供されていなさそうだった。(違ってたらごめんなさい) ただ、Scikit-learnのライブラリで提供されているようなので、組み合わせることで算出できそう。

その他の評価方法

Partial Dependence Plots (PDPs)

モデルの特徴量重要度を解釈する他の方法として、PDPというものもあります。

こちらは2001年のFriedmanの論文「」で提案されたもの。

Individual Conditional Expectation (ICE) Plots

こちらは2015年にGoldsteinらによって提唱されたもので、PDPsをより洗練させたもの、らしい。
詳細はここでは割愛します。

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。