Tabular Playground Series - Jan2021　の解法まとめ

#はじめに

こんにちは、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 コンペである[Tabular Playground Series - Jan2021](https://www.kaggle.com/c/tabular-playground-series-jan-2021)の解法をまとめたものを紹介します。

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

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

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


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







#1位、2位解法
[1位](https://www.kaggle.com/c/tabular-playground-series-jan-2021/discussion/216037)
・Denoising Autoencoder （以下DAEと略す）からのMLPとLightGBM
・それらを複数のパラメータで予測値を出してRidge回帰し、さらにそれらの単純平均を取る


[2位](https://www.kaggle.com/c/tabular-playground-series-jan-2021/discussion/216070)
・DEAは使ってみたがうまくいかなかった
・swap noiseを足したNNをRidge回帰を用いてスタッキング


#1位, 2位所感
・1位、2位ともにノイズを足す手法を使っているが、2位の人がDAEは使ってみたもののうまくいかなかったと述べていることから、ただ使えばいい訳ではなく、何かしらの勘所あるのだろう。

・1位の人がDAEとは何かから始まり、実際のどのように使うかをかなり丁寧に解説してくれているので、実際にDAEを使うことになったら読むと有益そう。[リンク](https://www.kaggle.com/springmanndaniel/1st-place-turn-your-data-into-daeta)



#3位解法
[3位](https://www.kaggle.com/c/tabular-playground-series-jan-2021/discussion/216087)
・LightGBMと単純な特徴量
・閾値を設定して0, 1ラベルを張り分類モデルを作成
・さらにtargetが閾値より高いデータを用いて回帰
・回帰と分類の予測値を組み合わせて予測値を出す
・閾値を変えるだけで多様なモデルを簡単に作ることができ、そのoofとテストセットの予測値を蓄積
・DAEを適用して拡張されたデータにLightGBMを適用
・連続した値の特徴量からカテゴリカル変数を作りEmbedding層をもつMLPで予測
・以上のモデルのoof予測値を線形回帰でスタッキング
・スタッキングの際に非線形の交互作用項を作成

#3位所感
・3位の人の解法は、全体として、かなり色んなテクニックを使っている印象を受け、ここまでやるのかと読んでいて圧倒された。

・Kaggle本で回帰タスクであっても分類で予測することはあるというのが書かれていたので、このテクニック自体は知っていたが、閾値を動かしていくことで多様なモデルを作り、oofを蓄積することが最終的な精度向上に寄与させるアイデアが個人的に好き。

・3位の人の解法の、最後にスタッキングするときに線形回帰し、非線形の交互作用項を加えるというのはユニークだと思った。スタッキングするときはRidge回帰をよく使うというイメージがあるので読んでて驚いた。スタッキングをする際の、本当に限界まで精度を上げるための選択肢の一つとして覚えておきたい。


#全体として
・4位の方の解法（[4位解法リンク](https://www.kaggle.com/c/tabular-playground-series-jan-2021/discussion/216071)）と11位の方の解法（[11位リンク](https://www.kaggle.com/c/tabular-playground-series-jan-2021/discussion/216115)）は、Notebook を読む限り、あまり特別なことはしてない印象を受ける。それほど凝ったことをしなくても上位に食い込めるというのは励みになる。ただ、もしかしたら、何かしら明かしたくないテクニックがあり、そのために口が重くなっているのかもしれない。

・多数のモデルのアンサンブルを用いた解法が多く、Kaggle らしいと言えばKaggle らしいコンペだった様子。

・使われているのはMLPまでで、いわゆる深層学習モデルは使われていない。なんでかんでもDeepでポンすれば勝つ訳ではないことを再確認した。

・over fitting しやすいデータだったためか1位、2位、3位の解法が皆ノイズを自分で足すやり方を取っている。

・1位、３位はDAEにかけたデータにLightGBMを使っていることが共通している。これはデータが匿名化されているため、人の手による特徴量エンジニアリングがしづらかったためだと思われる。






#感想

このコンペはいかにover fitting をなくせるかがキモだったようです。そうした、over fitting しやすいデータのコンペに今後取り組むにあたっては役に立ちそうな点が多いと感じました。

特に、ノイズを足して過学習を抑える手法はこのコンペの解法を読んでみて初めて知りました。調べてみると、swap noise と呼ばれる、行ごと入れ替える方法、個別のデータごとにランダムに入れ替える方法や、Gaussian Noise （ノイズが取る値がガウス分布に従うもの）と呼ばれるノイズを足す方法があるようです。


コンペで匿名特徴量コンペやover fittingしやすいデータのテーブルコンペがどの程度あるのかよく知りませんが、そのようなコンペであれば、今回まとめた解法で使われている手法を試してみる価値はありそうだと感じます。

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