3. 特征稳定性度量:PSI(群体稳定性指标)原理、计算公式、阈值解读

在批次偏移诊断中,群体稳定性指标(Population Stability Index, PSI)是最广泛使用的量化指标。PSI 衡量的是两个样本(通常为训练集/基准集 vs. 当前生产批次)在同一个特征上的分布差异程度。PSI 值越大,说明特征分布偏移越严重,模型失效风险越高。

3.1 PSI 核心原理

PSI 基于信息论中的 KL 散度(Kullback-Leibler divergence) 对称化变体,本质是衡量两个概率分布之间的“距离”。其核心思想是:将连续特征分箱后,比较每个箱内实际占比与预期占比的差异,并对所有箱的差异进行加权求和。

关键理解: PSI 不是直接比较原始数值,而是比较“落在每个区间内的样本比例”。分箱策略直接影响 PSI 的敏感度。

3.2 计算公式与分步拆解

PSI 的标准计算公式如下:

PSI = Σ (Actual_i - Expected_i) * ln(Actual_i / Expected_i)

其中:
- Expected_i = 基准集(如训练集)落在第 i 个分箱的样本比例
- Actual_i   = 当前批次(如生产数据)落在第 i 个分箱的样本比例
- i = 1, 2, ..., N(N 为分箱总数)

计算流程通常分为以下 5 个步骤:

  1. 确定分箱边界: 基于基准集(如训练集)的特征分布,使用等频分箱或等距分箱,通常分 10 箱(deciles)。
  2. 计算基准占比: 统计基准集中每个分箱的样本数,除以总样本数,得到 Expected_i。
  3. 计算实际占比: 将当前批次数据按相同的分箱边界划分,统计每个分箱的样本数,除以当前批次总样本数,得到 Actual_i。
  4. 计算每个分箱的贡献值: 对每个分箱计算 (Actual_i - Expected_i) * ln(Actual_i / Expected_i)。
  5. 求和: 将所有分箱的贡献值相加,得到最终的 PSI 值。
⚠ 分箱避坑: 如果某个分箱在基准集中占比为 0(Expected_i = 0),会导致 ln(0) 无定义。实际处理时,通常对占比做微小平滑(如加 0.0001),或将该箱与相邻箱合并。

3.3 阈值解读与行业标准

PSI 的数值范围通常为 [0, +∞),数值越大表示分布偏移越严重。业界通用的判断标准如下:

PSI 范围 偏移程度 建议操作
PSI < 0.1 无显著偏移 特征稳定,无需干预
0.1 ≤ PSI < 0.25 轻度偏移 需监控,建议排查原因
PSI ≥ 0.25 严重偏移 必须告警,需重新训练或特征工程
阈值不是绝对的: 上述阈值是通用经验值。在风控、医疗等高风险场景,建议将告警阈值下调至 0.15;在低频特征或稀疏特征上,PSI 可能天然偏高,需结合业务逻辑判断。

3.4 PSI 计算示例(手动演算)

假设某特征“用户年龄”分 3 箱,基准集和当前批次的占比数据如下:

分箱 基准占比 (Expected) 当前占比 (Actual) 差值 (A-E) ln(A/E) 贡献值
[18, 30) 0.30 0.35 +0.05 0.1542 0.0077
[30, 50) 0.50 0.45 -0.05 -0.1054 0.0053
[50, +∞) 0.20 0.20 0.00 0.0000 0.0000

PSI = 0.0077 + 0.0053 + 0.0000 = 0.0130。该值远小于 0.1,说明该特征在当前批次中分布稳定,无需告警。

3.5 PSI 与 SQL 窗口函数的结合点

在后续实战章节中,我们将使用 SQL 窗口函数高效完成 PSI 计算中的分箱统计和占比计算。核心思路是:

  • 使用 NTILE() 或 PERCENT_RANK() 在基准集上确定分箱边界。
  • 使用 CASE WHEN 将当前批次数据映射到相同分箱。
  • 使用 COUNT() + SUM() OVER() 计算每个分箱的占比。
  • 最终聚合计算 PSI 值。
SQL 优势: 无需将数据导出到 Python/R,直接在数据库内完成全量数据的 PSI 计算,适合大规模生产环境。
PSI 计算流程与阈值决策图 PSI 计算流程与阈值决策 ① 确定分箱边界 ② 计算 Expected_i ③ 计算 Actual_i ④ 每箱贡献值 ⑤ 求和得 PSI 阈值判断 PSI < 0.1 → 稳定 0.1~0.25 → 监控 ≥ 0.25 → 告警

3.6 PSI 的局限性

尽管 PSI 是行业标准,但在实际应用中需注意以下局限:

  • 对分箱数敏感: 分箱过少会掩盖局部偏移,分箱过多会导致噪声放大。建议使用 10 箱(deciles)作为默认值。
  • 无法区分偏移方向: PSI 只反映分布差异的大小,不反映偏移的方向(如均值增大还是减小)。需结合均值、标准差等统计量辅助判断。
  • 对稀疏特征不鲁棒: 当特征大部分取值为 0 或空值时,PSI 可能因分母过小而产生异常高值。此时建议先做缺失值处理或使用其他指标(如人口稳定指数 CSI)。
  • 不适用于类别过多的高基特征: 对于城市 ID、用户 ID 等高基数类别特征,直接分箱会导致大量空箱。建议先做业务分组或 embedding 降维。
最佳实践: 在生产环境中,建议同时计算 PSI 和特征均值漂移(Mean Shift),两者互补。PSI 捕捉分布形状变化,均值漂移捕捉中心位置变化。