Menu
CoddyTech

信用审批

本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 56 课,共 58 课。

一家合作银行发行了一种购物卡。在 cards.csv 中,320 名持卡人中有 79 人在第一年未能按时还款:

241 名按时还款的持卡人的债务比率密度直方图,大多在 0.1 到 0.35 之间;79 名未能按时还款的持卡人的债务比率向右偏移,集中在 0.3 到 0.8 之间,两者有很大的重叠

债务信息会有帮助,但各组之间存在重叠。银行会评估每位申请人的风险,并将风险高于阈值的申请人交由人工审核。

它的规则是:捕获一定比例的未来逾期付款者。在验证行上选择阈值,然后只在测试行上评估一次。

challenge icon

挑战

困难

程序会读取银行希望达到的召回率 target。起始代码列出了各列和按从高到低排列的 thresholds。

  1. 先分层划分出四分之一作为测试集,再从剩余数据中分层划分出四分之一作为验证集,两次划分都使用 random_state=0。
  2. 在剩余的训练数据行上拟合一个流水线:用中位数填充缺失值并对数值进行标准化,对 home 进行独热编码,再进行逻辑回归。
  3. 在验证集上,选择召回率达到 target 的第一个阈值。
  4. 打印这个阈值,然后打印测试集在该阈值下的表现,如下所示(保留 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]

# 在下面编写代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

监督学习中的所有课

自己练习: Python 在线编译器