3、PSI计算步骤详解:分箱方法选择、实际占比与预期占比计算、WOE与IV的关联
PSI(Population Stability Index,群体稳定性指标)的计算并非简单的数学公式套用,其核心在于分箱策略与占比计算的合理性。错误的步骤会导致模型稳定性误判,进而影响催收策略的调整方向。本节将拆解PSI计算的完整链路,并揭示其与WOE、IV的内在逻辑关联。
3.1 分箱方法选择:离散化是PSI的基石
PSI要求将连续变量或离散变量划分为若干个箱(Bin),然后比较每个箱中样本占比的变化。分箱方法直接影响PSI的敏感度与稳定性。常见方法如下:
| 分箱方法 | 原理 | 适用场景 | 注意事项 |
|---|---|---|---|
| 等距分箱 | 按数值区间等宽划分(如0-10, 10-20) | 变量分布均匀,无极端值 | 极端值易导致空箱或样本稀疏 |
| 等频分箱 | 按样本数量等比例划分(每箱约10%样本) | 分布偏态、长尾变量 | 分箱边界随分布变化,跨期可比性需验证 |
| 决策树分箱 | 基于目标变量(如逾期状态)进行监督分箱 | 需要与IV/WOE联动分析时 | 过拟合风险,需设置最小样本数 |
| 自定义分箱 | 依据业务经验或监管要求固定切分点 | 评分卡节点、政策红线阈值 | 主观性强,需定期验证合理性 |
催收场景建议: 对于“历史催收次数”、“逾期天数”等强业务含义变量,优先采用等频分箱(通常5-10箱),既能保证每箱有足够样本计算占比,又能捕捉尾部风险变化。避免使用等距分箱处理“欠款金额”这类长尾变量。
3.2 实际占比与预期占比计算
PSI的核心是比较两个时间窗口或两个群体的分布差异。通常将建模样本(或基准期)的分布作为预期占比(Expected %),将当前监控样本(或表现期)的分布作为实际占比(Actual %)。
3.2.1 计算步骤
- 确定基准与监控窗口:例如,以2024年Q1的催收数据为基准,监控2024年Q2的数据。
- 分箱:使用基准窗口的数据确定分箱边界(如等频分箱的切分点),并固定这些边界用于监控窗口。
- 统计箱内样本数:分别统计基准窗口和监控窗口在每个箱中的样本数量。
- 计算占比:
- 预期占比(Pi)= 基准窗口第i箱样本数 / 基准窗口总样本数
- 实际占比(Ai)= 监控窗口第i箱样本数 / 监控窗口总样本数
- 计算PSI:PSI = Σ[(Ai - Pi) × ln(Ai / Pi)]
关键避坑: 分箱边界必须基于基准窗口固定,不能随监控窗口重新分箱。否则PSI将失去“稳定性”比较的意义,变成两个独立分布的差异度量。
3.2.2 计算示例表
假设某催收变量“历史联系次数”分为5箱,基准窗口样本10000,监控窗口样本12000:
| 箱号 | 分箱区间 | 基准样本数 | 预期占比 Pi | 监控样本数 | 实际占比 Ai | (Ai-Pi) | ln(Ai/Pi) | 单项PSI |
|---|---|---|---|---|---|---|---|---|
| 1 | [0, 2) | 2000 | 0.200 | 1800 | 0.150 | -0.050 | -0.2877 | 0.0144 |
| 2 | [2, 5) | 2000 | 0.200 | 2400 | 0.200 | 0.000 | 0.0000 | 0.0000 |
| 3 | [5, 10) | 2000 | 0.200 | 3000 | 0.250 | 0.050 | 0.2231 | 0.0112 |
| 4 | [10, 20) | 2000 | 0.200 | 2400 | 0.200 | 0.000 | 0.0000 | 0.0000 |
| 5 | [20, +∞) | 2000 | 0.200 | 2400 | 0.200 | 0.000 | 0.0000 | 0.0000 |
| PSI = Σ | 0.0256 | |||||||
该变量PSI=0.0256,小于0.1,属于低漂移,模型稳定性良好。
3.3 WOE与IV的关联:PSI的统计本质
PSI的计算公式与信息价值(IV)在数学形式上高度对称,但含义截然不同。理解这种关联有助于深入把握PSI的统计意义。
3.3.1 公式对比
| 指标 | 公式 | 核心含义 |
|---|---|---|
| PSI | Σ[(Ai - Pi) × ln(Ai / Pi)] | 监控分布 vs 基准分布 的差异 |
| IV | Σ[(%好 - %坏) × WOE] | 好样本分布 vs 坏样本分布 的差异 |
| WOE | ln(%好 / %坏) | 单箱区分能力 |
从公式可见:
- PSI 是“分布对分布”的散度度量,不涉及目标变量(如逾期状态)。
- IV 是“好/坏”两组分布之间的散度,依赖目标变量。
- 两者都基于信息熵或KL散度的变体,因此对分箱敏感。
3.3.2 催收场景下的关联解读
在催收模型监控中,PSI与IV存在以下联动关系:
- PSI高 + IV稳定:变量分布整体偏移,但区分能力未变。可能由客群结构变化引起,需调整分箱边界或重新训练。
- PSI低 + IV下降:分布稳定,但变量对逾期状态的区分力减弱。可能是模型失效或外部环境突变。
- PSI高 + IV下降:最危险信号,变量分布与区分能力同时恶化,需立即排查数据源或业务策略。
实战警示: 不要单独依赖PSI或IV。建议在PSI监控报告中同时展示每个箱的WOE变化。如果某个箱的WOE符号发生翻转(如从正变负),即使整体PSI不高,也需重点关注该箱对应的客群。
3.4 计算中的常见陷阱与规避
- 零占比处理:当某箱在基准或监控窗口中出现0样本时,ln(0)无定义。建议对占比做平滑处理(如加0.5或1e-6),或合并空箱到相邻箱。
- 分箱数量:箱数过少(<5)会丢失分布细节;箱数过多(>20)会导致噪声放大。催收场景推荐5-10箱。
- 样本量差异:若监控窗口样本量远小于基准窗口,PSI会因抽样波动而偏高。建议监控窗口样本量不低于基准窗口的30%。
代码示例:Python实现PSI计算(含平滑)
import numpy as np
def calculate_psi(actual, expected, bins=10, epsilon=1e-6):
"""
actual: 监控窗口数据
expected: 基准窗口数据
bins: 分箱数(等频)
"""
# 基于基准窗口确定分位点
percentiles = np.linspace(0, 100, bins + 1)[1:-1]
bin_edges = np.percentile(expected, percentiles)
bin_edges = np.unique(bin_edges) # 去重
# 分箱并统计
expected_counts, _ = np.histogram(expected, bins=bin_edges)
actual_counts, _ = np.histogram(actual, bins=bin_edges)
# 计算占比(加平滑)
expected_pct = (expected_counts + epsilon) / (expected.sum() + epsilon * len(expected_counts))
actual_pct = (actual_counts + epsilon) / (actual.sum() + epsilon * len(actual_counts))
# 计算PSI
psi = np.sum((actual_pct - expected_pct) * np.log(actual_pct / expected_pct))
return psi