Kaggle Playground Series 2024年7月　上位解法まとめ

# はじめに
Kaggleでは毎月、テーブル形式のデータを題材とした機械学習のコンテストKaggle Playground Seriesが開催されています。
今回は2024年7月に開催された[Binary Classification of Insurance Cross Selling](https://www.kaggle.com/competitions/playground-series-s4e7/overview)の上位チームの解法をまとめていきます。
Kaggle上位陣が使う最先端の手法を知りたい方や、テーブルデータのコンペで精度を上げたい方はもちろん、これからデータサイエンスを学びたい初心者の方もぜひ読んでいってください！

# コンペ概要
- 保険会社の保有する顧客データから、保険の成約率を予測する**二値分類**
- データは**1000万件**もの合成データ
- 評価指標は予測された確率から計算される**AUC**
- 開催期間１か月の**一般部門**の他に、制限時間24hの**AutoML Grand Prix**も開催

# 上位チームの解法

- AutoML Grand Prixの制限時間内では、CatBoostの単体モデルが高評価を獲得し、最終結果ではアンサンブルモデルが上位に入りました。ニューラルネットワーク、特にディープラーニング系のモデル、AutoMLの一種[LightAutoML(以降LAMA)](https://lightautoml.readthedocs.io/en/latest/)も上位に入るために重要な役割を果たしました。
- 多くの解法で、AutoML Grand Prix 1位のシンプルな特徴量が採用されました。これには、Previously_Insuredと他の特徴量の組み合わせや、数値特徴量をカテゴリ変数として扱う手法が含まれます。
- 合成データの元となったデータセットの使用や、データの癖を利用した特徴量エンジニアリングが、スコア改善に貢献しています。


## AutoML Grand Prix(制限時間24h)
| 順位 | 概要 |
| ---- | ---- |
| 1位 | 単体のCatBoost。この解法で使われた特徴量が他でもよくつかわれている。 |
| 2位 | こちらも単体のCatBoost。合成データの元になったデータセットを追加で使用。特徴量については手作業で作成したものを検討している。 |
| 3位 | LAMAを使用した多数のモデルのアンサンブル。 |

## 最終結果
| 順位 | 概要 |
| ---- | ---- |
| 1位 | 78ものモデルを組み合わせたアンサンブル。個別のモデルも手作業で調整したLightGBM、LAMA、公開ノートブックの出力など多様なものを使っている。|
| 2位 | 単体のCatBoostのみ。他のモデルの検討についてはノートブックを参照。 |
| 3位 | LAMAを利用した38モデルのスタッキング。個別のモデルにはCatBoost, Keras FM, Keras Embedding, xLearn FFM, LAMA ResNetを使用。 |
| 6位 | CatBoost, LightGBM, XGBoost, ニューラルネットワーク, ロジスティック回帰のアンサンブル。特徴量はAutoMLGrandPrixの1位解法と同じものを使用。 |
| 8位 | ハイパーパラメータ調整したCatBoost。k = 10のStratifiedKFfoldで交差検証。|
| 9位 | CatBoost, LightGBM, ニューラルネットワーク, XGBoost, ランダムフォレストから構成される24モデルのアンサンブル。 |

## 外部データの利用
このコンペの合成データは[こちらのデータ](https://www.kaggle.com/datasets/annantkumarsingh/health-insurance-cross-sell-prediction-data)から作られています。このため、このデータを追加しています。(AutoML Gland Prix 2位、最終1位、6位、9位)

また、合成データの中で元データと同じ特徴量を持つ行では、Targetの値が反転するという癖があります。このため、これを利用して予測結果を書き換えることでスコアが改善します。

https://www.kaggle.com/competitions/playground-series-s4e7/discussion/520253

## 特徴量エンジニアリング

ほとのどの解法では、AutoML Grand Prix 1位解法で採用された非常にシンプルな特徴量が使われていました。

- Previously_Insuredとの組み合わせた特徴量4種
- 数値特徴量もカテゴリー変数として扱う

他には以下のような特徴量が使われていました。
- ビニング、集約特徴量、複数カテゴリの組み合わせなど28種(AutoML Grand Prix 2位)
- ニューラルネットワークによる埋め込み(AutoML Grand Prix 3位、最終3位)

## 使用されたモデル
時間に制約があるAutoML Grand Prixでは単体のCatBoost、最終結果では多数のモデルをアンサンブルしたものが高いスコアを達成しました。アンサンブルを採用したチームでは、AutoMLのLAMAが多く採用されています。
個別のモデルについては、ニューラルネットワークのモデルが高いスコアを達成するのに重要になります。特に、Kerasで構築した比較的単純なモデルよりも、DenseLightやTabResnetのようなディープラーニング系のモデルの方が上位に行くほど採用される傾向にありました。

### アンサンブルとAutoML(LAMA)
|	順位	|	アンサンブル	|	LAMA	|
|	----	|	----	|	----	|
|	AutoML Grand Prix 1位	|	無し	|		|
|	AutoML Grand Prix 2位	|	無し	|		|
|	AutoML Grand Prix 3位	|	加重平均	|	〇	|
|	最終1位	|	スタッキング(XGBoost)	|	〇	|
|	最終2位	|	無し	|		|
|	最終3位	|	スタッキング(DenseLight)	|	〇	|
|	最終6位	|	スタッキング(Scikit-learn, StackingClassifier)	|		|
|	最終8位	|	無し	|		|
|	最終9位	|	加重平均(ヒルクライム)	|		|

### ツリー系と線形回帰
|	順位	|	CatBoost	|	LightGBM	|	XGBoost	|	ランダムフォレスト	|	ロジスティック回帰	|
|	----	|	----	|	----	|	----	|	----	|	----	|
|	AutoML Grand Prix 1位	|	〇	|		|		|		|		|
|	AutoML Grand Prix 2位	|	〇	|		|		|		|		|
|	AutoML Grand Prix 3位	|		|	〇	|		|		|		|
|	最終1位	|	〇	|	〇	|		|		|		|
|	最終2位	|	〇	|		|		|		|		|
|	最終3位	|	〇	|		|		|		|		|
|	最終6位	|	〇	|	〇	|	〇	|		|	〇	|
|	最終8位	|	〇	|		|		|		|		|
|	最終9位	|	〇	|	〇	|	〇	|	〇	|		|

### ニューラルネットワーク
|	順位	|	NN	|	NN(FM)	|	NN(enbedding)	|
|	----	|	----	|	----	|	----	|
|	AutoML Grand Prix 1位	|		|		|		|
|	AutoML Grand Prix 2位	|		|		|		|
|	AutoML Grand Prix 3位	|		|		|		|
|	最終1位	|		|		|		|
|	最終2位	|		|		|		|
|	最終3位	|		|	〇	|	〇	|
|	最終6位	|	〇	|		|		|
|	最終8位	|		|		|		|
|	最終9位	|	〇	|		|		|

### ディープラーニング
|	順位	|	DenseLight	|	Tab-Resnet	|	FT-Transformer	|	Autoint	|	Tab-Transformer	|	xLearn FFM	|
|	----	|	----	|	----	|	----	|	----	|	----	|	----	|
|	AutoML Grand Prix 1位	|		|		|		|		|		|		|
|	AutoML Grand Prix 2位	|		|		|		|		|		|		|
|	AutoML Grand Prix 3位	|	〇	|	〇	|	〇	|	〇	|		|		|
|	最終1位	|	〇	|	〇	|		|	〇	|	〇	|		|
|	最終2位	|		|		|		|		|		|		|
|	最終3位	|		|	〇	|		|		|		|	〇	|
|	最終6位	|		|		|		|		|		|		|
|	最終8位	|		|		|		|		|		|		|
|	最終9位	|		|		|		|		|		|		|

# リンク

## AutoML Grand Prix(制限時間24h)
| 順位 |  リンク |
| ---- |   ---- |
| 1位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/516475 |
| 2位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/517112 |
| 3位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/516860 |

## 最終順位
| 順位 |  リンク |
| ---- |  ---- |
| 1位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/523404 |
| 2位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/523489 |
| 3位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/523661 |
| 6位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/523484 |
| 8位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/523486 |
| 9位 |  https://www.kaggle.com/competitions/playground-series-s4e7/discussion/523403 |

# 感想
今回、Kaggleの上位解法を初めてじっくりと分析してみて、AutoMLやディープラーニング手法の利用がこれほど進んでいることに大変驚かされました。[Kaggleで勝つデータ分析の技術](https://www.amazon.co.jp/Kaggle%E3%81%A7%E5%8B%9D%E3%81%A4%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%81%AE%E6%8A%80%E8%A1%93-%E9%96%80%E8%84%87-%E5%A4%A7%E8%BC%94/dp/4297108437)から、ここまでの進化があるとは予想していませんでした。

今後は、コンペティションで紹介されている上位解法を単に取り上げるだけでなく、最新の手法やその背景にある技術についても深掘りして解説していきたいと思います。皆さんと共に、テーブルデータの領域での新たな潮流を学び、共有していければ幸いです。