機械学習を解釈する
機械学習を利用して仕事をしているが、例えばテーブルデータに対して、何らかのモデルを適用して、分類や回帰を行うこと自体は、ライブラリの助けを借りればそれほど難しくない。ただ、予測精度がいくら高くても、「どうしてこうなるの?」「この特徴量を動かしたら結果がどのように変わるの?」という質問には答えにくいところがある。この「結果に対する理由づけ」は近年重要になってきており、私はその技術を学びたかった。
そのとき、出会ったのがこの本。
めっちゃ良いので、ぜひ読んでください。これでこのエントリを終えても良いのだが、自分の勉強のため、その中で一番最初に出てくる PFI (Permutation Feature Importance) について、簡単に説明を試みる。
Permutation Feature Importance とは
例えば次のようなデータを考えてみる。
X1 | X2 | Y |
---|---|---|
1 | 3 | 10 |
2 | 2 | 20 |
3 | 5 | 30 |
4 | 3 | 40 |
5 | 1 | 50 |
X1, X2 から Y を予測するモデルを構築する。
実際にはデータはもっとたくさんあるものと思って欲しい。
Y = 10 * X1 という関係がありそうだ。一方で、X2 と Y の関係ははっきりしない。
このとき、このデータに対してロジスティック回帰なり、ランダムフォレストなり、Gradient Boosting なりの機械学習モデルを適用すれば、おそらくそのモデルは X1 を重視し、X2 をほとんど無視して Y を予測しようとするだろう。
そのことをどう確かめたらよいか?
X1,X2といった説明変数を1つずつランダムにシャッフルして、予測を行い、正解データとの食い違い(損失)を見るというのが一つの方法である。
たとえば X2 を次のようにシャッフルする。
X1 | X2 | Y |
---|---|---|
1 | 2 | 10 |
2 | 4 | 20 |
3 | 1 | 30 |
4 | 5 | 40 |
5 | 3 | 50 |
だが、もともとX2とYの関係ははっきりしなかったので、こうやってランダムにシャッフルしたうえで予測を行なっても、正解データとの食い違い具合(損失)はたいして変わらないと予想できる(実際に試してみるとそうなる)。
一方でX1を次のようにシャッフルするとどうなるか?
X1 | X2 | Y |
---|---|---|
2 | 2 | 10 |
5 | 4 | 20 |
1 | 1 | 30 |
3 | 5 | 40 |
4 | 3 | 50 |
いままで Y = 10 * X1 という関係があるように見えていて、それに基づいてモデルが作られていたのに、X1 の並びがランダムになったので、この関係を使って Y を予測できなくなってしまった。そのため、予測時に正解データの食い違い具合(損失)は大きくなることが予想できる(実際そうなる)。
こうやって、説明変数一つ一つについて、ランダムシャッフル前後の損失を比較して、その差(あるいは比)が大きいものほど、予測上、重要な変数だと考えることができる。
これが、PFI(Permutation Feature Importance) である。直感的でわかりやすい。
終わりに
数式やコードを持ち出さずに簡単な言葉だけでアイディアを説明してみた。繰り返しになるが、詳細は最初に紹介した本を読んでみてほしい。