これはただ単にFで分割したノードの改善度を総和してくださいということだ。これですべての特徴量について重要度が計算できる。ランダムフォレストにおいては更に決定木の数だけ平均するだけである。以上が特徴量重要度の計算方法であるが、実はこの時点で重要度のバイアスはすでに生じているのである。解像度が低い場合こんな状況ありえるのか?なんて思われるかもしれないが結構ありえると思う。測定系の性能の限界などによってこの状況はありえる。様々な回路の電流と電圧を測って特徴量にしたとしよう。サンプルはある回路で、電流電圧が特徴量である。このとき電圧においては有効数字4桁で計測できたが電流に関しては弱く2桁しか計測できなかった。いうような場合は重要度にバイアスが生じる。共線性も含めてより一般的にdependancyと書いた。ある特徴量と同じことを言っている特徴量が混じっていると特徴量重要度にバイアスが生じる。実験では基本的に以下の条件に従う。異なる場合は別途補足する。基本的にデータにかかわらず目的変数はランダムで生成するこうすることで、どの特徴量も寄与しないはず(等しく寄与するはず)という状況が作れるサンプル数は200、次元数は大体5次元ランダムフォレストで使う決定木の本数は100本データ生成から学習し終わるまでを1試行として、200試行random_stateを変更し特徴量重要度をバイオリンプロットに示すたとえば、各次元について標準正規分布から独立にサンプルしたデータに対しての結果を示すと下図のようになる。見方としては横軸が特徴量を示していて、縦軸が特徴量重要度を示している。200回試行しているため、バイオリンプロットを用いて分布のように表示している。バイアスは存在せず、どの特徴量も同じような重要度をとっていることがわかる。これから以下について詳細な人工データの設定と結果を見せていく。特徴量同士にdependancyがある場合その他の結果データの解像度が低い場合データ生成の設定すべての特徴量は正規分布から独立に生成している。各特徴量でデータの解像度が違うことを再現するために丸め込みの処理を適応している。特徴量0がなにも丸め込んでいないもので、特徴量4がめちゃくちゃ丸め込んだ場合である。具体的には[-3,3]の区間(標準正規分布の3σ)を以下の表に示す数で分割して数字を丸め込んだ。3結果ひと目でわかるように丸められている特徴量ほど重要度は下がっている。データの解像度が荒いことは、決定木がその特徴量で分岐するかどうか検討する回数が少なくなることにつながる。このとき解像度の荒い特徴量の重要度が低く出てしまうのは当たり前だろう。重要度の寄与が等しくなってほしい場面でこうなってしまうのは嬉しくない。特徴量3と4に単調増加な依存性(dependancy)をもたせた。具体的には、特徴量0-3まで独立に標準正規分布から生成し、$$\text{特徴量4}=\exp(\text{特徴量3})$$となるように特徴量4を作成した。互いに依存性をもつ3,4は特徴量重要度が減少する結果が出てきた。聡明な読者の皆様なら決定木がスケーリングに依存しないことをご存知だろう。特徴量3と4は決定木からすると全く同じ内容を示すことになる。そのとき、特徴量3で分割しようと特徴量4で分割しようと結果は変わらない。したがって特徴量3,4で重要度を互いに奪い合う結果になってしまう。その結果3,4の特徴量重要度が減少する。その他(おまけ)特徴量の分布でバイアスは生じるか上記では正規分布ばかりで実験していたが、特徴量ごとに生成する分布を変えたときにバイアスは生じないのか?結論としては生じない。決定木にとってはある特徴量のサンプルの大小関係のみが大事で、縮尺がどうなっていようが影響はない。そのため、生成する分布の形状を変化させても影響はない。(ただし離散分布ではだめ。データの解像度が異なるからバイアスが生じる。)各特徴量で生成する分布を変えたときの結果がこちら。バイアスはなさそうだ。判別に寄与する状況下ではどうなるの?判別に寄与する特徴量が含まれている場合でも基本的にバイアスの影響が出る。以下に示すのは、データの解像度が一番荒い特徴量のみが判別に寄与する場合の特徴量重要度である。期待値的には、判別に寄与しない特徴量0よりも低い値になってしまっている。バイアスの影響である。solutionによると以下のようにするとバイアスは防ぐことができるらしいcforestを用いるR実装しかない?調べるとTJO大先生がブログにしていたtjo.hatenablog.comバギングをしないどうやらバギングによるバイアスも存在するらしいがイマイチ理解していない自分の実験でもbaggingをしないでやってみたが、したときとの差がわからなかった。importanceを用いる特徴量重要度の計算法はいくつかあり、後述する。importanceと呼ばれるものであるこれによりバイアスは防ぐことができるらしいが、この論文では特徴量同士にdependancy(例えば共線性)がある場合については示されていない。dependancyによるバイアスは残ったままかもしれない。以下の3種類存在する。importances名称については論文やサイトによって揺れがある。frequency単純に分割した回数を重要度とするやり方。判別するのに分岐が多い特徴量が重要でしょうという考え。あまりにも単純なやり方なのであまり使われない印象。importancesscikit-learnでのデフォルト、不純度の改善具合を重要度として採用しましょう、という考え方。詳細は上記(特徴量重要度とは?)で書いた通り。不純度の指標としてgini係数がデフォルトだが、エントロピーが使われることもある。importances各特徴量を一つシャッフリング(判別への寄与を無く)したときに、判別精度がどうなるのかみて重要度を決めましょうというアイデアのもの。アイデアの解説は次のブログが詳しい。importacesを計算してくれるライブラリgithub.comつかいかたは、このブログにあるexplained.aiまとめここでは、ランダムフォレストの特徴量重要度にバイアスがあることを示した。バイアスはその特徴量のデータの解像度が低い場合(取りうる数値が荒い)各次元が独立ではない場合に生じる。importanceを用いるがある。この対処方法でもdependancyを持つ特徴量の重要度のバイアスは取り除けないものと予想している。importanceの効果を発揮できる。使い方が乗っているので必要になった方は読んでおくと良いだろう。cforestのpython実装が見つからなかったのでRがチンプンカンプンな自分にとっては使う障壁が高いのもデメリット。さいごに、今回はランダムフォレストについてバイアスを確認したが、xgboostやlightgbmではどうかも知りたい。自分はここで力尽きてしまったが余裕のある方に検証してほしい...。コードはおいておくので必要な方はどうぞ。Treesでもバイアスは確認できたことを報告しておく。importacesを計算してくれるライブラリgithub.comデータの解像度とバイアスについてbmcbioinformatics.biomedcentral.comただし、この論文ではデータの解像度ではなく質的変数のuniqueの数で議論が進められている。ちなみにscikit-learnのRandomForestでは質的変数を直接扱うことができない。encodingなりで数値に変換する必要がある。お問い合わせはてなブログをはじめよう!aotamasakiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。