はじめに
こんにちは、Xイノベーション本部 AITCの鴨谷です。
私はAITCのコンサルティングチームに所属しており、日々データ分析や機械学習モデルの開発に取り組んでいます。
今回は、AITCのチームで参加したKaggleのHome Credit-Credit Risk Model Stabilityコンペ(https://www.kaggle.com/competitions/home-credit-credit-risk-model-stability) についてお話しします。2024年4月から6月にかけて行われたこのコンペで、私たちのチームは81位に入り、銀メダルを獲得しました。
この記事では、そのコンペでの私たちの取り組みや結果について紹介します。
メンバー
- 阿田木(Kaggle Master)
- 久木宮(Kaggle Expert)
- 松清
- 鴨谷
コンペの概要
このコンペの目標は、どのローン申込者がローンの返済を滞納する可能性が高いかを予測することです。
対象データは、各ローン申込者に関する内部情報および外部情報のCSVデータです。
金融ドメインにおいて、主催者は単純な予測精度だけでなく、予測モデルが時間を経ても安定しているかどうかにも重きを置いており、評価にはAUCに加えてテストセット全体での予測モデルの精度の安定性も考慮するカスタムメトリックが採用されています。
特に、第3項の0.5*std(residuals) が重要であり、各週(WEEK_NUM)ごとのスコアを安定させ、スコアが減点されないようなアプローチを考える必要がありました。
チームのアプローチ
今回の「Home Credit - Credit Risk Model Stability」コンペでは、我々のチームは二つのアプローチを軸に取り組みました。それは、「債務不履行分類モデル」と「Adversarialモデル」です。
債務不履行分類モデル
まず、純粋にコンペの趣旨に沿ったアプローチとして、「債務不履行分類モデル」を構築しました。このモデルは、債務不履行の有無(目的変数)を2値分類するための分類器を学習させるもので、以下のようなプロセスを経て作成されました。 - データの前処理:欠損値が多い特徴量の削除、カテゴリ変数のエンコーディング、特徴量エンジニアリングを実施しました。 - モデル選定:LightGBM、XGBoost、CatBoostといった勾配ブースティングモデルを試行し、性能を比較しました。 - 評価:AUC(曲線下面積)を主な評価指標として用い、交差検証によりモデルの安定性を確認しました。CVとLBが相関しなかったため、LBのスコア上昇をベースに検証を進めました。
最終的に、以下のモデルをアンサンブルして債務不履行分類モデルを構築しました:
- LightGBM × 13
- CatBoost × 6
- XGBoost × 1
このアンサンブル手法により、我々は債務不履行のリスクを高精度で予測できるモデルを構築することに成功しました。
Adversarialモデル
次に、我々は「Adversarialモデル」というアプローチを採用しました。このアプローチは、短期的な予想精度を悪化させることで、評価指標におけるペナルティ項の影響を緩和し、期間全体的なモデルのバランスを改善させることを目的としています。具体的には、以下のような手法を用いました。
- トレインとテストの分離:トレインデータを0、テストデータを1とラベル付けし、モデルを学習させ、トレインとテストを分離するモデルを作成しました。
- データの識別:このモデルを用いて、閾値0.97以下(トレインに近いデータがより直近のデータ)のスコアを持つデータを識別しました。
- スコア調整:識別されたデータのスコアを意図的に悪化させることで、ペナルティ項の影響を緩和し、全体的な評価スコアを向上させました。
このアプローチにより、短期的な予測精度は一時的に低下するものの、全体的なモデルのバランスを改善し、最終的な評価スコアを向上させることができました。
上位ソリューションとの差分
ここでは、このコンペで上位入賞した参加者のソリューションを紹介します。代表して1位のyuunieeさんのソリューション(https://www.kaggle.com/competitions/home-credit-credit-risk-model-stability/discussion/508337) を紹介します。
1st Solution
Phase 1 - Machine Learning
こちらは我々の「債務不履行分類モデル」と同様に、債務不履行の有無(目的変数)を2値分類するための分類器を学習させるアプローチです。
精度は我々と比較してかなり高く、Phase 1のみで公開LB上位の性能が出ているようです。
以下のようなプロセスを経て作成されています。
- CV戦略:
- StratifiedGroupKFoldを使用。CVの違い(0.001〜0.005)はLBとの相関が低かったが、0.01以上の違いは高い相関があった。
- 特徴量エンジニアリング:
- Max、Min、Avg、Var、First、Last、Max-Min Differenceなどの基本的な統計量を利用。
- モデル選定:
- LGBM、CatBoost、DNN(LightAutoMLライブラリ使用)を試行。CatBoostが最も優れている。
- LGBMはCatBoostに比べてやや劣るものの、アンサンブルには有用。
- DNNはDenselightモデルを使用し、シンプルなモデルがデータの性質に対して適している。
Phase 2 - Metric Hack
こちらは我々のアプローチとは異なり、既存のWEEK_NUMとの相関の高い特徴量を用いて、隠されたテストデータのWEEK_NUMを推定し、スコアを補正するアプローチです。
- データの識別:
- date_decisionとmin_refreshdate_3813885Dの差異がWEEK_NUMと高い相関(0.9以上)を持っていることに着目し、テストデータの未知のWEEK_NUMの代わりとして用いることでデータを識別。
- スコア調整:
- DEVIDE=1/2、REDUCE=0.03の値を用いてスコアを調整。これにより、短期的な予測精度を悪化させつつ、長期的な予測精度を改善した。
その他の上位ソリューション
結果と反省
今回のコンペの結果は、Public 18位/Private 81位でした。
- DEVIDE=1/2、REDUCE=0.03の値を用いてスコアを調整。これにより、短期的な予測精度を悪化させつつ、長期的な予測精度を改善した。
Public LBではスコアの上昇に追いつき、金メダル一歩手前(金圏は17位)まで行くことができましたが、最終的にPrivate LBで順位を落としてしまう結果となりました。
しかし、Publicで金メダル圏内からPrivateでメダル圏外に落ちてしまったチームも多くいる中、そこまで大きく順位を落とさず、銀メダルを獲得できたのは大きな成果であり、私たちのチームが安定したモデルを構築できていたことの証だと思っています。
おわりに
今回のコンペは非常に学びの多い経験となりました。 チームとしても個人としても、多くの技術的な課題に直面し、それを乗り越えることで成長することができました。
今後も技術力向上を目指し、コンペに参加する予定です。AITCは常に新しい挑戦を続け、より良いソリューションの提供に努めています。次のコンペでもチーム一丸となり、メダル獲得を目指します。
私たちのチームと一緒に働いてくれる仲間を募集しています。興味がある方はぜひご連絡ください。
電通総研 AIトランスフォーメーションセンター 採用情報ページ執筆:鴨谷 嘉人 (@yoshito_kamotani)、レビュー:@yamada.y
(Shodoで執筆されました)