今日は「AIが書いた文書か、人間が書いた文書かを当てるコンペ」の最終日でした。参加者の多くが予想していた通り、大きなShake-up/Shake-downが起こっています。私はというと。。。大きなShake-downの方に入ってしまいましたー!わははは!
結局、1940位で終了。メダルの影も形も見えません。振り返ってみると、結構、序盤で良いモデルができていたのに、それを採用せず、また、後半で悪手を重ねてしまった、という感じでした。下記、私がLBスコアを上げるためにやったことと、その結果を見て内面化していった仮説に対して、PVスコアはどう変化していたか、を照らし合わせながら、答え合わせをしていきます。
仮説(1):DAIGT v2にDATGT-exのデータを統合すると精度が良くなる
⇒〇正解
LB:0.960 ⇒ 0.961
PV:0.893 ⇒ 0.903
仮説(2):CatBoostに高い重みを与えるのは良くない
⇒×不正解:実はすごいゲインがあった!この時の結果を最終提出していれば・・・
LB:0.961 ⇒ 0.951
PV:0.893 ⇒ 0.917
仮説(3):TfIdfVectorizerのmax_featureを減らすのは効果がある
⇒〇正解
LB:0.961 ⇒ 0.962
PV:0.902 ⇒ 0.906
仮説(4):人間の文章データの重複は効果がある
⇒〇正解
LB:0.961 ⇒ 0.963
PV:0.902 ⇒ 0.904
仮説(5):LightGBMを省いても精度は向上する
⇒×不正解。これはかなり致命的なミスだった。
LB:0.961 ⇒ 0.963
PV:0.902 ⇒ 0.890
仮説(6):TfIdfVectorizerのn-gram rangeを長い方に伸ばすのは良いこと
⇒×不正解
LB:0.963 ⇒ 0.967
PV:0.890 ⇒ 0.886
仮説(7):再びCatBoostに重みを与えても良くならない
⇒×不正解:実はCatBoostにすごいご利益があった。。。
LB:0.967 ⇒ 0.967
PV:0.886 ⇒ 0.905
仮説(8):ノイズデータの重複は効果がある
⇒〇正解:
LB:0.972 ⇒ 0.973
PV:0.883 ⇒ 0.887
こうして振り返ってみると、序盤でそこそこ優秀なモデルが作れていたのに、そこを素通りしてしまい、後半は悪い仮説に悪い仮説を重ねた結果、PVスコアをどんどん下げていっていた、という感じですね。特に、データ拡張まわりの仮説はだいたい当たっていたのですが、分類器の選択を完全に見誤っていた感じです。こうなった原因としては、「データ拡張で精度が向上できる」⇒データを増やしたい⇒メモリオーバーフローになる⇒重い分類器を軽い分類器に入れ替えてみる⇒LBスコアが上がった(ひと安心)⇒またデータを増やす⇒・・・。という思考ループにはまってしまっていたからでした。
今回の教訓は下記の通りです
- CatBoost、LightGBMは、それなりに性能の裏付けがある。安易に外そうとするな。
- 「最後にたどりついた最高LB、最高AUCは努力の結晶ではない」それは「悪い仮説に悪い仮説を積み重ねただけの代物かもしれない」。最終提出結果には、先入観なく作っていた序盤の単純なベストモデルも入れておけ。
また、PVスコアの上位層の手法を見ていると、みんな結構、データの整備に時間と力をかけていたことが分かりました。やはり、データの質と量が分類器のロバスト性を高めるのだと再認識しています。過学習の可能性を放置せず、しっかり、手元のデータのトピックを分類して、偏りをなくす工夫をしておくべきでした。
このように、今回は残念な結果に終わりましたが、これからは「Kaggleで1900位以上転落した男」として、別のコンペでも引き続き頑張ります。