見出し画像

LightGBMのCalibration Curveを確認する

はじめに

何らかの問題を二値分類で解くとき、予測確率を正しく求めたいことがあります。
scikit-learnのDocumentの例では、ナイーブベイズおよびSVCでの予測確率が実際の確率からずれていて、Calibrationを行うことで改善される例が紹介されています。
LightGBMの場合どうなんでしょう。
lgbの公式ドキュメントによると binary classificationの場合は binary log loss classification (or logistic regression) とのことなので、calibrationは不要そうに見えます。
とはいえ、実際やってみないとわからないので上記scikit-learnのトイデータおよび、いくつかのデータセットで、LightGBMの予測値のCalibration Curveを確認しました。

検証方法

・データセットは、scikit-learnのDocumentの例で使われている人工データおよび、smlyさんのLightGBMTunerベンチマーク記事で使われているkaggleやopenmlのデータセットの計10パターンを用いています。
・データはtrain, testにhold outで分割し、train dataをStratifiled 5-foldでCV切ってfit、test dataのpredict probabilityの平均値を予測確率としています。
・ソースコードはGithubにnotebookを上げているので気になる人はそちらをご確認ください。
・lgbは適当に良いかんじのパラメータ固定 & valid dataによるearly stopping等、普段使うのと同じようにしています。(デフォルトパラメータではないですよの意)

人工データによる検証

画像1

ロジスティック回帰、ナイーブベイズ、SVC、Random Forest、LightGBMの5つでCalibration Curveを確認しています。
LightGBMの予測確率は、あまり真値とずれがなくて良さそうですね。トイデータの場合はキャリブレーションはいらなそうです。

実データでの検証

画像2

9つのデータセットにてlgbの予測確率のCalibration Curveをplotしています。
amazon employee access等はちょっと気になりますが、概ね悪くなさそうですね。
キャリブレーションも不要そうですが、ここでそれぞれsigmoidおよびisotonic calibrationを行ってみましょう。

画像3

amazon employee accessやeeg eye stateはcalibrationを行うことでちょっと改善していそうですが、概ね何もしなくて良さそうという結果になりました。

おわりに

結論としては、LightGBMはだいたいCalibrationしなくて大丈夫。不安な場合はCalibration Curveをplotして見ましょう と、なんか当たり前な話になってしまいました。
実データで確認できたことが良かったと思います。
また、こちらの記事のようにアンダーサンプリングを行っている場合はバイアスが発生するので別途注意が必要です(これはlgbに限った話ではない)

この記事が気に入ったらサポートをしてみませんか?