まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

Permutation Importanceについての俺俺メモ

Permutation Importanceについて、以下のデータロボットさんの記事を改めて読んで、所見のときはちゃんと理解してなかった部分があったのでメモ。

blog.datarobot.com

Permutation Importance自体の解説は上記記事もわかりやすいですが、以下の記事では更にシンプルに解説していてわかりやすかったのでそちらをどうぞ。

dropout009.hatenablog.com

アルゴリズムに依存しないとは

「他の変数重要度を出す手法と違い、Permutation Importanceはアルゴリズムに依存しないので良い」みたいな話はよく聞きます。例えば、 ちまたでよく見るsklearn.ensemble.RandomForestClassifierfeature_importances_デフォルトではTreeを作ったときにその特徴量で分割した際にGini不純度(≒混ざり合い度)がどれくらい下がるかを示している。これはTree系のアルゴリズムだからこそできる重要度の出し方なのでGBDTなどでも使えます。一方で、例えば線形回帰モデルやNewral Networkでは木による分割をおこなっていないのでGiniベースで重要度を出すことができません。

そのため、「重要度」を出すときに別のロジックを使って評価をする必要があるので、各モデルでの重要度を比較するときに、例えばRF(Random Forest)モデルAとRFモデルBと線形回帰モデルCにおいて、同じ特徴料で重要度が異なるということはRFモデル同士の場合は「RFモデルAとRFモデルBのパラメータや他特徴量の違いが原因で評価が違う」と考えられますが、「RFモデルAと線形回帰モデルCのパラメータや他特徴量の違い及び、アルゴリズムによる重要度の算出方法の違いが原因で評価が違う」と考えられます。
つまり、ざっくり言えば別のものさしを使って出た結果で比較することになるのでものさし(アルゴリズム)の違いも含めて解釈しないといけないのでよくわからないです。

www.stat.berkeley.edu

stackoverflow.com

一方で、Permutation Importanceは「各特徴量の値をシャッフルしてどれくらい精度が下がるか」というシンプルなロジックなのでRFだろうと線形回帰モデルだろうと適用することができます。つまり、同じものさしで比較することが可能になります。

余談

はじめ読んだときにイマイチ気持ち悪かったのは、『アルゴリズムに依存しない(=他のやり方だとアルゴリズム依存)』とあるけれど、「そもそもTree系以外の変数重要度って出し方あるの?データロボットブログに例示されている線形回帰は変数重要度というと微妙だし、Newral Networkは変数重要度自体を出すのが難しいって書いてあるし。。。」っていうモヤモヤな気がする。

そのため、『アルゴリズムに依存しない』というのは『(テストデータを確保しているなら)どのアルゴリズムでも使える共通フレームワーク』という意味も暗に含んでいると解釈したらしっくりきた。

余談2

「Newral Networkは変数重要度自体を出すのが難しい」ってあるけど、Permutationベースで重要度出せてるじゃん、と思う。これが間違っているのなら『どのアルゴリズムでも使える共通フレームワーク』という解釈は間違っていることになるが。。。

特徴量を抜いて精度比較とは違うのか

意図としては同じ。「抜く」ということを「シャッフルすることで無効化」することで同等の結果になるようにしているだけ。

ただし、抜く場合は都度モデルを再学習させないといけないが、Permutationベースだとテストデータでシャッフルしていることから再学習の必要はなく抜く場合よりも高速に調査できる。

blog.amedama.jp

重要度の算出ロジックによる差異の考え方

Giniベースで出た変数重要度と、Permutationベースで出た変数重要度のロジックによる違いはどう考えたらいいか。

端的に書くと「重要度といってもそもそも重要ってなんやねん」というのが本質的な考えな気がする。
つまり、Giniベースであれば「Gini不純度が減ることが重要」となるしPermutationベースであれば「精度に貢献することが重要」となる。なので「変数重要度」とひとくくりで書いているが、「いい感じに分割できる度」と「無効化したときの精度への影響度」のように書くと全然別のもののように捉えられてわかりやすい。

また、そのようにして考えるとデータロボットさんに書いている

重要度を用いて特徴量選択を行う際、他の指標と比べて重要度の定義がどの様に違うかにも注意が必要です。 ・具体的にはGini不純度を用いた指標に比べると、Permutation Importanceはおおむね全体への影響は小さいものの局所的な影響が強い特徴量への感度が低い 例えば売上高の予測に対するクリスマスセールフラグは、セール期間がそもそも限定的なため精度に対する影響を見るPermutation Importanceでは影響が小さいが、局所的にはデータの分類に影響するためGini不純度を用いると比較的大きく算出されます ・数値特徴量の重要度が他方より高く算出される傾向にある Gini不純度で計算をすると数値特徴量は境界の付近では不純なデータがより残る傾向があるので、数値特徴量への重要度はカテゴリカルな特徴量よりも比較的低く算出される傾向にあります

という文章もわかりやすくなる。

その他参考

socinuit.hatenablog.com

christophm.github.io

yolo-kiyoshi.com