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 个步骤:
- 确定分箱边界: 基于基准集(如训练集)的特征分布,使用等频分箱或等距分箱,通常分 10 箱(deciles)。
- 计算基准占比: 统计基准集中每个分箱的样本数,除以总样本数,得到 Expected_i。
- 计算实际占比: 将当前批次数据按相同的分箱边界划分,统计每个分箱的样本数,除以当前批次总样本数,得到 Actual_i。
- 计算每个分箱的贡献值: 对每个分箱计算 (Actual_i - Expected_i) * ln(Actual_i / Expected_i)。
- 求和: 将所有分箱的贡献值相加,得到最终的 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 计算,适合大规模生产环境。
3.6 PSI 的局限性
尽管 PSI 是行业标准,但在实际应用中需注意以下局限:
- 对分箱数敏感: 分箱过少会掩盖局部偏移,分箱过多会导致噪声放大。建议使用 10 箱(deciles)作为默认值。
- 无法区分偏移方向: PSI 只反映分布差异的大小,不反映偏移的方向(如均值增大还是减小)。需结合均值、标准差等统计量辅助判断。
- 对稀疏特征不鲁棒: 当特征大部分取值为 0 或空值时,PSI 可能因分母过小而产生异常高值。此时建议先做缺失值处理或使用其他指标(如人口稳定指数 CSI)。
- 不适用于类别过多的高基特征: 对于城市 ID、用户 ID 等高基数类别特征,直接分箱会导致大量空箱。建议先做业务分组或 embedding 降维。
最佳实践: 在生产环境中,建议同时计算 PSI 和特征均值漂移(Mean Shift),两者互补。PSI 捕捉分布形状变化,均值漂移捕捉中心位置变化。