特徴量重要度を理解したい
特徴量重要度を理解したい記事です。
まさか、どういうものか理解せずに使ってないですよね?
特徴量重要度とは
特徴量重要度は、名前の通り特徴量の予測に対する重要さの指標です。ファイナンス機械学習では以下の3つが紹介されています。
平均不純度変少量(Mean Decrease Impurity; MDI)
ランダムフォレストのようなツリーベース手法特有の重要度です。ジニ重要度(gini importance)とも呼ばれます。式で確認していきます。
決定木における葉を除く任意のノードを として、ノード の左右の子ノードをそれぞれ 、 と置きます。この時の不純度減少量は以下のように定義されます。
\begin{equation} \Delta_\mathcal{I}(t) = \text{Impurity}(t) - \frac{N (t^{left})}{N (t)} \text{Impurity} (t^{left}) - \frac{N (t^{right})}{N (t)} \text{Impurity} (t^{right}) \end{equation}
は不純度、 はノード のサンプルサイズを表しています。データを分割することで不純度がどの程度減少したかを表しているのがわかると思います。
なお、不純度の定義については記事の最後に記載しました。
これを葉を除く全ノードについて計算し、合計が1になるように正規化したものがMDIです。
高速に計算できるのが利点ですが、予測に全く寄与しない場合でも値を持ってしまうというわかりにくさもあります。
平均正解率減少量(Mean Decrease Accuracy; MDA)
MDIは学習済みモデルを用いたアウトオブサンプルに対する重要度です。以下のように計算します。
- 学習済みモデルでアウトオブサンプルの予測についてパフォーマンスを算出する(パフォーマンスはAccuracyやRecallなど目的に応じて決める)
- 特徴量を1つ選びランダムシャッフルし、アウトオブサンプルの予測についてパフォーマンスを算出する。
- 特徴量重要度としてパフォーマンスの低下量を計算する
- 2、3をすべての特徴量について完了するまで繰り返し
どんな分類器でも使えるのが利点です。ただし、予測を繰り返すため低速です。
単一特徴量重要度(Single Feature Importance; SFI)
これは名前の通り、1つの特徴量でアウトオブサンプルでのパフォーマンスを計算する方法です。
代替効果(後述します)が生じないのがメリットです。 また、どんな分類器でも使えます。ただし、予測を繰り返すため低速です(単一特徴量を用いるという意味では高速かもしれませんが)。
留意すべきこと
ファイナンス機械学習では色々な留意事項が掛かれていますが、特に重要そうな代替効果についてまとめておきます。
代替効果(Substitution effect)
重回帰における多重共線性(通称マルチコ。Multicollinearity)のような効果です。特徴量間に相関があると問題になります。
相関のある2つの特徴量 を考えましょう。極端な例として、相関1の場合を思い浮かべると簡単かと思います。
では上記二つの特徴量は同確率でランダムに選択されるので、重要度が分配される(半減する)ということがわかるでしょう。
でも代替効果は問題で、上記の例で例えば がランダムシャッフルされた場合、 が の予測力を完全に補ってしまいます(相関1なので)。つまり、 は全く重要でないと判断されます。そして逆もまた然りです。上記の例では、せめて「どちらかが重要」もしくは「どちらも重要」程度のことがわかれば特徴選択の役に立ちますが、MDAでは「どちらも重要でない」 と判断する可能性があるということになります。
SFIは特徴量間の相関を考慮しない。相乗効果も考慮しない。
SFIは特徴量1つずつに着目するため、特徴量間の相関を考慮しません。これは、代替効果のことを考えなくて良いという点で有用です。
一方で、特徴量の組み合わせが予測に重要な効果を持っている場合考慮できないという欠点があります。
代替効果に対する対策
特徴量の相関が問題になるなら直交基底に落とせば良いので、主成分分析(PCA)を行えば良いです。
そんなことかと思うかもしれませんが、PCAはモデルがオーバーフィッティングを確かめる強力な手段になっています。
PCAによって固有値の大きさから、主成分の分散説明力や主成分に対する各特徴の寄与度が得られるわけですが、上でまとめた各特徴量重要度のランキングと、PCAからわかる特徴量のランキングが一致していればオーバーフィッティングをしていないという証拠が得られたことになります。
Appendix
不純度(Impurity)
ジニ不純度 は以下のように定義されます。
\begin{equation} G(k) = \sum_{i=1}^{n} p(i)\left\{1 - p(i)\right\} \end{equation}
ここで、はターゲットラベルの数、 はノード におけるターゲットラベル の割合を表しています。