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箱),既能保证每箱有足够样本计算占比,又能捕捉尾部风险变化。避免使用等距分箱处理“欠款金额”这类长尾变量。
分箱方法选择决策流程 分箱方法选择决策流程 输入:待分箱变量 分布均匀? 等距分箱 偏态/长尾 等频分箱 决策树分箱 催收场景:优先等频分箱(5-10箱),兼顾业务可解释性

3.2 实际占比与预期占比计算

PSI的核心是比较两个时间窗口或两个群体的分布差异。通常将建模样本(或基准期)的分布作为预期占比(Expected %),将当前监控样本(或表现期)的分布作为实际占比(Actual %)。

3.2.1 计算步骤

  1. 确定基准与监控窗口:例如,以2024年Q1的催收数据为基准,监控2024年Q2的数据。
  2. 分箱:使用基准窗口的数据确定分箱边界(如等频分箱的切分点),并固定这些边界用于监控窗口。
  3. 统计箱内样本数:分别统计基准窗口和监控窗口在每个箱中的样本数量。
  4. 计算占比:
    • 预期占比(Pi)= 基准窗口第i箱样本数 / 基准窗口总样本数
    • 实际占比(Ai)= 监控窗口第i箱样本数 / 监控窗口总样本数
  5. 计算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不高,也需重点关注该箱对应的客群。
PSI与IV、WOE的关联架构 PSI与IV、WOE的关联架构 分箱(Bin) PSI:分布稳定性 实际 vs 预期占比 IV:区分能力 WOE:单箱区分方向 PSI高 + IV下降 → 最危险信号,需立即排查

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