こんにちは
kaggle登録して4回目のコンペに参加してきました。
Mechanisms of Action (MoA) Prediction
結果はpublic619位→private204位/4384でメダルなしです。
publicで一回銅圏内までいけましたが最終的にはメダル圏外フィニッシュからのshakedown...ブレンドだけしてる公開ノートが上にあったので流石にshakedownはしないかと思ったのですが残念無念。
コンペ概要
※自分のコンペ用のメモから抜粋 間違った部分ございましたら指摘ください
MoA(作用機序)とは
- 薬理学における作用機序とは、薬剤がその薬理学的効果を発揮するための特異的な生化学的相互作用を意味する
- 薬剤が結合する酵素、受容体といった特定の分子標的について言及されることが多い
- 受容体に結合しないしない薬物は、単に体内の化学的または物理的特性と相互作用することにより、対応する治療効果を生じる。
- 例:制酸剤・下剤
- 作用機構(MoA:mode of action)とは、生体が物質に曝露されることによって生じる細胞レベルでの機能的または解剖学的変化を意味する。
なぜ重要なのか
- 抗感染症薬の開発では、臨床安全性に関わる問題を予測することができる。
- 薬剤の特定の部位と受容体の間の相互作用を知ることで、その相互作用を複製するように他の薬剤を処方することができる。
- 新薬の開発にも使われる
- どの治療に反応する可能性が高いかを特定したり、投与量の決定に役立つ
- 併用療法に活用できる
- 他の適応症を特定できる場合がある
- ある病気に関連するタンパク質を特定し、そのタンパク質を標的とする分子を開発する事ができる
用語
- agonist:作用薬
- 生体内の受容体分子に働いて神経伝達物質やホルモンなどと同様の機能を示す作動薬のこと
- antagonist:拮抗薬
- inhibitor:阻害剤
- アンタゴニストとは違い、酵素に作用することで、活動を抑制する薬剤
- activator:活性化剤
task
- 206のマルチラベル分類問題
- 評価値
- 対数損失関数の平均値
このコンペでの目標
- pythonの実装力向上
- NNの実装
- GBDTの実装
まずはLGBMとNNを実装する
www.kaggle.com
www.kaggle.com
www.kaggle.com
上の3つを参考にしながら自分なりにLGBMとNNを実装してこれをベースラインとしました。
簡単にパイプラインを作ってみる
TabNetという名前もよく見かけていたのでそれのベースラインも作成した後に一旦パイプラインとやらを作ってみる。
参考にしたパイプラインはこちらです。
qiita.com
出来たものはこんな感じ
- MoAベースとはiterative stratificationを指しています
- LGBMはstratified kfoldでラベル数分(206)モデルを用意
Feature engineering
discussionや公開ノートを参考に入れてみましたが、RankGaussとVarianceThreshold以外は聞いていたのかよくわかりません。
- PCA
- RankGauss
- KMeans
- GENES CELLSごとの統計量
- VarianceThreshold
discussionで2以上、-2未満の数値に意味があるみたいな書き込みを見たので、2より大きい数値の数、-2より小さい数値の数という特徴量を作りましたがこれも効果があったのか不明です。
Feature engineeringが一番大事という認識を持っていたのですが特に何が出来たわけでもありませんでした。
EDA
極端な不均衡マルチラベルデータということで、正例の割合とLogLossを並べてみたり
プロットしたりしました。
Lossもratioもある程度高いものに限定して学習したら良いんじゃないかと思いましたがだめでした。
結局この2つの図を生かして何かを解決するには至らず。。。
新しいCV戦略でパイプラインを再作成
コンペ期間も折り返して、drug_idが公開されたことによりdrug_idベースのCVができるようになりました。
公開場所は下記
Drug and MultiLabel Stratification Code
こちらを使ったモデルを作成し直して、スタッキングのパイプラインを作成し、最終的にこれを提出ということになりました。
結果
冒頭の通りメダル取れず!
上手くいった気がするもの
- スタッキング
- 1st stageにLGBM
- RankGauss
- VarianceThreshold
- label smoothing (privateではだめだったっぽい?)
試したけど上手く働かせられなかったもの
- ratioとlossが高いラベルだけで学習
- 2nd stageのtabnet
- 学習時にサンプリング比率を調整する
- testデータのdrug_idを common/uncommonに分けて適したモデルに推測させる
今回学んだこと
- LGBM実装
- pytorchでのNN実装
- 簡単なスタッキング
- optunaでのチューニング
- modelのシリアライズ
最初の目標となることは学べましたが悔しいものは悔しいですね
今後に向けて
この2ヶ月間色々やることを積んできたので12月はそれを消化するとして、また1月からkaggle master目指して頑張ろうと思います。
取り組み方に悩んでいて、
- チームを組むとモチベーションが上がるタイプなのでチームで取り組む
- 1つのコンペに2ヶ月は長いので1コンペ1ヶ月のように少し短めで数多くこなす
- チームで1ヶ月チャレンジ
んー・・・・なにか持論ある方、チーム組んでくださる方いたら連絡ください。
謝辞
今回声をかけていただいてチームを組むことになりました。この場を借りて、ありがとうございます。 期間中はたくさんの考察や分析を共有してもらい勉強になりました。必死についていこうとしたものの理解に至らなかったものも...自分からなかなか考察/分析を提供できなかったことにはやはり力不足を感じたので今後の課題とします。もしまた機会があったらチームで取り組めたらなと思っております。以上。