はじめに
この度、kaggleのMoAというコンペに会社の同僚と参加し4,384チーム中35位を獲得することができました。テーブルデータのコンペは初めてだったのですがチームメンバーのおかげで楽しく学びをもって取り組むことができました。この記事ではこのコンペに取り組む中で見つけたテーブルデータに使えるNNモデル(PyTorch)を備忘録としてまとめます。
https://www.kaggle.com/c/lish-moa/overview
TabNet
このコンペではこちらのモデルを使っている人も多かったのではないでしょうか?安定していい性能を発揮するので便利でした。
TabNet: Attentive Interpretable Tabular Learning. arXiv preprint arXiv:1908.07442.)
https://arxiv.org/pdf/1908.07442.pdf.
https://github.com/dreamquark-ai/tabnet
このモデルはGoogle CloudAIチームによって開発されているもので、Google Cloud AI Platformでも採用されているとかいないとか...
論文によるとこのモデルの真価を発揮するためにはlabelを使わないSelf Pretrainingをする必要があるようなのですがPyTorch Tabnetのレポジトリにはまだその機能は実装されていません(開発中のようなのでいつか追加されると思います。)なので今回のコンペでは開発中のbranchを利用して自分で実装したものを使いました。実際、Pretrainingを使うとモデルが大きくなっても過適合せずにキチンと学習が進みました。
https://github.com/hirune924/tabnet
使い方
https://www.kaggle.com/hirune924/pytorch-tabnet-pretraining-step3-many-fe-train
DeepFMとその仲間たち
CTR predictionの分野ではNNでテーブルデータを使う研究が盛んなのでしょうか?今回のコンペではカテゴリカル特徴がほぼ無かったので結局は使いませんでしたが、カテゴリカルデータ多い問題であれば使えたかもしれないなと思っています。
https://github.com/guokr/TorchCTR
https://github.com/shenweichen/DeepCTR-Torch
https://deepctr-torch.readthedocs.io/en/latest/
https://github.com/jrzaurin/pytorch-widedeep
DeepInsight
こちらはテーブルデータというかゲノミクスなどの非画像データ(特に高次元でスパースな非画像データ)をkPCAやt-SNEを使用して画像化してCNNで扱うという方法です。思い切った方法ですが精度は意外といいです。しかし、わざわざ画像にして扱うのでモデル学習時間やモデルサイズがテーブルデータと比べると大きく増加するのが欠点かなと思います。今回のコンペでもモデルがヘビーになってしまって実験サイクルのスピードが落ちてしまいそうだったので採用しませんでした。
https://www.kaggle.com/markpeng/deepinsight-efficientnet-b3-noisystudent
https://www.kaggle.com/markpeng/deepinsight-transforming-non-image-data-to-images
GrowNet
こちらは自分は使わなかったので説明は省きますが、複数の小さなNNモデルを勾配ブースティングのように積んでいく感じでしょうか
https://github.com/sbadirli/GrowNet
https://www.kaggle.com/gogo827jz/multi-label-pbestpre-inference-grownet-pl
NODE
こちらも自分は使わなかったので説明は省きますが、NNモデルを使った決定木みたいな感じでしょうか
https://github.com/Qwicen/node
https://www.kaggle.com/gogo827jz/moa-public-pytorch-node