p値を用いたTarget Encoding
こんにちは、クルトンです!
この記事では二値分類問題でのp値を用いたTarget Encodingについて説明しようと思います。
p値とは
なる検定問題において棄却域がで与えられるとき、をp値と言います。
簡単に説明すると「帰無仮説が正しいとした仮定とき、観測した事象よりも極端なことが起こる確率」のことです。
例えば検定統計量を「コインを投げた時に表が出た回数」とし、表と裏が出る確率が同じ(帰無仮説)とします。
このときに表が9回、裏が1回出たとすると、p値はとなります。
通常の検定では、p値が有意水準と呼ばれる基準の数値(例えば5%)を下回った場合は、これが偶然ではなく意味があることだ(有意である)と考え帰無仮説を棄却します(表と裏が出る確率が同じだという前提が間違っていたと考える)。
このように、p値を用いることによって、観測した事象がどのくらい起こりにくいかを知ることができます。
通常のTarget Encodingの欠点
通常のTarget Encodingでは、あるカテゴリに所属するデータの数が少ないと過学習の原因になってしまう可能性があります。
この問題の解決策として、TargetEncodingのスムーシングがありますが、これもハイパーパラメーターが存在するという問題点があります(スムーシングについては以下の記事を参照してください)。
そこで僕は、p値を使えばこの問題を解決できるのではないかと考えました。
p値を用いたTarget Encoding
通常のTargetEncodingは、をクラスタiに所属しているデータの数、をクラスタiに所属していて目的変数が1の数としたとき
と表せます。
しかし、やの値が小さいと、間接的に目的変数の値を予想できてしまうため過学習を引き起こしてしまいます。
ここでp値を用いる方法について考えてみましょう。
をデータの総数、をデータセット全体の中で目的変数が1の数とします。
すると全体としては十分なデータ数があるとき、クラスタiの目的変数の総和はのような二項分布に従うと仮定できます(帰無仮説)。
このときの各々のクラスターでのp値を求めれば、そのクラスターが平均からどのくらい外れているかを計算できるのではないか?というのがp値を用いたTarget Encodingです。
p値の計算と連続修正
上記の変数を用いると、カテゴリiのp値はで求める事ができます。
しかしこのようにしてp値を求めると、のときに、であればp値はになり、であればp値はになってしまいます。
これは、二項分布が離散変量に基づく分布にもかかわらず、目的変数の合計値を連続変量として扱っているためです。
このような場合は、連続修正を行うことでより正確なp値を求めることができます。
具体的には上記の式においてのときに足す項を1/2倍することで連続修正をすることができます。
上記の例では、この連続修正を行うことでどちらもp値が0.5になります。
実際に使用した結果
規約により具体的なコンペの内容は説明できませんが、atmaCup13ではAdditive Smoothing Target Encodingよりもp値を用いたTarget Encodingの方がスコアが改善しました。
皆さんもぜひp値を用いたTarget Encodingを使ってみてください!