4. 模型评估与验证:KS值、AUC、Gini系数、PSI稳定性监测、回测方法
催收评分卡(Collection Score)上线前必须经过严格的评估与验证。本章聚焦五个核心指标:KS值、AUC、Gini系数、PSI稳定性监测以及回测方法。只有通过多维度验证,才能确保评分卡在催收触达策略中稳定、有效。
核心观点: 区分度(KS/AUC/Gini)决定模型能否区分好坏客户;稳定性(PSI)决定模型在时间推移后是否仍然可靠;回测则验证策略收益是否真实。
4.1 区分度指标:KS、AUC、Gini
三个指标从不同角度衡量模型对“好客户”与“坏客户”的排序能力。下表对比其定义、计算方式与适用场景:
| 指标 | 全称 | 取值范围 | 催收场景含义 | 常用阈值 |
|---|---|---|---|---|
| KS | Kolmogorov-Smirnov | 0 ~ 1 | 好坏客户累计分布的最大差异 | > 0.3 可用,> 0.4 优秀 |
| AUC | Area Under ROC Curve | 0.5 ~ 1 | 随机抽取一对好坏客户,模型正确排序的概率 | > 0.7 可用,> 0.8 优秀 |
| Gini | Gini Coefficient | 0 ~ 1 | 模型排序能力相对于随机模型的提升倍数 | > 0.4 可用,> 0.6 优秀 |
换算关系: Gini ≈ 2 × AUC − 1。例如 AUC=0.8 时,Gini≈0.6。三个指标本质同源,但KS更关注最大分离点,AUC/Gini更关注全局排序。
4.1.1 KS值详解
KS值计算好坏客户累计分布函数(CDF)的最大垂直距离。在催收场景中,KS值越高,说明评分卡能更清晰地将“高回收率客户”与“低回收率客户”分开,从而支持差异化触达策略。
- 计算步骤: 按评分升序分箱 → 计算每箱好客户占比、坏客户占比 → 累计好占比、累计坏占比 → 取两者差值的最大值。
- 催收应用: KS值对应的切分点可作为“高响应/低响应”分界线,用于设计不同触达频率或渠道。
4.1.2 AUC与Gini系数
AUC通过ROC曲线下面积衡量模型排序能力,不受样本不平衡影响。Gini系数则更直观地反映模型相对于随机模型的增益倍数。两者在催收模型验证中常作为“最终审批指标”。
4.2 PSI稳定性监测
PSI(Population Stability Index)衡量模型评分在时间维度上的分布偏移程度。催收模型上线后,客户行为、宏观经济、催收策略变化都会导致评分分布漂移,PSI是预警模型失效的核心指标。
| PSI 值范围 | 稳定性等级 | 催收应对措施 |
|---|---|---|
| < 0.1 | 稳定 | 正常使用,定期监控 |
| 0.1 ~ 0.25 | 轻度漂移 | 检查特征分布,考虑局部调整 |
| > 0.25 | 严重漂移 | 暂停模型,重新开发或校准 |
注意: PSI 只反映分布变化,不反映模型好坏。即使 PSI 很低,如果模型区分度已下降,仍需重新评估。建议每月计算一次 PSI,并配合 KS/AUC 趋势图使用。
4.2.1 PSI 计算步骤
- 分箱: 将模型评分按等频或等距分为 10~20 箱。
- 计算实际占比: 当前月份各箱客户数占总客户数的比例。
- 计算期望占比: 模型开发时(或基准月)各箱客户数占比。
- 代入公式: PSI = Σ (实际占比 − 期望占比) × ln(实际占比 / 期望占比)。
# Python 示例:计算 PSI
import numpy as np
def calculate_psi(actual, expected, bins=10):
# 等频分箱
percentiles = np.percentile(expected, np.linspace(0, 100, bins+1))
actual_bins = np.digitize(actual, percentiles)
expected_bins = np.digitize(expected, percentiles)
actual_pct = np.bincount(actual_bins, minlength=bins+1)[1:] / len(actual)
expected_pct = np.bincount(expected_bins, minlength=bins+1)[1:] / len(expected)
# 避免除零
expected_pct = np.where(expected_pct == 0, 0.001, expected_pct)
actual_pct = np.where(actual_pct == 0, 0.001, actual_pct)
psi = np.sum((actual_pct - expected_pct) * np.log(actual_pct / expected_pct))
return psi
# 使用示例
psi_value = calculate_psi(current_scores, dev_scores)
print(f"PSI: {psi_value:.4f}")
4.3 回测方法
回测(Backtesting)是用历史数据模拟模型上线后的策略效果,验证催收触达策略是否真正带来回收率提升。回测是连接模型评估与业务收益的桥梁。
4.3.1 回测流程
- 步骤1: 选取回测时间段(如过去6个月),确保数据覆盖完整催收周期。
- 步骤2: 按模型评分将客户分为若干策略组(如高、中、低响应组)。
- 步骤3: 模拟各组采用不同触达策略(如高响应组增加电话催收频次,低响应组仅发送短信)。
- 步骤4: 对比策略组与对照组(或历史实际策略)的回收率、成本、ROI。
- 步骤5: 统计显著性检验(如t检验或卡方检验),确认收益是否非随机。
4.3.2 回测关键指标
| 指标 | 定义 | 回测用途 |
|---|---|---|
| 回收率提升 | 新策略 vs 旧策略的回收金额百分比变化 | 直接衡量策略收益 |
| 触达成本变化 | 单位客户触达成本(短信/电话/人工) | 评估成本效率 |
| ROI | (回收增量 − 成本增量) / 成本增量 | 综合收益判断 |
| 坏账率 | 最终未回收金额占比 | 监控策略是否过度催收 |
4.4 评估验证综合框架
将上述指标整合为一个完整的评估验证流程,确保催收评分卡从开发到上线全链路可控:
- 开发阶段: 使用训练集计算 KS/AUC/Gini,确保区分度达标(KS > 0.3, AUC > 0.7)。
- 验证阶段: 使用时间外样本(OOT)计算相同指标,确认无过拟合。
- 上线前: 计算开发集与验证集的 PSI,确保分布稳定(PSI < 0.1)。
- 策略模拟: 执行回测,验证策略收益是否显著。
- 上线后: 每月监控 PSI 与区分度趋势,触发预警后及时调整。
最佳实践: 建议建立“模型健康度仪表盘”,同时展示 KS、AUC、PSI 三个指标的月度趋势线,一旦任一指标超出阈值,自动触发模型重评流程。
通过本章的五个核心指标与回测方法,你可以系统性地评估催收评分卡的有效性与稳定性,为后续触达策略优化提供坚实的数据基础。