金融機関顧客のデフォルト率を予測する機械学習モデル(Pythonコード)

OVERVIEW

Pythonで機械学習モデルを実装し、金融機関顧客のデフォルト率を予測した。 (https://drive.google.com/drive/folders/1WqlB8W864mG3ZtnrDTtWWUHJdGQJ2V1Z?usp=sharing)

YEAR 2023


GCI 2023 Summer内でのKaggle式コンペ課題。

金融機関顧客のデータセットを用いて、顧客のデフォルト確率を機械学習により予測するという内容。

2千人以上の受講生同士で予測精度を競い合い、3位の成績となった。

とりわけ、特徴量エンジニアリングと特徴量の絞り込みに注力した。


制作期間:1ヶ月(2023年6月〜2023年7月)

制作人数:2人(それぞれが機械学習モデルを作成し、アンサンブルを行った)

データセットとPythonコード(Google Driveで開きます。)

開発環境/ライブラリ

  • Jupyter Notebook

  • Python3

  • ライブラリ:Numpy / Pandas / scikit-learn / Optunaなど

データセット

金融機関顧客データ:約23万人分(学習データ+テストデータ)

顧客データには、年齢・性別・借入額などの特徴量が50含まれている。

ターゲット変数は”TARGET”で、それぞれの顧客が債務不履行になる確率(デフォルト率)を予測した。

プロセス

特徴量作成は、ドメイン知識からなどの手動で作成した特徴量と、量的データ同士を四則演算した特徴量。

特徴量選択は以下の特徴量重要度(Importance)と、ラッパー法により絞り込みを行った。

・LightGBMでのImportance

・SHAPでのImportance

・上記2つのNull Importance(ターゲット変数をランダムにシャッフルしてImportanceを算出したもの)

機械学習モデルは、欠損値が多いことから勾配ブースティング決定木モデルを採用することし、XGBoost、CatBoostと比較を行いながら最終的にLightGBMを選択した。

モデルのハイパーパラメータは、アーリーストッピングとOptunaにより決定した。

結果

Public Score:0.76917(AUC)・1位

※テストデータの7割で評価

Private Sore:0.76159(AUC)・3位

※テストデータの10割で評価

反省点・改善点

  • Forward Selectionを実際的な手法で行えなかった点

    →欠損値処理を行い、線形モデルでForward Selectionを実行するのが実際的か

  • Valid Score, Public Score, Private Scoreに乖離が生じた点

    →複数の評価指標で評価、複数seedでのKfoldのScoreで評価、アンサンブル学習など

  •  アンサンブルの仮説・検証を十分に行えなかった点

    前提としてアンサンブルの技術的ハードルが高く、時間も不足していた

    残り提出回数に限りがあり、最良のものを提出できなかった

    アンサンブルモデルの評価をPublic Score以外で行えなかった

    スタッキングを試すことが出来なかった

WEBSITE