見出し画像

【#025】Enyaのデータサイエンス挑戦記 : 「精度改善のコツ」

2025/1/18(土)


はじめに

こんにちは、Enyaです!
現在、2つの分析コンペに引き続き取り組んでいます。この1週間では、ベースラインを再作成し、モデルの精度改善に注力しました。今回は、それぞれのコンペの進捗状況と採用した施策について詳しくお話しします。

分析コンペの進捗状況

現在のスコアと順位

「CIBMTR - Equity in post-HCT Survival Predictions」

このコンペでは、同種造血幹細胞移植(HCT)を受ける患者の移植後の生存率を予測するモデルを開発しています。患者の背景に関係なく、公平な医療支援が実現できるような予測精度の向上が目標です。

目標:0.689以上 順位:156位以上 ※銅メダル圏内が目標

  • 評価指標:Stratified Concordance Index

  • スコア:0.678 ※ベースライン 0.577から改善

  • 順位:915位 / 1563人 ※再試行中のスコア

  • 締切:2025年3月5日(日本時間3月6日午前8:59)

「Porto Seguro’s Safe Driver Prediction」

Porto Seguro’s Safe Driver Predictionは、Kaggleが開催したコンペティションで、自動車保険会社のPorto Seguroが提供するデータを用いて、安全運転者(保険請求リスクが低い顧客)を予測するタスクです。目標は、保険請求のリスクが低い顧客を正確に識別し、保険会社が効率的なリスク管理や価格設定を行えるようにすることです。

目標:0.28995以上 順位:515位以上 ※銅メダル圏内が目標

  • 評価指標:Normalized Gini Coefficient

  • スコア:0.28890 ※ベースライン 0.13496から改善

  • 順位:1511位 / 5156人 ※再試行中のスコア

  • 締切:なし(過去コンペ)

精度改善の進め方

「Porto Seguro’s Safe Driver Prediction」での取り組みについて、ベースラインからスコアを改善する過程で実施した主な施策を振り返ります。

1. 特徴量の追加

データセットの情報を最大限に活用するため、以下の特徴量を段階的に追加しました。ベースラインとしては ps-reg-01~03 の3つの特徴量をそのまま使用しています。

  • ps-ind系列の特徴量(01~18):ベースラインから0.11382のスコア向上

  • ps-car系列の特徴量(01~15):さらに0.03519の向上

  • ps-calc系列の特徴量(01~20):マイナスの影響があったため削除

特徴量の追加は、仮説を立てた上で精度改善が見込めそうなものを一つずつ試すのが理想的です。今回は過去コンペであるため、「ps-calc系列の特徴量が寄与しない」というディスカッションの情報を参考にしました。その結果、実際にスコアが下がることを確認し、削除する判断をしました。

2. ハイパーパラメータの調整(LightGBM)

モデルの学習過程を最適化するため、以下の調整を実施しました。

  • 学習率(learning_rate):0.10から始め、複数の値を試行。

  • colsample_bytree, subsample:0.9から0.8への変更が効果的。

  • 正則化項(reg_alpha, reg_lambda):0.0から1.0への変更で改善。

ハイパーパラメータの調整は基本的に手動で行っています。まずは学習率を調整し、次に過学習を抑えるためにデータのサンプリング割合や正則化項を調整します。Optunaなどの最適化ツールを利用することもありますが、最適化には時間がかかるため、通常はコンペ終盤に試します。

3. カテゴリデータのエンコーディング

カテゴリ変数に対してOne-Hot Encodingを適用しました。ただし、すべてのカテゴリ変数がスコア改善に寄与するわけではなく、逆に悪影響を与えるケースもありました。そのため、効果の高い特徴量のみを採用しました。

施策とスコアの履歴

以下は、施策ごとのスコア履歴をまとめた表です:

$$
\begin{array}{|c|l|r|r|} \hline \textbf{No.} & \textbf{精度改善の施策} & \textbf{Privateスコア} & \textbf{差分} \\ \hline
1 & ベースライン\,ps\text{-}reg\text{-}01\sim03 & 0.13496 & - \\ \hline 2 & 特徴量追加\,ps\text{-}ind\text{-}01\sim18 & 0.24878 & 0.11382 \\ \hline 3 & 特徴量追加\,ps\text{-}car\text{-}01\sim15 & 0.28397 & 0.03519 \\ \hline 4 & 特徴量追加\,ps\text{-}calc\text{-}01\sim20 & 0.28061 & -0.00336 \\ \hline 5 & ハイパラ調整\,learning\_rate\,0.10\Rightarrow0.05 & 0.28644 & 0.00247 \\ \hline 6 & ハイパラ調整\,learning\_rate:0.05\Rightarrow0.01 & 0.28568 & -0.00076 \\ \hline 7 & ハイパラ調整\,learning\_rate:0.01\Rightarrow0.03 & 0.28603 & -0.00041 \\ \hline 8 & ハイパラ調整\,colsample\_bytree,\,subsample\,0.9\Rightarrow0.8 & 0.28662 & 0.00018 \\ \hline 9 & ハイパラ調整\,reg\_alpha,\,reg\_lambda\,0.0\Rightarrow1.0 & 0.28802 & 0.00140 \\ \hline 10 & ハイパラ調整\,min\_child\_samples\,20\Rightarrow100 & 0.28792 & -0.00010 \\ \hline 11 & ハイパラ調整\,max\_bin\,256\Rightarrow127 & 0.28842 & 0.00040 \\ \hline 12 & ハイパラ調整\,max\_bin\,127\Rightarrow63 & 0.28788 & -0.00054 \\ \hline 13 & One\,Hot\,Encoding\,ps\_ind\_02\_cat & 0.28778 & -0.00064 \\ \hline 14 & One\,Hot\,Encoding\,ps\_ind\_04\_cat & 0.28843 & 0.00001 \\ \hline 15 & One\,Hot\,Encoding\,ps\_ind\_05\_cat & 0.28857 & 0.00014 \\ \hline 16 & One\,Hot\,Encoding\,ps\_car\_01\_cat & 0.28823 & -0.00034 \\ \hline 17 & One\,Hot\,Encoding\,ps\_car\_02\_cat & 0.28821 & -0.00036 \\ \hline 18 & One\,Hot\,Encoding\,ps\_car\_03\_cat & 0.28807 & -0.00050 \\ \hline 19 & One\,Hot\,Encoding\,ps\_car\_04\_cat & 0.28843 & -0.00014 \\ \hline 20 & One\,Hot\,Encoding\,ps\_car\_05\_cat & 0.28843 & -0.00014 \\ \hline 21 & One\,Hot\,Encoding\,ps\_car\_06\_cat & 0.28890 & 0.00033 \\ \hline 22 & One\,Hot\,Encoding\,ps\_car\_07\_cat & 0.28828 & -0.00062 \\ \hline 23 & One\,Hot\,Encoding\,ps\_car\_08\_cat & 0.28862 & -0.00028 \\ \hline 24 & One\,Hot\,Encoding\,ps\_car\_09\_cat & 0.28752 & -0.00138 \\ \hline 25 & One\,Hot\,Encoding\,ps\_car\_10\_cat & 0.28795 & -0.00095 \\ \hline 26 & One\,Hot\,Encoding\,ps\_car\_11\_cat & 0.28849 & -0.00041 \\ \hline 27 & ハイパラ調整\,min\_child\_samples\,20\Rightarrow10 & 0.28858 & -0.00032 \\ \hline
\end{array}
$$

このように、スコアは試行錯誤を繰り返す中で徐々に改善しています。現時点で最も良いスコアは、No.21の施策を実施した時の 0.28890 です。目標との差はわずか0.001程度ですが、この小さな差の中に1000人以上の参加者がいるため、メダル獲得の難易度は非常に高いと感じています。

最後に

今回の取り組みでは、過去の情報や試行錯誤を通じてスコアを着実に改善していくことができました。わずかな差でも大きく順位を上げることが出来るので、とにかく数多くの施策を試すことが重要です。開催中の移植生存率を予測するコンペはかなり苦戦していますが、まだ1ヵ月以上時間があるのでやれる限りのことを試していこうと思います。







いいなと思ったら応援しよう!