4、PSI分箱策略与分箱方法:等距分箱、等频分箱、最优分箱(决策树分箱)在PSI计算中的应用与选择

PSI(群体稳定性指标)的计算高度依赖评分卡分数的离散化处理,即“分箱”。分箱策略直接决定了PSI的敏感度与稳定性。不合理的分箱可能导致PSI掩盖真实漂移,或对微小波动过度告警。本章系统讲解三种主流分箱方法——等距分箱、等频分箱、最优分箱(决策树分箱)的原理、实现步骤及在PSI场景下的选型策略。

核心原则:PSI分箱并非追求模型预测精度,而是追求“分布对比的稳定性”。分箱边界一旦确定,应在观察期(OOT)与当前期之间保持固定,不可随新数据动态变化。

4.1 分箱在PSI计算中的角色

PSI的计算公式为:

PSI = Σ (实际占比_i - 预期占比_i) * ln(实际占比_i / 预期占比_i)

其中“占比”是基于分箱后的样本计数计算。分箱决定了:

  • 粒度:箱数越多,PSI对局部漂移越敏感,但噪声也越大。
  • 边界:边界位置影响每个箱的样本量,进而影响占比的稳定性。
  • 可比性:两期数据必须使用完全相同的分箱边界。
分箱属性 对PSI的影响
箱数过少(如2-3箱) 掩盖局部漂移,PSI值偏低,漏报风险高
箱数过多(如20+箱) 部分箱样本稀疏,占比波动大,PSI虚高,误报频繁
边界不合理 样本分布不均,少数箱主导PSI,失去整体代表性
推荐实践:评分卡PSI监控通常采用10箱(deciles),在敏感度与稳定性之间取得平衡。若评分卡分数范围较窄(如300-700分),可适当减少至5-6箱。

4.2 等距分箱(Equal Width Binning)

等距分箱将分数范围划分为宽度相等的区间。例如,评分卡分数范围300-900分,若分10箱,则每箱宽度为60分:300-360, 360-420, …, 840-900。

4.2.1 实现步骤

  1. 确定分数最小值 \( min \) 与最大值 \( max \)。
  2. 设定箱数 \( k \),计算箱宽 \( w = (max - min) / k \)。
  3. 生成边界序列:\( min, min+w, min+2w, …, max \)。
  4. 将预期期与当前期数据按同一边界分箱,计算各箱占比。

4.2.2 优缺点

优点 缺点
实现简单,边界直观可解释 无法适应数据分布,高分/低分箱可能样本极少
边界固定,跨期对比一致性好 样本稀疏箱的占比波动大,PSI易受噪声干扰
适合分数分布均匀的场景 对尾部漂移不敏感,可能漏掉极端客户群变化
避坑提示:当评分卡分数分布严重偏态(如大量客户集中在600-700分)时,等距分箱会导致中间箱样本过密、两端箱样本过少。此时PSI会被中间箱的微小波动主导,而两端箱的实质性漂移被稀释。

4.3 等频分箱(Equal Frequency Binning)

等频分箱(又称分位数分箱)使每个箱包含大致相同数量的样本。例如,分10箱时,每箱包含约10%的样本。

4.3.1 实现步骤

  1. 基于预期期(建模样本或OOT样本)的分数排序。
  2. 按分位数确定边界:第10%、20%、…、90%分位数。
  3. 将边界固定,应用于当前期数据。
  4. 计算两期各箱占比(注意:当前期各箱样本数可能不再相等)。

4.3.2 优缺点

优点 缺点
各箱样本量均衡,占比统计稳定 边界依赖预期期分布,若分布变化大,边界可能不合理
对整体漂移敏感,能反映分布形态变化 边界不直观,解释性弱于等距分箱
PSI计算受稀疏箱影响小 若当前期分布偏移严重,部分箱可能样本极少
行业实践:等频分箱是信贷评分卡PSI监控的默认选择。多数银行与消费金融公司采用10等频分箱(deciles),因其在统计稳健性与漂移敏感度之间表现均衡。

4.4 最优分箱(决策树分箱)

最优分箱利用决策树算法(如CART)自动寻找使目标变量(如好坏客户标签)区分度最大的分割点。在PSI场景中,最优分箱的目标是“使两期分布差异最大化”,即找到最能暴露漂移的分割点。

4.4.1 实现步骤

  1. 构造训练数据:将预期期与当前期数据合并,新增标签列(0=预期期,1=当前期)。
  2. 训练决策树(深度受限,如max_depth=3-4),以分数为特征,以“期别”为预测目标。
  3. 提取决策树的分割点作为分箱边界。
  4. 将边界应用于两期数据,计算PSI。

4.4.2 优缺点

优点 缺点
自动识别漂移最显著的分割点 计算复杂度高,需两期数据同时参与
对局部漂移敏感,能捕捉特定分数段的突变 边界可能过拟合当前期噪声,泛化性差
分箱边界具有统计依据,非人为预设 解释性差,业务方难以理解边界含义
使用限制:决策树分箱仅适用于“已知两期数据”的回顾性分析,不适合实时监控场景。若用于监控,需定期(如每月)重新训练决策树,但边界变化会导致PSI不可比。

4.5 三种分箱方法对比与选型

维度 等距分箱 等频分箱 最优分箱(决策树)
边界确定依据 分数范围等分 预期期分位数 两期分布差异最大化
箱内样本均衡性 差(两端稀疏) 好(预期期均衡) 中等(取决于分割点)
对整体漂移敏感度 中等 高 高
对局部漂移敏感度 低 中等 高
解释性 高 中等 低
计算复杂度 低 低 高
适用场景 分数均匀分布、业务要求边界整数 常规PSI监控(推荐) 漂移归因分析、回顾性诊断
选型建议:
  • 日常监控:优先使用等频分箱(10箱),兼顾稳健性与敏感度。
  • 监管报送或业务沟通:使用等距分箱,边界直观易解释。
  • 漂移归因与深度分析:使用决策树分箱,定位具体漂移区间。

4.6 分箱方法选择流程图

PSI分箱方法选择决策流程 开始:确定PSI监控目标 监控频率? 高频 vs 低频 高频(日/周) 等频分箱 低频(月/季) 等距分箱 需要归因? 漂移定位 是 决策树分箱 否 保持等频 业务解释需求? 监管/业务沟通 高 保持等距 低 切换等频 最终分箱方案 固定边界 + 10箱 + 按场景选型 关键原则 1. 分箱边界一旦确定,在监控周期内保持固定,不可随新数据动态调整。 2. 箱数建议5-10箱,避免过少漏报或过多误报。 3. 决策树分箱仅用于回顾性归因分析,不适合实时监控流水线。 4. 若业务要求边界为整数,等距分箱是唯一选择。

4.7 代码示例:三种分箱方法实现

以下Python代码演示了三种分箱方法在PSI计算中的应用。假设已有预期期分数 score_base 与当前期分数 score_current。

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier

# 示例数据
np.random.seed(42)
score_base = np.random.normal(600, 100, 10000)
score_current = np.random.normal(620, 110, 10000)

# ---------- 等距分箱 ----------
def equal_width_binning(score_base, score_current, n_bins=10):
    min_val = min(score_base.min(), score_current.min())
    max_val = max(score_base.max(), score_current.max())
    bins = np.linspace(min_val, max_val, n_bins + 1)
    base_binned = np.digitize(score_base, bins)
    current_binned = np.digitize(score_current, bins)
    return base_binned, current_binned, bins

# ---------- 等频分箱 ----------
def equal_freq_binning(score_base, score_current, n_bins=10):
    percentiles = np.linspace(0, 100, n_bins + 1)[1:-1]
    bins = np.percentile(score_base, percentiles)
    bins = np.concatenate(([score_base.min() - 1], bins, [score_base.max() + 1]))
    base_binned = np.digitize(score_base, bins)
    current_binned = np.digitize(score_current, bins)
    return base_binned, current_binned, bins

# ---------- 决策树分箱 ----------
def tree_binning(score_base, score_current, max_depth=3):
    X = np.concatenate([score_base, score_current]).reshape(-1, 1)
    y = np.concatenate([np.zeros(len(score_base)), np.ones(len(score_current))])
    clf = DecisionTreeClassifier(max_depth=max_depth, min_samples_leaf=0.05)
    clf.fit(X, y)
    thresholds = clf.tree_.threshold[clf.tree_.feature != -2]
    thresholds = np.sort(thresholds[thresholds != -2])
    bins = np.concatenate(([X.min() - 1], thresholds, [X.max() + 1]))
    base_binned = np.digitize(score_base, bins)
    current_binned = np.digitize(score_current, bins)
    return base_binned, current_binned, bins

# ---------- PSI计算函数 ----------
def calculate_psi(base_binned, current_binned, n_bins):
    base_counts = np.bincount(base_binned, minlength=n_bins+1)[1:n_bins+1]
    current_counts = np.bincount(current_binned, minlength=n_bins+1)[1:n_bins+1]
    base_pct = base_counts / base_counts.sum()
    current_pct = current_counts / current_counts.sum()
    # 避免除零
    base_pct = np.clip(base_pct, 0.001, 0.999)
    current_pct = np.clip(current_pct, 0.001, 0.999)
    psi = np.sum((current_pct - base_pct) * np.log(current_pct / base_pct))
    return psi

# 计算三种分箱的PSI
n_bins = 10
base_bin_eqw, curr_bin_eqw, _ = equal_width_binning(score_base, score_current, n_bins)
base_bin_eqf, curr_bin_eqf, _ = equal_freq_binning(score_base, score_current, n_bins)
base_bin_tree, curr_bin_tree, _ = tree_binning(score_base, score_current, max_depth=3)

psi_eqw = calculate_psi(base_bin_eqw, curr_bin_eqw, n_bins)
psi_eqf = calculate_psi(base_bin_eqf, curr_bin_eqf, n_bins)
psi_tree = calculate_psi(base_bin_tree, curr_bin_tree, n_bins)

print(f"等距分箱 PSI: {psi_eqw:.4f}")
print(f"等频分箱 PSI: {psi_eqf:.4f}")
print(f"决策树分箱 PSI: {psi_tree:.4f}")
输出解读:在本示例中,等频分箱PSI通常介于等距与决策树之间。决策树分箱因聚焦于分布差异最大的分割点,PSI值往往最高,但也最易受噪声影响。实际应用中,建议同时计算三种分箱的PSI,观察趋势一致性,避免单一方法误判。

4.8 分箱边界固定性验证

无论采用哪种分箱方法,边界固定是PSI计算的前提。以下验证方法可确保边界一致性:

  • 边界存储:将分箱边界以JSON或数据库表形式持久化,每次计算PSI时读取同一边界。
  • 边界漂移检测:若当前期分数超出历史边界范围,需记录“越界样本”占比,作为额外告警信号。
  • 定期重分箱:每季度或半年重新评估分箱边界,但新旧边界切换时需并行计算PSI,确保趋势连续。
边界类型 固定方式 更新频率
等距边界 基于分数范围固定 仅当评分卡版本更新时
等频边界 基于预期期分位数固定 每季度或半年
决策树边界 基于两期数据训练固定 每次归因分析时重新训练
常见错误:部分实践者每次计算PSI时重新分箱,导致边界随当前期数据变化。这会使PSI失去“固定参照系”的意义,无法区分“分布漂移”与“分箱变化”。务必使用固定边界。

4.9 本章小结

  • PSI分箱的核心是“固定边界下的分布对比”,分箱方法的选择直接影响监控效果。
  • 等距分箱适合业务解释与监管报送,等频分箱是日常监控的稳健选择,决策树分箱专用于漂移归因分析。
  • 箱数建议5-10箱,在敏感度与稳定性之间取得平衡。
  • 分箱边界一旦确定,应持久化存储,避免随新数据动态变化。
  • 实际应用中,可并行计算多种分箱方法的PSI,综合判断漂移信号。