4. PSI(群体稳定性指标)原理
群体稳定性指标(Population Stability Index,PSI)是风控模型监控中最核心的量化指标之一,用于衡量两个样本群体在特征分布上的差异程度。在实时风控场景中,PSI 被广泛用于检测特征漂移(Feature Drift),从而判断模型输入分布是否发生显著变化,进而触发模型重训或特征工程调整。
4.1 PSI 的数学定义
PSI 基于信息论中的 KL 散度(Kullback-Leibler Divergence)演变而来,其计算公式如下:
PSI = Σ (P_i - Q_i) × ln(P_i / Q_i)
其中:
- P_i:当前监控窗口(实际分布)中第 i 个分箱的样本占比
- Q_i:基准分布(如训练集、上一周期)中第 i 个分箱的样本占比
- ln(P_i / Q_i):自然对数,衡量两个比例之间的偏离程度
PSI 的实质是对每个分箱的“实际占比 vs 期望占比”差异进行加权求和,权重由对数变换后的偏离程度决定。当 P_i 与 Q_i 完全一致时,PSI = 0;差异越大,PSI 值越高。
4.2 分箱方法
PSI 的计算依赖分箱(Binning),即把连续特征或离散特征划分为若干区间。分箱方式直接影响 PSI 的稳定性和可解释性。常用的分箱方法有三种:
| 分箱方法 | 原理 | 适用场景 | 注意事项 |
|---|---|---|---|
| 等距分箱 | 将特征值范围均匀划分为 k 个等宽区间 | 特征分布均匀、无极端离群点 | 离群点可能导致大部分样本集中在少数区间 |
| 等频分箱 | 使每个区间包含大致相同数量的样本 | 偏态分布、长尾特征 | 基准分布与当前分布的分箱边界需保持一致 |
| 决策树分箱 | 利用决策树算法寻找最优分裂点 | 需要最大化分箱区分度 | 计算成本较高,需防止过拟合 |
在实际风控监控中,等频分箱是最常用的方法,因为它能保证每个分箱都有足够的样本量,避免因空箱导致 PSI 计算异常(如 ln(0) 或除以 0)。
4.3 PSI 阈值设定(0.1 / 0.25)
PSI 的绝对值没有固定的“安全值”,但业界经过大量实践总结出两个通用阈值:
| PSI 范围 | 漂移程度 | 建议动作 |
|---|---|---|
| PSI < 0.1 | 无显著漂移 | 无需干预,继续监控 |
| 0.1 ≤ PSI < 0.25 | 轻度漂移 | 发出预警,排查特征变化原因 |
| PSI ≥ 0.25 | 严重漂移 | 立即告警,暂停模型或触发重训 |
这两个阈值并非绝对,实际应用中需根据业务场景调整:
- 高风险场景(如信贷审批、反欺诈):建议收紧阈值,如 0.05 / 0.15
- 低风险场景(如营销评分):可适当放宽,如 0.15 / 0.30
- 特征维度:数值型特征通常比类别型特征对 PSI 更敏感,可单独设定阈值
4.4 PSI 在特征漂移监控中的作用
特征漂移是模型性能衰减的核心原因之一。PSI 在特征漂移监控中扮演以下关键角色:
- 早期预警:在模型 AUC 或 KS 下降之前,PSI 往往率先反映分布变化,为风控团队争取响应时间
- 定位根因:通过计算每个特征的 PSI,快速定位是哪个特征发生了漂移,缩小排查范围
- 量化影响:PSI 值的大小可辅助判断漂移的严重程度,决定是否需要立即干预
- 模型生命周期管理:定期监控 PSI 趋势,为模型重训、特征工程迭代提供数据依据
下图展示了 PSI 在实时风控特征监控中的完整流程:
上图清晰地展示了从实时数据流入到特征提取、分箱对齐、PSI 计算、阈值判断,再到正常监控或预警/模型重训的完整闭环。其中基准分布(训练集或上一周期)作为 PSI 计算的参照标准,与当前分布进行对比。
4.5 PSI 与其他漂移指标的对比
在特征漂移监控中,除了 PSI,还有几种常用指标。下表对比了它们的核心差异:
| 指标 | 原理 | 对分布形状的敏感度 | 计算复杂度 | 适用场景 |
|---|---|---|---|---|
| PSI | 基于 KL 散度的分箱对比 | 高 | 低 | 通用特征漂移监控 |
| KS 检验 | 两样本累积分布的最大垂直距离 | 中 | 中 | 连续分布对比 |
| JS 散度 | KL 散度的对称化版本 | 高 | 中 | 需要对称性度量的场景 |
| Wasserstein 距离 | 最优传输距离 | 极高 | 高 | 高精度分布差异分析 |
4.6 PSI 计算的 SQL 实现要点
在实时风控巡检中,PSI 通常通过 SQL 在数据仓库或流计算引擎中实现。以下是核心实现步骤:
- 准备基准分布:从训练集或历史周期中提取每个特征的分箱边界和期望占比 Q_i
- 计算当前分布:对实时数据按相同分箱边界进行分组,统计每个分箱的样本数,计算实际占比 P_i
- 处理空箱:若某个分箱在当前分布中样本数为 0,需做平滑处理(如加 1 或使用极小值),避免 ln(0)
- 聚合计算:按分箱计算 (P_i - Q_i) * ln(P_i / Q_i),求和得到 PSI
-- PSI 计算 SQL 示例(基于等频分箱)
WITH bin_stats AS (
SELECT
CASE
WHEN feature_value <= 0.1 THEN 'bin_1'
WHEN feature_value <= 0.3 THEN 'bin_2'
WHEN feature_value <= 0.6 THEN 'bin_3'
ELSE 'bin_4'
END AS bin_id,
COUNT(*) AS cnt
FROM current_data
GROUP BY bin_id
),
total_cnt AS (
SELECT SUM(cnt) AS total FROM bin_stats
),
psi_calc AS (
SELECT
b.bin_id,
b.cnt / t.total AS p_i,
ref.expected_ratio AS q_i,
(b.cnt / t.total - ref.expected_ratio) *
LN((b.cnt / t.total + 1e-10) / (ref.expected_ratio + 1e-10)) AS psi_term
FROM bin_stats b
CROSS JOIN total_cnt t
JOIN reference_distribution ref ON b.bin_id = ref.bin_id
)
SELECT ROUND(SUM(psi_term), 6) AS psi_value
FROM psi_calc;
+ 1e-10 进行平滑,避免因 P_i 或 Q_i 为 0 导致 LN 函数报错。在实际生产环境中,建议将平滑值作为参数配置,便于调优。