機械学習によるクレジットスコアリング

クレジットスコアは、人々の信用度を測定する数値表現です。銀行は通常、クレジット申請に関する意思決定をサポートする方法としてそれを利用します。このブログでは、Python(Pandas、Sklearn)で標準スコアカードを開発する方法について説明します。これは、顧客の信用度を測定するための最も一般的で最も簡単なクレジットスコアリングフォームです。

プロジェクトの動機

今日では、信用度は個人にとってどれほど信頼できるかの指標とみなされているため、誰にとっても非常に重要です。さまざまな状況で、サービスサプライヤはまず顧客の信用履歴を評価してから、サービスを提供するかどうかを決定する必要があります。ただし、個人のポートフォリオ全体を確認し、クレジットレポートを手動で生成するのは時間がかかります。したがって、クレジットスコアは時間を節約し、簡単に理解できるため、この目的のために開発および適用されます。

クレジットスコアを生成するプロセスは、クレジットスコアリングと呼ばれます。多くの業界、特に銀行業界で広く適用されています。銀行は通常、これを使用して、誰が信用を得るべきか、どのくらいの信用を受け取るべきか、および信用リスクを減らすためにどの運用戦略を取ることができるかを決定します。通常、これには2つの主要部分が含まれます。

  • 統計モデルの構築
  • 統計モデルを適用して、クレジットアプリケーションまたは既存のクレジットアカウントにスコアを割り当てる

ここでは、スコアカードと呼ばれる最も人気のあるクレジットスコアリング方法を紹介します。スコアカードがクレジットスコアリングの最も一般的な形式である理由は2つあります。まず、クライアントなど、関連する経歴や経験のない人には簡単に解釈できます。第二に、スコアカードの開発プロセスは標準的なものであり、広く理解されているため、企業はあまりお金をかける必要がありません。サンプルのスコアカードを以下に示します。使用方法については後で説明します。

図-1スコアカードの例

データ探索と機能エンジニアリング

次に、スコアカードの開発方法について詳細を説明します。ここで使用したデータセットは、Kaggleコンペティションのものです。詳細情報は図-2にリストされています。最初の変数は、バイナリカテゴリ変数であるターゲット変数です。そして、残りの変数は機能です。

図-2データ辞書

データセットについての洞察を得た後、機能エンジニアリング手法をいくつか適用し始めました。まず、各フィーチャに欠損値が含まれているかどうかを確認し、次に欠損値に中央値を代入します。

次に、外れ値の処理を行います。一般に、外れ値に使用される方法は、外れ値のタイプによって異なります。たとえば、外れ値が測定中の機械的エラーまたは問題によるものである場合、欠損値として扱うことができます。このデータセットには、非常に大きな値がいくつかありますが、それらはすべて妥当な値です。したがって、私はそれらに対処するためにトップとボトムのコーディングを適用します。図3では、トップコーディングを適用した後、機能の分布がより正常になっていることがわかります。

図-3トップコーディングによる外れ値の処理

図1に示すサンプルスコアカードによると、各機能をさまざまな属性(またはグループ)にグループ化する必要があることは明らかです。機能をグループ化する理由はいくつかあります。

  • 機能とパフォーマンスの関係属性に関する洞察を得ます。
  • 非線形依存関係に線形モデルを適用します。
  • ポートフォリオ管理のためのより優れた戦略の開発に役立つ、リスク予測因子の動作をより深く理解します。

ビニングは、この目的に使用される適切な方法です。処理後、各値を本来あるべき属性に割り当てます。これは、すべての数値がカテゴリーに変換されることも意味します。ビニングの結果の例を次に示します。

図-4ビニングを使用したグループ化機能「年齢」

すべての機能をグループ化した後、機能エンジニアリングは完了しました。次のステップでは、各属性の証拠の重みと、各特性(または機能)の情報値を計算します。前述のとおり、ビニングを使用してすべての数値をカテゴリに変換しました。ただし、モデルをこれらのカテゴリ値に適合させることはできないため、これらのグループにいくつかの数値を割り当てる必要があります。証拠の重み(WoE)の目的は、カテゴリ変数の各グループに一意の値を割り当てることです。情報値(IV)は、特徴の予測力を測定し、特徴の選択に使用されます。 WoEとIVの式を以下に示します。ここで、「良い」とは、顧客が深刻な非行を持たないこと、またはターゲット変数が0であることを意味し、「悪い」とは、顧客が深刻な非行またはターゲット変数が1であることを意味します。

通常、特性分析レポートはWoEおよびIVを取得するために作成されます。ここで、Pythonで関数を定義して、レポートを自動的に生成します。例として、「年齢」の特性分析レポートを図-5に示します。

図-5「年齢」の特性分析レポート

次に、すべての機能のIVを比較するために棒グラフを作成します。棒グラフでは、最後の2つの機能「NumberOfOpenCreditLinesAndLoans」と「NumberRealEstateLoansOrLines」のIVがかなり低いことがわかります。ここでは、モデルフィッティングに他の8つの機能を選択します。

図-6各特性の予測力

モデルのあてはめとスコアカードポイントの計算

機能を選択した後、属性を対応するWoEに置き換えます。これまで、モデルトレーニングに適切なデータセットを取得しました。スコアカードの開発に使用されるモデルは、ロジスティック回帰です。これは、バイナリ分類の一般的なモデルです。クロス検証とグリッド検索を適用して、パラメーターを調整します。次に、テストデータセットを使用して、モデルの予測精度を確認します。 Kaggleはターゲット変数の値を提供しないため、結果をオンラインで送信して精度を取得する必要があります。データ処理の効果を示すために、生データと処理されたデータでモデルをトレーニングします。 Kaggleの結果に基づいて、データ処理後の精度は0.693956から0.800946に改善されました。

最後の手順では、各属性のスコアカードポイントを計算し、最終的なスコアカードを作成します。各属性のスコアは、次の式で計算できます。

スコア=(β×WoE +α/ n)×ファクター+オフセット/ n

どこ:
β—指定された属性を含む特性のロジスティック回帰係数
α—ロジスティック回帰切片
WoE —指定された属性のエビデンスの重み値
n —モデルに含まれる特性の数
係数、オフセット—スケーリングパラメーター

最初の4つのパラメータはすでに計算されており、前の部分です。次の式は、係数とオフセットの計算に使用されます。

  • 係数= pdo / Ln(2)
  • オフセット=スコア—(係数×ln(オッズ))

ここで、pdoはオッズを2倍にするポイントを意味し、不良率は上記の特性分析レポートですでに計算されています。スコアカードのベースオッズが600ポイントで50:1で、pdoが20(20ポイントごとに2倍になるオッズ)の場合、係数とオフセットは次のようになります。
係数= 20 / Ln(2)= 28.85
オフセット= 600- 28.85×Ln(50)= 487.14

すべての計算が完了すると、スコアカードの開発プロセスが完了します。スコアカードの一部を図-7に示します。

図-7特性の一部を含む最終スコアカード

新しい顧客が来たら、データに従って各特性で正しい属性を見つけてスコアを取得するだけです。最終的なクレジットスコアは、各特性のスコアの合計として計算できます。たとえば、銀行には、45歳、借金率0.5、月収5000ドルのクレジットカードの新しい申請者がいます。クレジットスコアは53 + 55 + 57 = 165である必要があります。

より正確なスコアカードを開発するには、通常、人々はより多くの状況を考慮する必要があります。たとえば、人口の中には「悪い」と特定された個人もいますが、その申請は承認されますが、辞退された「良い」人もいます。したがって、拒否推論は開発プロセスに関与することになっています。データに含まれていない拒否されたケースのデータセットが必要なため、この部分は行いません。この部分について詳しく知りたい場合は、Naeem Siddiqiが作成した「クレジットリスクスコアカード-インテリジェントなクレジットスコアリングの開発と実装」を読むことを強くお勧めします。

あなたが私の仕事に興味があるか、それについていくつかの問題がある場合は、私に連絡してください。それまでの間、WeCloudDataのデータサイエンスコースから学生が何を学ぶかについて詳しく知りたい場合は、次のWebサイトをご覧ください。

www.weclouddata.com