Mechanisms of Action (MoA) Prediction(以下MoAコンペ)が終了し、本日ようやく順位が確定しました。

結果としてはPublic270位→Private 99位97位と、170位ほど順位を上げて、ソロシルバーを獲得することができました。

(2021/01/09追記)
順位確定後に自分より上位2名がLBから削除されたようで97位に変わっていました。

最初から狙いはシルバー以上のメダル獲得であったため、無事目標を達成することができ一安心です。また、これによりメダルを合計2つ獲得したこととなり、Kaggle Competition Expertになることができました。

目標はMasterであるためExpertはあくまで通過点ですが、とりあえずNoviceを脱却することができました。今回は特に上位入賞したわけでもないため、簡単にコンペのおさらいを。

1.MoAコンペとは

開催概要

開催期間:2020/09/04~2020/12/01
形式:Code Competition
データ:テーブル

概略・所感

MoAというのは薬理学における作用機序のことで、本コンペでは遺伝子の発現データや細胞の生存率データ等をもとに、各サンプルに対する作用機序応答のターゲット(複数)を予測することが求められました。とまぁ、専門外の人からしたら何のことかよくわかりませんが、個人的な感覚としては、一つ一つの特徴量から定性的な意味合いを見出すことが難しく、各種モデルやエンジニアリング手法の効果を定量的に評価しながら、ベターなチョイスを見つけていくようなコンペだったかと思います。より多くのテクニックを持ち合わせている人はそれだけ選べる選択肢が多く、逆に少ない人からすればそれらを学ぶ場としても機能していたのではないでしょうか。また、スコアが密集していたこともあり、その他いくつかの観点からそこそこShakeしそうな気がしていましたが、思っていたほどではありませんでした。Public LB上位に、Publicテストデータに対する予測結果のみを提出していた人が一定数いた関係で、Private LBでは結構順位を上げることができました。

2.自身の取り組み

参加期間:10/28~12/1
順位:97th / 4373teams
Private Score : 0.01611

最終モデル(Final Submission)

Final Submissionとしては図のようなモデルを提出しました。一つはローカルでの事前学習済みモデルとsubmission上での学習モデルを組み合わせたもの。もう一つは全ての学習をsubmission上で行うものでした。sumission上で行う学習はPCA等の処理にテストデータの特徴量も含めており、逆に事前学習済みモデルについては訓練データのみで行っております。後者のsubmissionについてはPrivateテストデータの特徴量分布がPublicテストデータや訓練データと大きく異なった場合のためのリスクヘッジでしたが、結果的にはより多くのモデルをアンサンブルした前者の手法がハイスコアとなりました。

特徴量エンジニアリングについて

最終的に採用した特徴量エンジニアリング手法は下記の通りです。

  • PCA

  • RankGauss

  • Standard Scaler

  • 統計量(sum, mean, std, kurt, skew)

これらの組み合わせについては、モデルに応じてCV ScoreやPublic Scoreを見ながら取捨選択を行いました。また、submission上で学習を行うモデルについては訓練データだけでなくテストデータの特徴量も合わせて処理を行いました。これにより、少ないseeds、foldsでも事前学習済みモデルと同等以上のスコアを示すことが多かったです。これは以前のOSICコンペでも有効でした。スコア上昇効果と学習時間を照らし合わせながら、submission上で学習を行うモデルを決定しました。

効果的だった手法

  • ハイパーパラメータチューニング

  • 交差検証時の分割数(folds)を増やす

  • seed averagingにおけるseed数を増やす

  • 複数モデルのアンサンブル

  • Label Smoothing

ほとんど「それはそう」といった内容ですね。各モデルに対してハイパーパラメータチューニングは念入りに行いました。ただし、モデルやパラメータによってはCV Scoreが向上しても、Public Scoreが向上しないこともあり、今回はその両方が良好である場合のパラメータのみ採用しました。Public LBだけでなく、CV Scoreに対する過学習にも気を付けましょう。

交差検証時のfoldsやseed averagingにおけるseed数ですが、これらはsubmissionの制限時間と精度のトレードオフを見ながら、いくつも検証を行い、最終的な値を決定しました。特にsubmission上で学習を行うモデルについては、制限時間がネックになるため、submission上で学習を行うべきか否かの判断を下す際に、これらのパラメータが重要になってきます。

また、アンサンブルに用いるモデル数ですが、ある程度までは増やした方が良く、私の場合、Final Submissionで用いた4モデルの組み合わせがベストでした。これ以上増やした場合はむしろスコアが悪化していたため、増やせば増やすほど良いというものでもなかったようです。

ほとんどの人が0.00001単位でスコアを競うことになるコンペであったため、このような「やって然るべき細かな調整」の積み重ねで少しでもスコアを伸ばすようにしました。

効果的でなかった手法

  • スタッキング

  • Pseudo-labeling

  • CV ScoreベースでのBlending Weight決定

スタッキングは効果的だった人が多かったみたいなので、私のやり方が良くなかったみたいです。コンペの序盤と終盤で試しましたが、私の場合、Blendingの方が良かったため、採用しませんでした。スタッキングによる予測と各モデルの予測を合わせてBlendingしてみても良かったかもしれません。

また、CV ScoreベースでBlending Wightを決定したアンサンブル結果よりもPublic Scoreを見ながら決定したアンサンブル結果の方が最終的なPrivate Scoreも良かったです。そもそもCV ScoreとPublic Score及びPrivate Scoreについて大まかな動きの変化は一致していたものの、細かな変化までは連動していなかったため、アンサンブルについても同様の結果となりました。

3.今後

 これでMasterになるために必要な「ゴールド1つ+シルバー以上2つ」の条件のうち2つをクリアしたため、残すところはシルバー以上のメダル1つとなりました。ある程度コンペにも慣れてきたものの、シルバーメダルというのはかなり真剣に取り組まなければ獲得することが難しいものであることには変わりないので、気を引き締めて頑張りたいと思います。