約3か月間にわたって行われたKaggleの“MoA”コンペが12月1日に終了しました。このコンペは4000以上のチームが参加した大規模なコンペであり、ディスカッションでの意見交換やNotebookの投稿も盛んに行われていました。
MoAコンペは「コードコンペティション」であり、自分のNotebookに記載されているコードをそのまま提出し、テストデータでのスコアを計算するために改めてコードが実行されるという仕組みになっていました。ただCSVファイルを作成して提出する場合とはやや仕様が異なっていたので、混乱している人も多くいたように思います。
威力を発揮した特徴量エンジニアリング
このコンペはテーブルデータコンペであり、初心者の方でも気軽に取り組みやすい内容でした。特徴量エンジニアリング(Feature Engineering)については、人気のあるNotebookで紹介されていたテクニックがいくつかありました。
①PCA(主成分分析)
主成分分析を使ってデータの次元を変える手法です。変更後の次元を何次元に設定するかによってスコアに大きな変動があったようです。
②RankGauss(詳しくはこのページを参照)
数値をガウス分布に変換(Normalization)する手法です。この他にも、似たようなやり方としてscikit-learnに入っている”VarianceThreshold”と呼ばれる手法を用いてた人も多くいました。
③新しい特徴量を追加
既存の特徴量を活用して、新しいものを作るやり方はテーブルデータでの機械学習で有効に働くことが多いです。このコンペにおいても、元の特徴量の平均値や標準偏差等を新しい特徴量として用いるやり方が人気でした。
モデル
①NN(ニューラルネットワーク)
このコンペで最も多くの人が使っていたモデルは、おそらくニューラルネットワークによるモデルなのではないかと思います。フレームワークはKerasよりもPytorchを使っているNotebookが多かったようです。
②TabnetRegressor(詳しくは、このページを参照)
Pytorchで”Tabnet”と呼ばれるモデルを使っている人も多くいました。コンペ終了1か月以上前からPublic LBで高いスコアを取れるモデルとして注目されており、アンサンブル学習の際にも効果的に働いたようです。
③CNN(畳み込みニューラルネットワーク)
少数派ではありましたが、いくつかのチームはCNNを活用していました。CNNは画像処理において特にその威力を発揮しますが、テーブルデータに応用することもできたようです。Public NotebookではCNNを使ったモデルはほとんど見かけることはありませんでしたが、上位に入ったいくつかのチームが使用したモデルの1つとしてCNNを挙げていました。
モデル同士のアンサンブル学習
このコンペではある1つのモデルだけが予測した結果を提出する人は少なく、複数のモデルが導き出した予測を混ぜ合わせた結果を提出する人が多かったようです。
ただ、先ほども書いたようにこのコンペはコードコンペであったので、既存のCSVファイルを混ぜ合わせるだけではPrivate LBに適した提出にはなりませんでした。Private LBを算出する際にもう1回モデルを実行させるための機構(Inference)をNotebook上で用意しておく必要がありました。
アンサンブル学習で使ったモデルの数はチームによってさまざまでしたが、中には10個ものモデルを使ったチームもいたようです。
上位に入ったチームの解法は、Discussionで確認できる
実際にメダルを獲得したチームがどんな解法を使っていたのかについて知りたい方は、MoAコンペのDiscussionページをご覧ください。”~th(順位)Solution”と書かれたスレッドで、成績が優秀だったKagglerが自分のモデルや特徴量エンジニアリングなどについて解説しています。