Kaggle Mechanisms of Action (MoA)コンペを終えて

11/30にKaggleのMechanisms of Action (MoA) コンペが終わりました。初めて本格的に取り組んだコンペでしたが、結果は惨敗でした。4384チーム中1000位以内にもなれず。。。その一方で、本コンペで色々なことを学んだのでそれらを忘備録的にまとめたいと思います。

学んだこと

1. Cross Validation (CV)の大切さ

本コンペでは、蓋を開けてみるとPublic LBとPrivate LBの順位が大きく変動する「Shake up」が起きました。コンペ開催期間中、Public LBでずっとトップだったチームがメダル圏外になり、逆にPublic LBでスコアが振るわなかったチームが上位に入賞していました。後者のチームは、Public LBのスコアに囚われずCVを信じてコンペを戦っていたのだと思います。Kagglerの間には「Trust CV」という言葉があるそうですが、身を持って実感しました。

2. 特徴量エンジニアリングのやり方

公開notebookを参考に以下の特徴量エンジニアリングの手法を試しました。

  • 主成分分析(PCA)
  • 各特徴量の統計量(合計、平均、標準偏差 etc.)
  • rankGauss(数値変数をGauss分布に変換する手法)
  • VarianceThreshold(特徴選択の一種。所定の分散を満たさないサンプルを持つ特徴を除去。)
  • クラスタリング

3. 機械学習モデル

以下の機械学習モデルを使いました。 

(1)Newral Network (NN)

(2) TabNet・・・タブ形式(表形式)のデータを前処理なしで扱えるNN。参考notebook:

https://www.kaggle.com/ludovick/introduction-to-tabnet-kfold-10-inference

https://www.kaggle.com/hiramcho/moa-tabnet-with-pca-rank-gauss

 (3) Split NN・・・複数のNNを特徴量の異なる部分を用いてそれぞれ学習し、上記複数のNNの出力値を別の1つのNNに入力し、最終結果を出力するイメージ。参考notebook:

https://www.kaggle.com/gogo827jz/split-neural-network-approach-tf-keras

 4. NNのハイパーパラメータの最適化

以下のnotebookを参考にNNのハイパーパラメータのチューニングの仕方を学びました: 

 https://www.kaggle.com/gogo827jz/optimise-blending-weights-with-bonus-0

 5. Ensemble ratioの最適化

複数の学習済みモデルの予測値をensembleするときにどういった重み(ratio)で各モデルの予測値を足し上げるかという問題があります。下記notebookから各モデルのOOF(Out of Fold)の予測値を使ってratioを最適化する手法を学びました:

https://www.kaggle.com/gogo827jz/optimise-blending-weights-with-bonus-0

 6. 公開notebookの手法の組み合わせでメダル圏外になれること

入賞者のnotebookをざっと見たところ、他の人が公開したnotebookの手法(モデル、特徴量エンジニアリング等)を組み合わせてモデルを作っていた人もいました。公開notebookとdiscussionをフォローすればメダル圏内に入れると思いました。

 

以上、本コンペで学んだことの一部を書きましたが、公開notebookからは本当に色々なことを学ばせてもらいました。公開者の方々には感謝の気持ちでいっぱいです。

 

 反省点

コンペ終盤にもたついたこと

学習済みの機械学習モデルをloadしてEnsembleを取るという作業でつまずきました。原因はわからないままですが、学習済みのTabNetをloadし、それを使ってsubmission.csvを作ってsubmitしたところ、終了日前日にSubmission CSV Not Foundというエラーに出くわし、慌てました。結局、時間の関係でTabNetを使用することを断念し、スコアを大きく落としました。次回のコンペでは、もう少し余裕を持って最終提出するnotebookの作成、submitを行おうと思います。

 submit回数が圧倒的に少ない

本コンペを通しての私のsubmit回数はたったの28回でした。成績上位者はsubmit回数が200回を超えていたりとその差は歴然としています。それだけ試行錯誤の回数が違うのですから、スコアに差が出て当然です。次回はまずは100回のsubmitを心がけたいと思います。もちろん回数が多ければいいというわけではないですが。。。

公開notebookのコピペしかできなかったこと

正直、他の方が色々な手法を公開し、十分に理解しないまま自分のnotebookに反映させていました。理解が不十分なためアルゴリズムの改変もあまりできませんでした。公開notebookの手法を使う場合もしっかりと理解して使うこと大切だと思いました。

成績上位者のnotebookが順次公開されていっています。それらのうちいくつかをちゃんと復習し、今後の自分の糧にしたいと思います。また、Pytorchの基本的な使い方もまだ不十分な部分があるため、腰を据えて勉強していきたいと思います。

 

以上、長文になってしまいましたが、最後まで読んでいただきありがとうございましたm(_ _)m