4. ROC曲线与AUC

在信用评分模型中,KS告诉我们“分数把好坏样本分得最开的那个点有多远”,而ROC与AUC回答的是另一个更全局的问题:当阈值从高到低连续移动时,模型把好人排在坏人前面的能力整体有多强。对于风控、授信、反欺诈等场景,这个“排序能力”往往比某个单点阈值下的准确率更重要,因为业务真正关心的是:给定通过率,坏账能拦住多少;或者给定坏账容忍度,能放行多少好人。

一、ROC空间:真正率与假正率的二维坐标系

ROC曲线绘制在ROC空间中,横轴是假正率(FPR),纵轴是真正率(TPR)。在信用评分中,通常把“坏客户”定义为正类(需要识别出来的风险),把“好客户”定义为负类。于是:

  • 真正率 TPR = TP / (TP + FN):坏客户中被模型正确识别为坏的比例,也叫召回率、敏感度。TPR越高,说明漏掉的坏人越少。
  • 假正率 FPR = FP / (FP + TN):好客户中被模型误判为坏的比例。FPR越高,说明被误拒的好人越多,业务代价越大。

把分类阈值从最高分往最低分移动,每取一个阈值就得到一个(TPR, FPR)点,把这些点连起来就得到ROC曲线。曲线从左下角(0,0)出发,到右上角(1,1)结束。理想模型会迅速上升到左上角(0,1),即TPR接近1而FPR接近0;随机猜测模型则沿着对角线y=x分布。

核心直觉:ROC曲线描述的是“在所有可能阈值下,模型识别坏人的收益(TPR)与误伤好人的代价(FPR)之间的权衡轨迹”。曲线越靠近左上角,模型排序能力越强。

二、AUC的定义与概率解释

AUC(Area Under the ROC Curve)是ROC曲线下的面积,取值范围为0到1。它有一个非常优雅的概率解释:随机抽取一个坏客户和一个好客户,模型给坏客户的风险分数高于好客户的概率,就等于AUC。这里的“高于”通常按风险分数理解:坏客户分数越高越危险。如果模型输出的是信用分(越高越安全),则需要反向处理。

这个概率解释让AUC在业务沟通中非常直观。例如AUC=0.78,意味着在随机配对的好坏客户中,有78%的概率模型能把坏人排在好人前面。它不依赖具体阈值,也不依赖好坏样本的比例,因此特别适合评估信用评分模型的排序能力。

AUC区间 排序能力 信用评分场景参考
0.50~0.60 接近随机 几乎不可用,需检查特征与标签
0.60~0.70 较弱 可作为辅助信号,不宜单独决策
0.70~0.80 良好 多数消费金融评分卡的常见区间
0.80~0.90 优秀 强特征或成熟模型,需警惕过拟合
0.90以上 极强 需重点排查标签泄漏与时间穿越

三、方法流程:从分数到ROC与AUC

实际计算时,不需要真的遍历所有阈值。常用做法是先按分数排序,再逐步移动截断点,累计TP、FP、TN、FN,最后用梯形法计算面积。下面给出一个简洁的Python示例:

import numpy as np
from sklearn.metrics import roc_curve, roc_auc_score

# y_true: 1=坏客户, 0=好客户
# y_score: 风险分数,越高越危险
y_true = np.array([1, 0, 1, 0, 1, 0, 1, 1, 0, 0])
y_score = np.array([0.91, 0.12, 0.85, 0.33, 0.76, 0.21, 0.68, 0.55, 0.40, 0.09])

fpr, tpr, thresholds = roc_curve(y_true, y_score)
auc = roc_auc_score(y_true, y_score)

print("FPR:", np.round(fpr, 3))
print("TPR:", np.round(tpr, 3))
print("AUC:", round(auc, 4))

输出中,FPR与TPR序列就是ROC曲线的坐标点,AUC则直接给出面积。若使用信用分(越高越安全),只需传入y_score = -credit_score或使用roc_auc_score(y_true, -credit_score)。

工程建议:在风控建模中,AUC通常与KS一起报告。AUC看整体排序,KS看最优分割点的区分度。两者都高,说明模型既有全局排序能力,也有局部强区分点;若AUC高但KS低,可能说明模型在中间区域排序好,但极端风险点不够突出。

四、案例与误区复盘

假设某现金贷评分卡在测试集上AUC=0.82,KS=0.41。业务方希望把通过率控制在60%,此时需要看ROC曲线上对应FPR约40%附近的TPR。如果TPR=0.75,说明在放行60%客户的情况下,能拦住75%的坏客户。这个“通过率—拦截率”的对应关系,正是ROC曲线在策略制定中的直接价值。

常见误区有三个:

  1. 把AUC当成准确率。AUC衡量的是排序,不是某个阈值下的分类正确率。AUC=0.8不代表准确率80%。
  2. 忽略样本不平衡。AUC对类别比例不敏感,这是优点也是陷阱。若坏样本极少,AUC可能仍然好看,但PR曲线会暴露问题,需结合业务目标选择指标。
  3. 用未来信息计算AUC。信用评分是时间序列问题,若特征中包含放款后信息,AUC会虚高。必须严格按时间切分训练集与测试集。

复盘提醒:当AUC异常高(如0.95以上)时,先不要庆祝,优先排查标签泄漏、样本穿越、特征穿越和重复样本。信用评分场景中,真实可上线的AUC通常不会高得离谱。

总结来说,ROC空间用TPR与FPR刻画了模型在所有阈值下的表现,AUC则把这条曲线压缩成一个概率意义上的排序能力指标。掌握它们,才能在信用评分实战中既看懂模型,也看懂业务代价。