ARISE Kaggle部活動記 #6

Kaggle部

ARISE analytics Kaggle部の越智です。

昨年度SIGNATEにて開催された第1回金融データ活用チャレンジに参加し金メダル(4位/1658人)を獲得することができました。そこで今回は、このコンペの取り組み内容、解法の解説を行いたいと思います。

最終リーダーボード

コンペ概要

コンペの目的

まずは今回のコンペの概要について説明します。

本コンペは、住宅ローン契約者が3ヶ月後に2ヶ月以上連続で延滞をするかどうかを予測するコンペです。具体的には、基準月をN月とした場合にN+3ヶ月時点で延滞しており、かつN+4ヶ月以降も連続で延滞する会員(target_flg=1)を予測します。例えば、以下のようにN月を2022年8月とすると11月時点で延滞かつ12月も延滞するかどうかを予測します。

データセット

次に与えられたデータセットについて説明します。

訓練データ、テストデータともにテーブルデータであり、顧客属性、入出金額や預金残高などの銀行の口座情報を説明変数として計46個持っています。訓練データのみ目的変数として3ヶ月後に2か月以上延滞するか否かを判別するフラグが付与されています。データは人×基準年月でユニークになっていて約2年分あります。

1度でも2ヶ月以上連続で延滞した会員(target_flg=1)はそれ以降のデータにはtrain、testデータ共に出現しない仕様になっているため、訓練データ内において延滞者は延滞月まで、非延滞者は全員2022年10月*までのデータがあります。

一方テストデータには訓練データにおける延滞者は出現せず、全員訓練データの最新基準年月の1ヶ月先である2022年11月*までのデータがあります。

訓練データのイメージ(値はダミー値)

訓練データ、テストデータの基準年月のイメージ

*コンペ終了後はデータを見返せないため、実際の年月日は失念してしまいました。便宜上のわかりやすさのため具体的な年月で説明していますが実際の年月日とは異なっています。

評価関数

精度評価にはAUC(Area Under the Curve)が指定されました。評価値は0~1の値をとり、精度が高いほど大きな値となります。

運営側がチュートリアルとして用意してくださったnotebookのモデルでは、既にAUC0.90と精度が高く小数点3,4桁の勝負となりました。

解法

続いて、解法を説明します。

データの整形

先ほど述べたように、訓練データにおいて延滞なし会員(target_flg=0)のデータは直近の2022年10月まで含まれる一方、延滞した会員(target_flg=1)のデータは延滞年月日より後はありません。

このままモデルにインプットしてしまうと、2022年10月のデータはほぼ全て延滞無しと判定するモデルができてしまいます。

そこで、延滞なし会員のデータから直近1-24ヶ月のデータをランダムに削除しました。

データ削除イメージ

これで正解/不正解データの年月日の偏りを凡そ無くすことができました。

特徴量の追加

与えられた説明変数から新たに特徴量を作成しました。以下に一部を示します。「」は予め与えられていた説明変数です。

・「住宅ローン貸出日」からの経過日数
・「住宅ローン貸出金額」の総額のうち、どれだけ「住宅ローン貸出残高」が残っているかの割合
・「住宅ローン月々返済額」が0になったことがあるかどうか
・「カードローン延滞フラグ」が半年の間で1になったことがあるかどうか
・「ATM入金金額」と「ATM出金金額」との差分
・「振込入金金額」と「振込出金金額」との差分
・「口座入金金額」と「口座出金金額」との差分

また、支払いを延滞するかどうかは直近の口座の状況も影響するのではと考え、同じ会員IDの過去の年月日のデータを用いて特徴量を作成しました。

・1/3/6/12/24ヶ月前と現在の「住宅ローン貸出残高」の差分
・1/3/6/12/24ヶ月前と現在の「カードローン貸出残高」の差分
・1/3/6/12/24ヶ月前と現在の「カードローン月々返済額」の差分
・1/3/6/12/24ヶ月前と現在の「カードローン月々返済額」の差分
・数値型の説明変数の直近1/3/6/12/24ヶ月の最小値、最大値、平均値、中央値、標準偏差

スタッキング

6種類のモデルで訓練データ学習をさせて、そのモデルで推定したスコアを特徴量として追加しました。始めはLightGBMのみでしたが、追加するごとに精度が向上していったため、最終的にCatboost、Xgboost、ロジスティック回帰、ナイーブベイズ、Adaboostも用いてスコア特徴量を作成しました。

また全ての特徴量を余すことなく利用したかったため、6種類のモデルにインプットする特徴量は全特徴量からランダムに30、50、100、300個抽出しました。これを各複数個作成し計265個のスコアの特徴量を作ることができました。

本解法においてスタッキングは精度向上に大いに貢献しました。スタッキングは訓練データとテストデータの分布が似ている場合に良い精度が出せるようなので、今回のデータもそのような分布だったと推測します。

精度

上記のモデルの最終スコアは0.99383となりました。

モデルの変数重要度の上位は殆どがスタッキングによるスコア特徴量となっています。スタッキングによるスコア特徴量が入力に含まれないスタッキング用モデルでは「口座開設年月」や「直近24ヶ月の特徴量の平均」など時系列の特徴が上位に来ていました。予想通り、住宅ローンを延滞するかどうかは直近の口座の状況が大きく影響するようです。

終わりに

今回は金メダルを獲得した第1回金融データ活用チャレンジの解法について紹介しました。

シンプルなデータだったため、Kaggle入門書を元にモデルを改良するとスコアがどんどん伸びていき楽しくコンペに参加できました。また、丁寧なチュートリアルやDatabricksの実行環境、情報交換用のslackが用意されていて、初学者に親切なコンペだった印象です。

ARISE analyticsでは、Kaggle等の分析コンペティションで上位成績を残すと、インセンティブとして報奨がもらえるARISE Tech Master制度があるので引き続き金メダルを目指し、努力していきたいです。

分析はチームワークが大事です。役割を決めお互いの強みを持ち合うことで、一人で行うより何倍も効率的に分析課題に取り組めます。我々と一緒にKaggle部を盛り上げてくださる方はこちらのページからご連絡お待ちしております。