Gini係数と機械学習系手法のImportanceについて
先日,KaggleのSantanderコンペティションがクローズしました.やれるだけやってみたんですが全体の半分くらいの成績にしかならなりませんでした. 正直会社のコンペで負けるより悔しいところです.会社でコンペなんてめったにないですけど.
とはいえ,機械学習系の手法(randomForestとかXGBoostとか)を使ってKaggleのコンペに真面目に参加したのは初めてなので, ここで何をやったかという話を今度のTokyoRのLTでやろうかなあって思います. どういうプレゼンをすると笑いが取れるのかも踏まえてプロットを練っているところであります.
さて,今回ブログを1ヶ月ぶりに更新する理由は「Gini係数」についてです. 社会科学系の大学院出身の私はGini係数といったら「不平等の指標だ!!!」っていう反応をしていましたが,実は機械学習の分野でも「特徴量の重要度」の評価に大きな寄与をしているらしいです.
前提として,社会科学系で知られているGini係数は,主に所得の不平等の指標として定義されています. ある集団の所得を低い順に並べたときの累積割合についてのローレンツ曲線を用いて
と表現されます.普通はこのGini係数が高いとその集団は「不平等である」と解釈されます.低ければ平等ってわけです*1 ちなみに図示するとこういう感じになります.*2
青い図形の面積がGini係数の値となります.
具体的なストーリーを考えます.100人のいる集団で,全員100万円ずつ持っている場合,所得を累積していくと100万円ずつ一定に増加します.故にその積み上げは直角三角形っぽくなり,不平等はない,と評価できます.図にするとこんな感じです.
もっとどうにかならなかったのか
一方,100人のうち99人が10万円,1人が1000万円持っている場合,99人までは10万円ずつ累積しますが,たった一人の1000万円で直角三角形っぽさがなくなります.このとき不平等度合いが強いといえます.図にすると,こうです.
ひどすぎる
機械学習の分野では,僕が元いた畑では聞き慣れない「重要度(Importance)」という評価指標があるようです.*3 名前の通り機械学習に用いる特徴量(説明変数)のうち,どれがどれだけ目的変数の説明・予測・分類に役立つかという指標であるらしいというところまでは分かっていますが,頭の悪い僕はこんなことをTwitterに投下するのです.
ランダムフォレストとかやってimportanceって出てくるし、言葉の意味と数字のみかたは分かるけどその実態は今もよくわかってないわけ
— Kien Y. Knot (@0_u0) August 23, 2018
予測や分類ではずすわけにはいかない特徴量かどうかを表す指標?
— Kien Y. Knot (@0_u0) 2018年8月23日
しかしここはTwitter,すぐに有識者からのレスが飛んでくる.今回Santanderのコンペを85位でフィニッシュしたu++氏からこんな説明をいただきました.
いろいろな手法があって、例えばsklearnの木系のモデルでは、ジニ係数に基づく算出手法ですね。どの変数を分割したことで、どれだけジニ係数が下がったか(=どれだけ上手に分割できたか)を見ていくことで特徴量の重要度を計算しています
— u++ (@upura0) 2018年8月23日
また次回のTokyoRで同じくLTをすると噂のKur0cky氏からもこんな情報をいただきました.
エントロピー使う方法は特許取られててジニ係数で代替してるみたいです。
— kur0cky (@kur0cky_y) August 23, 2018
ほう……特許……機械学習恐るべし……
とはいえGini係数が「何故重要度を評価する指標足りうるか」という疑問はちょっと残っております.そうするとこんな記事が.
Gini Coefficient - An Intuitive Explanation | Kaggle
さすがKaggler……僕が欲しい答えがそのまま書かれている……
ここではGini係数を考える上で,本来の(?)変数である「所得を小さい順に並べたときの累積度」の代わりに「予測値を小さい順に並べたときの累積」と「実測値(以下略)の累積」を考え,その面積比をGini係数として解釈しているようです.面積比が小さければ予測値と実測値の間の乖離は小さい,というように捉えることができそうです.
なるほど,先に挙げたu++氏の「どの変数を分割したことで~」という部分がよく理解できるようになりますね.僕は納得しました.
たとえば木型モデルだと説明変数がこの値だと目的変数は1,その値だと0に分類できるとして,この分類をしたときに予測値と実測値の面積比としてのGini係数が小さくなったら,説明変数は分類に重要な変数だ,と判断するという感じでしょうか.そういう意味でならたしかにGini係数を使うというのは必然だったのかもしれない.
Gini係数の解釈が合っているかすらわからないのでエントロピーが云々はわかりません.Gini係数の解釈で合ってなかったら完璧に僕の頭の悪さのせいなので教えてください.
ちなみにここだけの話,僕誕生日が5月23日なんですけど,Gini係数を考案したコッラド・ジニ先生も5月23日なんですよ.すごくないですか?ちょっと覚えていてもらっていいですか?ほしいものリスト置いておくので覚えていてください.私へのプレゼントがジニ先生のプレゼントになります*4