4. PSI计算基础:分箱方法与阈值经验

PSI(Population Stability Index,群体稳定性指标)是风控规则引擎中衡量模型或评分分布随时间变化的核心监控工具。要准确计算PSI,必须掌握三个基础环节:分箱方法、实际分布与预期分布的计算以及阈值判断标准。本章从工程落地角度逐一拆解。

4.1 分箱方法:三种主流策略对比

分箱(Binning)是将连续变量或离散值划分为若干区间(桶)的过程。分箱方式直接影响PSI的敏感度和稳定性。以下是三种最常用的分箱方法及其适用场景。

分箱方法 核心原理 优点 缺点 风控典型场景
等距分箱 将数值范围按固定宽度划分为K个区间 实现简单,区间边界固定,便于跨时间对比 数据分布不均时,部分箱可能为空或样本极少 评分卡分数(如300-900分,每100分一箱)
等频分箱 每个箱包含大致相同数量的样本 避免空箱,每个箱统计意义均衡 边界随分布变化,跨期对比时箱边界可能漂移 收入、年龄等分布偏态明显的变量
最优分箱 基于统计检验(如卡方、信息值IV)自动寻找最佳切点 最大化组间差异,提升PSI对分布变化的敏感度 计算复杂,需依赖训练数据,过拟合风险 模型上线前的基准分箱,用于高精度监控
工程建议:在风控规则引擎中,推荐使用等距分箱作为默认方案,因为其边界固定,便于跨时间窗口直接对比。等频分箱适合探索性分析,最优分箱则用于模型开发阶段的基准定义。
三种分箱方法对比示意图 等距分箱 固定宽度区间 [0-100) [100-200) [200-300) [300-400) 等频分箱 每箱样本数≈N/K 箱宽自适应,样本数均衡 最优分箱 基于IV/卡方自动切分 切点由统计显著性决定 选择原则 监控用等距 → 探索用等频 → 建模用最优

4.2 实际分布与预期分布的计算

PSI的核心公式基于两个分布的比较:预期分布(Expected Distribution)和实际分布(Actual Distribution)。在风控场景中,预期分布通常来自模型开发时的训练集或验证集,实际分布来自监控期的线上样本。

4.2.1 计算步骤

  1. 确定分箱方案:基于预期数据集(如训练集)确定K个箱的边界。
  2. 计算预期占比:统计预期数据集中每个箱的样本数,除以总样本数,得到 \( p_i^{exp} \)。
  3. 计算实际占比:用同样的箱边界,统计实际数据集中每个箱的样本数,除以总样本数,得到 \( p_i^{act} \)。
  4. 计算每个箱的贡献值:\( (p_i^{act} - p_i^{exp}) \times \ln(p_i^{act} / p_i^{exp}) \)。
  5. 求和得到PSI:\( PSI = \sum_{i=1}^{K} (p_i^{act} - p_i^{exp}) \times \ln(p_i^{act} / p_i^{exp}) \)。
注意:当某个箱的 \( p_i^{exp} = 0 \) 或 \( p_i^{act} = 0 \) 时,对数无定义。工程上通常对空箱做平滑处理:将0替换为一个极小值(如0.0001),或将该箱与相邻箱合并。

4.2.2 计算示例

假设一个评分卡模型将分数分为4个等距箱,预期分布和实际分布如下:

分数区间 预期样本数 预期占比 \( p_i^{exp} \) 实际样本数 实际占比 \( p_i^{act} \) 差值 \( p_i^{act} - p_i^{exp} \) 对数比 \( \ln(p_i^{act}/p_i^{exp}) \) 箱贡献值
[300-450) 200 0.20 150 0.15 -0.05 -0.2877 0.0144
[450-600) 400 0.40 350 0.35 -0.05 -0.1335 0.0067
[600-750) 300 0.30 400 0.40 +0.10 +0.2877 0.0288
[750-900] 100 0.10 100 0.10 0.00 0.0000 0.0000
合计 1000 1.00 1000 1.00 — — 0.0499

计算得到PSI = 0.0499。根据行业经验,该值介于0.1以下,表示分布稳定,无需告警。

4.3 PSI阈值的行业经验值

PSI的绝对值没有理论上的“完美”阈值,但经过多年风控实践,行业形成了通用的判断标准。以下是最广泛使用的三段式阈值体系:

PSI范围 稳定性等级 建议动作 风控含义
PSI < 0.1 稳定 无需干预,常规监控 模型分布与预期基本一致,无显著漂移
0.1 ≤ PSI < 0.25 轻度漂移 发出告警,排查原因 分布出现可察觉变化,需关注客群或策略调整
PSI ≥ 0.25 严重漂移 立即介入,考虑模型重构或策略回退 分布发生结构性变化,模型预测能力可能失效
阈值调整说明:上述阈值适用于大多数信用评分卡和申请评分模型。对于高敏感场景(如反欺诈模型),建议将告警阈值下调至0.05;对于低频业务(如企业信贷),可适当放宽至0.15。最终阈值应结合业务回测和误报率确定。
PSI阈值判断与动作流程 计算PSI值 PSI < 0.1? ✅ 稳定:常规监控 ⚠️ 轻度漂移:告警 🚨 严重漂移:立即介入

4.4 工程实现要点

在风控规则引擎中实现PSI监控时,需注意以下工程细节:

  • 分箱边界固化:一旦确定分箱方案,应将边界持久化存储(如配置文件或数据库表),确保每次计算使用相同的箱边界。
  • 空箱处理:当某个箱在实际分布中样本数为0时,使用平滑因子 \( \epsilon = 0.0001 \) 替代,避免除零错误。
  • 计算频率:建议按天或按周计算PSI,与模型评分周期对齐。高频业务(如实时审批)可缩短至小时级。
  • 多维度监控:除了整体PSI,还应监控每个箱的占比变化,便于定位漂移来源。
代码片段示例(Python伪代码):
def calculate_psi(expected, actual, bins):
    # expected, actual: 样本数组
    # bins: 分箱边界列表
    exp_counts, _ = np.histogram(expected, bins=bins)
    act_counts, _ = np.histogram(actual, bins=bins)
    exp_pct = exp_counts / len(expected)
    act_pct = act_counts / len(actual)
    # 平滑处理
    exp_pct = np.where(exp_pct == 0, 0.0001, exp_pct)
    act_pct = np.where(act_pct == 0, 0.0001, act_pct)
    psi = np.sum((act_pct - exp_pct) * np.log(act_pct / exp_pct))
    return psi

4.5 常见误区与避坑指南

误区 错误表现 正确做法
分箱数过多 箱数超过20,导致每个箱样本稀疏,PSI波动剧烈 推荐5-10个箱,确保每个箱至少5%的样本
忽略空箱平滑 直接丢弃空箱,导致PSI计算不完整 使用极小值平滑或合并相邻箱
阈值一刀切 所有模型使用0.1/0.25固定阈值 根据模型类型、业务敏感度、回测结果动态调整
只算整体PSI 仅监控总分,忽略分箱贡献 同时输出每个箱的贡献值,快速定位漂移区间