信用审批
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 56 课,共 58 课。
一家合作银行发行了一种购物卡。在 cards.csv 中,320 名持卡人中有 79 人在第一年未能按时还款:
债务信息会有帮助,但各组之间存在重叠。银行会评估每位申请人的风险,并将风险高于阈值的申请人交由人工审核。
它的规则是:捕获一定比例的未来逾期付款者。在验证行上选择阈值,然后只在测试行上评估一次。
挑战
困难程序会读取银行希望达到的召回率 target。起始代码列出了各列和按从高到低排列的 thresholds。
- 先分层划分出四分之一作为测试集,再从剩余数据中分层划分出四分之一作为验证集,两次划分都使用
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 在线编译器