3. PSI 计算的分箱策略:等距分箱、等频分箱、分位数分箱的优缺点对比,以及精算评分卡场景下的推荐分箱方式

在精算模型监控中,PSI(Population Stability Index)的计算高度依赖分箱策略。不同的分箱方式会直接影响 PSI 值的敏感度与稳定性,进而影响告警阈值的有效性。本节将系统对比三种主流分箱策略,并给出精算评分卡场景下的推荐方案。

3.1 三种分箱策略的核心原理

分箱策略 定义 分箱依据 典型应用场景
等距分箱 将变量取值范围划分为宽度相等的区间 数值区间长度固定 变量分布均匀、无极端值场景
等频分箱 使每个分箱包含大致相等的样本数量 样本频次均等 样本分布不均、需保证每箱统计稳定性
分位数分箱 基于数据的分位数点进行切分 数据分布的分位点 评分卡分数分布监控、尾部风险关注

3.2 优缺点深度对比

对比维度 等距分箱 等频分箱 分位数分箱
计算复杂度 低,直接按区间长度划分 中,需排序并累计频次 中高,需计算分位点
对极端值敏感度 高,极端值易导致空箱或单箱占比过高 低,极端值会被分散到各箱 低,分位点天然抗极端值
分布变化捕捉能力 弱,分布偏移可能被区间宽度掩盖 中,频次变化可反映分布漂移 强,分位点变化直接反映分布形态改变
PSI 稳定性 不稳定,空箱或零占比易导致 PSI 计算异常 较稳定,每箱均有样本保障 稳定,分位点自适应数据分布
业务可解释性 高,区间边界直观 低,边界值无业务含义 中,分位点可对应评分等级
精算实务提示: 等距分箱在评分卡场景中极易出现“空箱”问题——当模型分数分布发生偏移时,部分区间可能无样本落入,导致 PSI 公式中分母为 0 或占比为 0,引发计算异常。因此,精算评分卡监控中应优先避免使用纯等距分箱。

3.3 精算评分卡场景下的推荐分箱方式

精算评分卡输出的分数通常具有明确的业务含义(如 300-850 分),且分数分布往往呈现偏态或双峰特征。基于上述对比,推荐采用 分位数分箱 作为 PSI 计算的主策略,并辅以以下优化规则:

  1. 分箱数量固定为 10 箱:以十分位点为切分点,每箱代表 10% 的样本量,保证统计稳定性。
  2. 边界对齐评分卡等级:将分位点与业务定义的“优/良/中/差”等级边界对齐,增强可解释性。
  3. 尾部箱合并处理:当首尾分箱样本占比低于 5% 时,与相邻箱合并,避免稀疏箱导致的 PSI 波动。
  4. 基准期分箱固定:以模型上线时的基准期数据确定分位点边界,后续监控期沿用同一套边界,确保 PSI 纵向可比。
最佳实践: 在精算评分卡监控中,建议将分位数分箱与等频分箱结合使用——基准期采用分位数分箱确定边界,监控期采用等频分箱验证样本量分布是否均匀。两种策略的 PSI 结果应趋势一致,若出现背离,则提示可能存在数据质量问题。

3.4 分箱策略选择流程图

PSI 分箱策略选择决策流程 开始分箱策略选择 是否有明确的业务等级边界? (如评分卡等级、风险分类) 推荐:分位数分箱 边界对齐业务等级,10箱固定 每箱样本量是否 > 100? (尾部箱样本量检查) 直接使用分位数分箱 合并尾部箱 与相邻箱合并 说明:分位数分箱为精算评分卡场景首选,等频分箱可作为验证策略,等距分箱仅适用于分布均匀的辅助变量 基准期分箱边界固定后,监控期沿用相同边界,确保 PSI 纵向可比

3.5 三种分箱策略的 PSI 计算对比示例

以下代码展示了在 Python 中实现三种分箱策略并计算 PSI 的核心逻辑:

import numpy as np
import pandas as pd

def psi_equidistant(actual, expected, bins=10):
    """等距分箱 PSI 计算"""
    min_val, max_val = min(expected.min(), actual.min()), max(expected.max(), actual.max())
    bin_edges = np.linspace(min_val, max_val, bins + 1)
    return _psi_from_edges(actual, expected, bin_edges)

def psi_equifrequency(actual, expected, bins=10):
    """等频分箱 PSI 计算(基于期望分布的分位点)"""
    bin_edges = np.percentile(expected, np.linspace(0, 100, bins + 1))
    return _psi_from_edges(actual, expected, bin_edges)

def psi_quantile(actual, expected, bins=10):
    """分位数分箱 PSI 计算(基于基准期分位点)"""
    bin_edges = np.percentile(expected, np.linspace(0, 100, bins + 1))
    # 分位数分箱与等频分箱边界相同,但分位数分箱强调边界固定
    return _psi_from_edges(actual, expected, bin_edges)

def _psi_from_edges(actual, expected, bin_edges):
    """通用 PSI 计算函数"""
    actual_bins = np.histogram(actual, bins=bin_edges)[0]
    expected_bins = np.histogram(expected, bins=bin_edges)[0]
    actual_pct = actual_bins / len(actual)
    expected_pct = expected_bins / len(expected)
    # 处理零占比:加极小值避免除零
    actual_pct = np.where(actual_pct == 0, 1e-6, actual_pct)
    expected_pct = np.where(expected_pct == 0, 1e-6, expected_pct)
    psi = np.sum((actual_pct - expected_pct) * np.log(actual_pct / expected_pct))
    return psi
精算实务避坑: 等距分箱在评分卡分数偏移场景下,极易出现“空箱”导致 PSI 计算异常。例如,当模型分数整体上移 50 分时,等距分箱可能使前 2 箱为空,后 2 箱占比过高,PSI 值被严重高估。而分位数分箱由于边界随分布自适应,能更真实地反映分布形态变化。

3.6 精算评分卡场景推荐总结

场景 推荐分箱策略 分箱数量 边界确定方式 监控期边界
评分卡主模型监控 分位数分箱 10 箱 基准期十分位点 固定不变
评分卡子模型/辅助变量 等频分箱 10-20 箱 基准期等频边界 固定不变
分布均匀的连续变量 等距分箱 10 箱 等距区间 固定不变
尾部风险关注场景 分位数分箱 + 尾部合并 8-10 箱 分位点 + 尾部合并规则 固定不变

精算评分卡场景下,分位数分箱 是 PSI 计算的首选策略。它既能保证每箱的统计稳定性,又能与业务等级边界对齐,同时具备对分布偏移的敏感捕捉能力。在实际落地中,建议以分位数分箱为主策略,等频分箱作为验证策略,等距分箱仅用于分布均匀的辅助变量监控。