与信審査
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 56/58。
協同組合銀行がストアカードを運営しています。cards.csvでは、320人のカード保有者のうち79人が、初年度に支払いを滞納しました。
負債は役立ちますが、グループは重複しています。銀行は各申請者のリスクを評価し、しきい値を超えた人を審査担当者に回します。
そのルールは、将来の支払い遅延者の一定の割合を捉えることです。検証データの行でしきい値を選び、その後テストデータの行で一度だけ評価します。
チャレンジ
難しいプログラムは、銀行が求める再現率である target を読み取ります。用意されたコードには、列と降順の thresholds が一覧されています。
- 層化抽出でテスト用に4分の1を分け、残りからさらに層化抽出で検証用に4分の1を分けます。どちらも
random_state=0を指定します。 - 残った訓練用の行でパイプラインを学習させます。数値は中央値で補完してスケーリングし、
homeはワンホットエンコーディングし、ロジスティック回帰を行います。 - 検証データで、再現率が
targetに達する最初のしきい値を選びます。 - そのしきい値を出力し、続けてそのしきい値でのテストデータの結果を、以下のように出力します(小数点以下3桁)。
別の銀行で 0.7 の場合:
Threshold: 0.3 (validation recall 0.733)
Test: caught 15 of 21 late payers, 12 false alarms
Precision: 0.556自分で試してみよう
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import recall_score, precision_score, confusion_matrix
cards = pd.read_csv("cards.csv")
numbers = ["age", "income_k", "debt_ratio", "years_at_job", "late_payments", "card_limit_k"]
text = ["home"]
X = cards[numbers + text]
y = cards["fell_behind"]
target = float(input())
thresholds = [0.5, 0.45, 0.4, 0.35, 0.3, 0.25, 0.2, 0.15, 0.1]
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ