Tabular Playground Series - Apr, May, Jun2021 の解法まとめ

#はじめに

こんにちは、tmrtjと申します。

私は現在株式会社音圧爆上げくんという会社に所属しており、プロKagglerとして活動しています。


これから、主にテーブルデータコンペに取り組むに当たって、そこで得た知見などを記事として投稿していく予定です。

また、コンペに直接関係する内容の記事はprivate sharing に当たらないように該当コンペのDiscussion にも同じ内容のものを投稿します。



私は現在プロKagglerとして、業務の一環で、現在Kaggleで行われているコンペの一つである[Tabular Playground Series - Jan2022](https://www.kaggle.com/c/tabular-playground-series-jan-2022) に参加しています。



このコンペに取り組むにあたり、過去行われたTabular Playground Series の公開されている解法を読んでまとめています。

まとめたものの一部を記事として公開していきます。

今回は、Tabular Playground Series の[4月](https://www.kaggle.com/c/tabular-playground-series-apr-2021)、[5月](https://www.kaggle.com/c/tabular-playground-series-may-2021)、[6月](https://www.kaggle.com/c/tabular-playground-series-jun-2021)のコンペ（以下TPS4、TPS5、TPS6という）の解法をまとめたものを紹介します。

特に、まとめるにあたり、個々の解法から、他のテーブルコンペにも応用が効きそうな点をピックアップしました。

コンペのEDAやコードの追試などまでは行えていないので、理解が不十分な点があるかもしれません。

また、Kaggleのコンペに参加するのは今回が初なので、中級者以上の方から見ると大したことが書いてないように思われるかもしれませんが、私のような初心者の方にはとっかかりとしては役に立つかもしれません。
お手柔らかにお願いします。


また、Kaggle上にNoteBookとして同じ内容の記事を英語で投稿しています。
リンクは[こちら](https://www.kaggle.com/c/tabular-playground-series-jan-2022/discussion/303695)です。


#TPS4
#１位解法
[リンク](https://www.kaggle.com/c/tabular-playground-series-apr-2021/discussion/235739)
・swap noiseを足したか覚えていないので再現できないかもしれない
・自分のbest scoreと他のノートブックのブレンド
・過去の三つのTPSコンペからDAEにはswap noiseを足すのが重要だと学んだ
・ひとつ前のTPSコンペの後に、swap noiseでデータを増やして、LighGBMに過学習対策を施すことを思いついた
・epochごとに異なるswap noiseを加える方法が分からなかったので、30のモデルに異なるノイズを足して訓練させた


#TPS4、1位所感

・epochごとに異なるノイズをかける方法がわからなかったので30のモデルを訓練しているなど、大変ではあるが、結果に結びつくことを手を抜かずにやっている点が印象的。
・いろいろなテーブルコンペの解法を読んでみて、LightGBMはとにかくよく使われているし、実際自分も今取り組んでいるコンペで使っている。なので、この解法のAutoEncoderでデータを増やしてLightGBMを使うという手法は選択肢として持っておきたいと思った。
・過去のTPSコンペから学んでいる点や、まとめでは触れていないが、AutoMLフレームワークの活用を積極的に取り入れている点などが印象的で、こうした向上心が結果に結びついていくのだろうと感じた。


#TPS5
#１位解法
[リンク](https://www.kaggle.com/c/tabular-playground-series-may-2021/discussion/243054)
・取り立てて特別なことはしていない
・特徴量エンジニアリングはやってみたが精度が悪かったのであまり追求していない
・5つの異なるモデルで５Fold Stratified CV 
・モデルは LogisticsRegression, RandomForest, XGBoost, LightGBM, and CATBoost
・オーバーサンプリング、アンダーサンプリングは試していない
・weighted averageは効かなかった
・CalibratedClassifierCVを使って5 Fold 全てのモデルでスタッキング
・メタモデルにはRidgeを使用
・loglossを使うので0.05より下と0.95より上は刈り込み
・top public notebookを混ぜたが効かなかった

#3位解法
[リンク](https://www.kaggle.com/c/tabular-playground-series-may-2021/discussion/243093)
・公開されてるsubmission fileは使っていない
・予測しやすい”Class_2”に集中して予測した



#TPS5所感
・1位解法は、試してみたこと、そのうち何が聞いて何がうまくいかなかったまでかなり丁寧に書かれていて勉強になる。
・Calibrated Classifier という手法はこの解法で初めて知ったが、モデルの予測値を実際の確率に近づける手法らしく、さまざまな手法が提案されているそう。
・本人も書いているように、すごく特殊なことをして勝っているという感じではない印象。精度向上につながるかもしれない、いろいろな工夫点を愚直に試していったのではないだろうか。
・3位解法の"Class_2"一点突破が印象的。Notebookを読む限りではそのポイントに気づけたかどうかがかなり重要で、勝敗を分けた模様。




#TPS6
#1位解法
[リンク](https://www.kaggle.com/c/tabular-playground-series-jun-2021/discussion/250046)
・複数のパラメータでXGBoostで予測、予測値のうち90を特徴量として使ってnnで予測

#2位解法
[リンク](https://www.kaggle.com/c/tabular-playground-series-jun-2021/discussion/250060)
・複数のモデルのアンサンブル
1, NN + GBT（今は削除されているが、公開されてたモデルに似たものらしい）
2,  NN（Embedding→Conv1D→Residual）にkNNを特徴として加えたもの
3,  NN（1DCNN + 2DCNN + Residual）
4, LightAutoML

#TPS6所感
・両解法からモデリング勝負のコンペだった様子が窺える。
・2位の方の解法は、2,3あたりが今の自分だと思いつかないなーと感じる。
・また、2位の方のkNNを特徴として加えるというテクニックは、GBDTであっても使えると思うので、NNをあまりうまく使えない人でも取り入れやすそう。
・2位の方がLightAutoMLというAutoMLフレームワークを使っている点が印象的。

#全体としての感想
テーブルコンペといえば人間による特徴抽出+GBDTというのが基本ではあったと思いますが、2021年では、TPSであっても上位に入るためにはNNを使いこなすことが求められていることを痛感しました。

今まで、使いやすく、簡単にそこそこの精度が出ることからLightGBMばかり使っていました。しかし、今後もコンペに参加していくつもりではあり、やるからには上位の成績を取りたいので、腰を据えてNNに習熟していこうと考えています。


また、TPS4で1位の方のNotebookに、TPS4コンペで戦うにあたり、それまでに参加した三つのTPSコンペから学んだことが生きたとの記述があったのですが、それ以前の三つのTPSコンペの順位を見てみると、1236位→433位→21位と推移しており、コンペ参加を通じて着実に成長していったのだろうことが窺われ、刺激になります。参加したてでは結果が振るわなくても、着実に実力をつけていければ良い成績を収めることは不可能ではないことを知り、努力するモチベーションになります。

TPS5で3位の方のNotebookに、実世界での運用への良い直感を育むことが大事という旨の記述がありました。これは当たり前のように聞こえますが、実際にコンペに参加してモデルをこね回していると忘れがちなので、時折立ち止まって、データがどのような現実を反映しているのかや、そのデータがどのように生み出されているものなのかに頭を巡らせることが必要になると思われます。


今回のまとめで、いくつかのNotebookでAutoMLについての言及がありました。モデリングの一部をAutoMLを使っているという形のようですが、コンペ中に大量の実験をこなす中で、一回の実験の省力化や高速化に役立つと思うので、そうしたツールやフレームワークを使い慣れていくことは検討してもいいかもしれません。


#さいごに
株式会社音圧爆上げくんではプロKagglerを募集しています。
ご興味のある方はぜひ以下のリンクをご覧ください。
[Wantedlyリンク](https://www.wantedly.com/projects/748285)