2. PSI 数学原理:公式推导与 KL 散度关系
群体稳定性指标(Population Stability Index, PSI)的核心是量化两个概率分布之间的差异程度。在特征漂移监控场景中,这两个分布分别是期望分布(Expected Distribution)和实际分布(Actual Distribution)。PSI 的数学本质源于信息论中的 KL 散度(Kullback-Leibler Divergence),但通过对称化处理使其更适合工程应用。
2.1 从 KL 散度到 PSI 的推导
KL 散度衡量分布 P 相对于分布 Q 的信息损失,其定义为:
KL(P || Q) = Σ P(i) * ln( P(i) / Q(i) )
其中 P 为实际分布,Q 为期望分布。KL 散度具有非对称性:KL(P||Q) ≠ KL(Q||P)。PSI 通过取两个方向 KL 散度的对称和来解决这一问题:
PSI = KL(P || Q) + KL(Q || P)
= Σ P(i) * ln( P(i) / Q(i) ) + Σ Q(i) * ln( Q(i) / P(i) )
= Σ [ P(i) - Q(i) ] * ln( P(i) / Q(i) )
最终得到 PSI 的标准计算公式:
PSI = Σ (Actual_i - Expected_i) * ln( Actual_i / Expected_i )
其中 Actual_i 和 Expected_i 分别为第 i 个分箱中实际样本占比和期望样本占比。
2.2 分箱处理与离散化
连续型特征在计算 PSI 前必须进行分箱(Binning)。分箱方式直接影响 PSI 值的稳定性和可解释性:
| 分箱方法 | 操作方式 | 适用场景 | 注意事项 |
|---|---|---|---|
| 等距分箱 | 按数值区间等宽划分 | 分布均匀的特征 | 稀疏区间可能导致零占比 |
| 等频分箱 | 按样本量均等划分 | 长尾分布特征 | 边界值可能不稳定 |
| 决策树分箱 | 基于目标变量最优切分 | 与目标强相关的特征 | 计算成本较高 |
| 自定义分箱 | 业务规则或专家经验 | 有明确业务含义的特征 | 需定期验证合理性 |
⚠ 零占比处理:当期望分布或实际分布中出现 0% 的分箱时,ln(0) 无定义。建议对每个分箱占比进行平滑处理,例如添加极小常数 ε(如 0.0001),或使用 Laplace 平滑:
p' = (count + 1) / (total + n_bins)。
2.3 PSI 与 KL 散度的关系矩阵
下表总结了 PSI 与 KL 散度在关键维度上的对比:
| 维度 | KL 散度 | PSI |
|---|---|---|
| 对称性 | 非对称 | 对称(通过求和实现) |
| 取值范围 | [0, +∞) | [0, +∞) |
| 分布要求 | 需连续或离散概率 | 需离散化分箱 |
| 对零值敏感度 | 极高(ln(0) 发散) | 极高(需平滑处理) |
| 工程可解释性 | 较低(信息论单位) | 较高(有经验阈值) |
| 监控常用性 | 学术研究 | 工业界标准 |
2.4 PSI 计算流程
实际计算 PSI 时遵循以下步骤:
- 确定参考分布:选取训练集或历史稳定期的特征分布作为期望分布。
- 分箱对齐:使用相同的分箱边界对期望分布和当前实际分布进行分箱。
- 计算占比:分别计算每个分箱中样本数量占总样本数的比例。
- 逐箱计算:对每个分箱计算 (Actual_i - Expected_i) * ln(Actual_i / Expected_i)。
- 求和:将所有分箱的计算结果相加得到最终 PSI 值。
💡 计算示例:假设某特征分为 3 箱,期望占比为 [0.5, 0.3, 0.2],实际占比为 [0.4, 0.4, 0.2]。则 PSI = (0.4-0.5)*ln(0.4/0.5) + (0.4-0.3)*ln(0.4/0.3) + (0.2-0.2)*ln(0.2/0.2) = (-0.1)*(-0.2231) + (0.1)*(0.2877) + 0 = 0.02231 + 0.02877 = 0.05108。
2.5 PSI 与 KL 散度的数学关系图
下图展示了从 KL 散度到 PSI 的推导路径,以及两者在对称性和应用场景上的核心差异:
2.6 PSI 的数学性质总结
- 非负性:PSI ≥ 0,当且仅当实际分布与期望分布完全一致时 PSI = 0。
- 对称性:PSI(P, Q) = PSI(Q, P),克服了 KL 散度的非对称缺陷。
- 尺度敏感性:PSI 值随分箱数量增加而增大,建议分箱数控制在 5~20 之间。
- 无上界:理论上 PSI 可以无限大,但实际监控中通常关注 0~1 区间。
- 可分解性:PSI 可以分解为各分箱贡献之和,便于定位漂移来源。
📌 工程建议:在实现 PSI 计算时,建议同时输出每个分箱的
(Actual_i - Expected_i) * ln(Actual_i / Expected_i) 值,形成贡献度排序。这有助于快速定位哪些分箱导致了主要漂移,从而指导特征工程或模型更新决策。