機械学習における過学習(Overfitting)のわな

2023年5月〜8月に開催されたこのコンペは、患者の健康関連データがテーブル形式で与えられ、その患者が病気と診断されるかどうかを予測するものでした。2値クラス分類でデータ数も600程度と扱いやすいため、初心者用のコンペとも言われていました。

ところが実際は、下の図のように、非常に大きなシェイクアップ/シェイクダウンが起きたコンペでした。中には、3000位以上もシェイクアップ/シェイクダウンした人もいました。つまり、Public LBで、賞金・金・銀・銅メダル圏内だった人の多くが、Private LBで、メダル圏外となる結果になりました。

Kaggleでは、Private LBの結果がすべてで、たとえPublic LBでメダル圏内でも、Private LBでメダル圏外となれば、メダルなしです。逆に、シェイクアップが起きることがわかっていたので、いくつかのモデルを提出して早々にコンペをあきらめて忘れていたが、朝起きたら友人から「おめでとう!」と言われ、Private LBで3000位以上も上昇したことを知り、賞金約75万円とソロ金メダルを手にすることとなった人もいました。

どうしてこのようなことが起きるのでしょうか。

過学習(Overfitting)とは、機械学習において、モデルが特定のデータセットに対して過度に最適化される現象です。これは、モデルが訓練データの特徴と正解を詳細に学習し、訓練データに対しては予測精度が良いが、まだ見たことのないテストデータや新しいデータに対する予測精度が低下することを意味します。

Kaggleでは、まず参加者に訓練データが与えられ、参加者はその訓練データを使って、さまざまな手法でモデルを生成します。その後、参加者には与えれていないテストデータの一部(下図 C)を使って、そのモデルが出した予測結果のスコアを計算し、暫定順位が公開されます。これがPublic LBです。

コンペ期間中は、自分のモデルを何度も改善し、その都度、Public LBの順位が上がったり下がったりするのを見て、次の改善へとつなげようとします。

コンペ締切後に、参加者には与えれていないテストデータの残り(下図 D)を使って、再度、モデルの予測結果のスコアを計算し、最終順位が決まります。これがPrivate LBです。

おおまかに図にすると次のようになります。

問題なのは、Public LBでの順位が最終順位であるPrivate LBとは全く異なってしまうことがあるということです。上の図のデータセットCとデータセットDのデータ分布がほぼ同じであれば、Private LBでの順位もだいたい同じくらいになりますが、そうでなければ、いわゆるシェイクダウンが起きてしまいます。つまり、Public LBで上位であるにもかかわらず、モデルがデータセットCに過学習してしまった結果、Private LBでは順位が下がってしまいます。

過学習を抑えるための対策としてよく用いられるのは、与えられた訓練データをさらに訓練データと検証データに分けて行う交差検証(Cross Validation)や、正則化(Regularization)、アンサンブル学習、モデルをシンプルにする、などさまざまな手法があります。

とは言うものの、上記のようなコンペで過学習が起きているかどうかの判断は簡単ではありません。過学習を抑える対策を取ったとしても、それらをどの程度まで行えばよいのかの判断が難しいということです。

過学習が起きそうなコンペかどうかは、データセットを確認することで、おおまかに判断することができます。一概には言えませんが、特徴量の数に対して訓練データの数が少ないと、過学習が起きやすいです。例えば、上記コンペでは、特徴量の数が約60に対して、訓練データの数が約600でした。また、Public LBのテストデータの数がPrivate LBのテストデータの数と比べてかなり少ない場合も過学習が起きやすいです。

上記コンペの上位チームの解法には、基本的な過学習対策を取ることに加え、さまざまな工夫をしていました。ニューラルネットワークを用いたもの(1st, 2nd, 8th)や、過学習に強いと言われているCatBoostを用いたもの(2nd, 3rd, 4th, 5th, 7th)が目立ちました。XGBoostを使っているもの(2nd, 6th, 8th)もありました。LightGBMを使うものもありましたが、少ない印象でした。

私は上記コンペで、ハイパーパラメータチューニングを行わないXGBoostとTabPFNのアンサンブル学習で、1000位以上のシェイクアップで銅メダル(上位8%)を獲得しました。完全に予想外でした。

ただ、メダル獲得を目的としている人にとってはあまりいいコンペではないなと思いました。こういったコンペでは、安定的にメダルが狙えるかどうかわからないからです。実際、上位入賞者たちは、「なぜ自分が?」とか「シェイクアップを予想できたのでコンペ早期に離脱した」みたいなコメントをしていました。全参加者に対して、MasterやGrandmasterの参加数が少ないなと感じていましたが、彼らはメダルを取りにくいコンペだということがわかっていたのかもしれません。

一方で、少ないデータからいかに汎化性能の高いモデルを生成するかというような研究が目的である場合は、興味深いコンペだったと言えるかもしれません。

Kei