データサイエンティストの田村です。Kaggleで2023年5月に終了した「AMP®-Parkinson's Disease Progression Prediction」において参加1,805チーム中3位となり、ソロ金を獲得できました。私自身はまだまだKaggle初心者ではありますが、本記事ではコンペティションの概要と解法について振り返りたいと思います。
コンペティションの概要
1) 目的
このコンペティションは、パーキンソン病の進行度を予測することを目的としていました。具体的には、パーキンソン病患者から採取された、タンパク質とペプチドのデータ測定値を使用して、病気の進行度を予測します。ここでいう進行度には「MDS-UPDRスコア」と呼ばれる医師の診断による測定値が使用されます。このスコアには異なる視点から1~4の4種類があり、この4種類で症状の包括的な評価が行われます。なおパーキンソン病は現代でも治療の難しい病気の一つであるとのことで、コンペティションのOverviewには以下のように書かれていました。
パーキンソン病は、運動、認知、睡眠、その他の正常な機能に影響を及ぼす障害で、現在のところ治療法はありません。2037年までには、アメリカで160万人がパーキンソン病を持つと推定されており、経済的なコストは800億ドルに迫るとされています。タンパク質やペプチドの異常がこの病気の発症と悪化に重要な役割を果たしているとの研究結果があり、これをより深く理解することで、病気の進行を遅らせるか治療するための新たな薬物療法の開発につながる重要な手がかりを提供する可能性があります。
2) 評価指標
評価指標は、「SMAPE + 1」でした。Descriptionの評価指標は「SMAPE」となっていますが、真値が0の場合にスコアの暴れが大きくなることから、コンペティションの途中で「SMAPE + 1」に変更されたようです。ちなみに、私がこのコンペティションに参加したのはちょうど評価指標が変更された直後のタイミングでした。
3) 時系列API
また、このコンペティションでは、Kaggleの「時系列API」を使用して提出する必要がありました。時系列APIですのでtestデータは開示されておらず、所定のAPIを介して古いデータから順番に都度データを受け取り予測をする形になります。
解法について
1) leakの存在
まずはじめに、今回のコンペティションは、重要なleakがあり、それを見つけられたかどうかでスコアが大きく違っています。具体的には患者がUPDRスコアを測定した間隔であり、これが6カ月以下の場合は重症の患者であり、12カ月以上の場合は軽症の患者です。私がこのleakに気付いたのは締切40日前の4月8日で、この時点でLB1位になり、興奮のあまり同僚に「完全に理解した。。」と午前2時にSlackを送っていました。(迷惑。。)
2) グループ化
leakを踏まえて、重症患者と軽症患者とでモデルを分割しました。trainデータでは重症患者が全体の約8割で、軽症患者が約2割であったため、特に重症患者に力点を置いて、モデルを構築していきました。
3) 線形重回帰
データ量の少ないテーブルデータのコンペということもあり、leakに気付いてからしばらくの間はLightGBMでスコアを伸ばそうとしていました。しかし、LightGBMのアプローチでは、CVは改善するもののLBが伸びませんでした。その後、LBで2位に落ち、LightGBMよりも線形重回帰の方がCVとLBを含めて安定的な予測ができていたことから、途中からはモデルを線形重回帰に絞って特徴量とパラメータを探索していきました。
4) LBの分布推定と最適パラメータの導出
このコンペティションはデータ量が少ないこともあり、CVとLBとの間に乖離が見られました。そこで、パラメータを少しずつ変えながらLBスコアの変動を確認し、LBの分布をできるだけ細かく推定するようにしました。推定したLBの分布とCVを踏まえ、LBとCVがバランスよく最適となる特徴量とパラメータを導出しました。最終的には重症患者グループが9つの特徴量、軽症患者グループが1つの特徴量を持つ線形重回帰モデルが最適解であると考え、最終Subは、この線形重回帰のパラメータ違いで、CVを重視したもの、LBを重視したもの2つを選択しました。(結果としては、どちらも3位相当のスコアでした。)データ量が十分なコンペティションではこのような手法は意味が薄い(LBに囚われる必要なく、Trust CVが有効)と思いますが、今回のようなデータ量の少ないコンペの場合は、CVとPrivateの分布に乖離が生まれる可能性も高く、CVだけでなくLBの分布を推定する取り組みも有効なのだと思いました。
5) 最終モデルの概要
重症患者(Group B)と軽症患者(Group A)で処理を分け、それぞれ重回帰モデルを通して最終的な予測値を算出しています。
重症患者(Group B)の特徴量と回帰係数(UPDRスコア4の回帰係数は全て0)
特徴量名 | 回帰係数(UPDRスコア1) | 回帰係数(UPDRスコア2) | 回帰係数(UPDRスコア3) |
---|---|---|---|
feat1:6カ月目ペプチド未採取 | 0 | -1 | -2 |
feat2:6カ月目ペプチド採取、12カ月目未採取 | 0 | -1 | 0 |
feat3:6カ月目ペプチド採取 | 0 | +1 | +2 |
feat4:6カ月目ペプチド採取、12カ月目採取 | 0 | 0 | +1 |
feat5:6カ月目ペプチド未採取、18か月目採取 | -1 | -1 | -8 |
feat6:"Uniport"のユニーク数が少ない(下位2割) | 0 | +1 | +1 |
feat7:"Uniport"のユニーク数が少ない(下位1割) | +1 | +1 | +2 |
feat8:"Uniport"のユニーク数が多く、ペプチドの変動が大きい(上位2割) | 0 | 0 | -1 |
feat9:"Uniport"のユニーク数が多く、ペプチドの変動が大きい(上位1割) | 0 | -1 | -1 |
重症患者(Group B)の切片
軽症患者(Group A)の特徴量と回帰係数(UPDRスコア2~4の回帰係数は全て0)
特徴量名 | 回帰係数(UPDRスコア1) |
---|---|
feat7-2:"Uniport"のユニーク数が少ない(下位1割) | +1 |
軽症患者(Group A)の切片
他チームの解法について
上位チームの解法にはいくつかの種類があり、1位のdott/Konstantin YakovlevチームはLGBMとNNのアンサンブル、2位のEthan/Rib~/hydチームと4位のChris Deotte氏はMLPモデル、3位の私と5位のAmbrosM氏は線形重回帰モデルで解いていました。単純なテーブルデータのコンペティションでも、様々なアプローチがあり、自身も手法の引き出しを増やさなければならないと感じました。
コンペティションへの取り組み方について
今回のコンペティションの勝因は、序盤でleakに辿り着いた点です。当然、時間が経てば他の人もleakに気付いてくるでしょうし、他の人が気付くまでの間、いかに差を広げられるかが重要だと思っていました。KaggleでLB上位で戦えることは、本当に滅多にないことですので、leakに気付いたアドバンテージを生かし、残り40日、約200subあるので、1つ1つの実験を全て使い切り、最後までベストを尽くそうと考えました。その後40日間、毎日ドキドキしながら必ず5subを使い切り、実験をひたすら繰り返しました。ソロで305subしたのは恐らく私が最多だったと思います。僅かでもスコアを上げられるよう、懸命にもがいた結果、最後は幸運にも恵まれました。
おわりに
NRI社内の多くのKagglerの方にKaggleの楽しさを教えて頂き、学び、刺激を受けながら、今回ソロ金を獲得することができました。またTwitter等でも、著名なKagglerの皆様の書き込みを見て、いつも有益な知見を得られています。Kaggleに理解のある上司や同僚にも恵まれました。周りのたくさんの方々に、本当に感謝しています。まだまだ学ばなければならないことはたくさんありますが、引き続きコンペに参加して、研鑽を深め、実業務にもフィードバックしていきたいと思っています。