4. 数据准备:历史坏账率数据清洗、分箱处理与时间窗口对齐

在构建 PSI 漂移监控体系之前,必须对原始坏账率数据进行系统化的预处理。原始数据通常包含缺失值、异常波动、口径不一致以及时间戳错位等问题,直接计算 PSI 会导致监控信号失真。本章节聚焦三个核心环节:数据清洗、分箱处理与时间窗口对齐,确保输入 PSI 计算的数据具备一致性、可比性与稳定性。

4.1 数据清洗:剔除噪声与修复异常

坏账率原始数据来自多个业务系统(贷后系统、核算系统、催收系统),常见问题包括:

  • 缺失值:某日或某批次坏账率字段为空,通常由数据采集延迟或系统故障导致。
  • 极端值:单日坏账率突增至正常水平的 5 倍以上,可能源于大额核销或数据重复上报。
  • 口径漂移:不同时期对“坏账”的定义不一致(如 M3+ 与 M6+ 混用)。
  • 重复记录:同一批次被多次统计,导致坏账率虚高。
清洗规则示例:
  • 缺失率超过 30% 的月份直接剔除,不参与 PSI 计算。
  • 单日坏账率超过历史均值 ±3 倍标准差时,使用前后 7 日中位数填充。
  • 统一坏账口径为“逾期 90 天以上且未核销金额 / 期末在贷余额”。
  • 按批次 ID 去重,保留最新一条记录。
异常类型 检测方法 处理策略
缺失值 isnull() 统计 线性插值或前向填充
极端值 Z-score > 3 中位数平滑
口径漂移 字段注释比对 统一映射至标准口径
重复记录 主键去重 保留最新时间戳

4.2 分箱处理:将连续坏账率转化为离散分布

PSI 的计算基础是离散概率分布,因此需要将连续的坏账率数值划分为若干个区间(分箱)。分箱质量直接影响 PSI 的敏感度与稳定性。

4.2.1 分箱方法选择

  • 等距分箱:按固定宽度划分区间(如 0-1%, 1-2%, 2-3%...)。适用于坏账率分布均匀的场景,但容易在稀疏区间产生零计数。
  • 等频分箱:每个箱体包含相同数量的样本。适用于长尾分布,能保证每个箱体都有统计意义。
  • 业务规则分箱:根据风控阈值划分(如 0-0.5% 正常, 0.5-2% 关注, 2-5% 预警, >5% 高危)。可解释性强,但需要专家经验。
实践建议:在 PSI 监控中优先使用 等频分箱,确保每个箱体在基准期与对比期都有足够的样本量(建议每个箱体占比不低于 5%)。若业务有明确阈值,可结合业务规则分箱作为辅助验证。

4.2.2 分箱参数设定

参数 推荐值 说明
箱体数量 10 ~ 20 过少会丢失细节,过多会导致零箱体
最小箱体占比 5% 低于此阈值合并至相邻箱体
边界处理 左闭右开 避免数据点落在边界上产生歧义
# Python 示例:等频分箱实现
import pandas as pd
import numpy as np

def equal_freq_binning(data, n_bins=10):
    """
    对坏账率序列进行等频分箱
    :param data: 坏账率 Series
    :param n_bins: 箱体数量
    :return: 分箱标签与边界
    """
    # 使用分位数划分边界
    bins = pd.qcut(data, q=n_bins, duplicates='drop', retbins=True)
    labels, edges = bins
    return labels, edges

# 示例调用
bad_rate = np.random.rand(1000) * 0.1  # 模拟 0-10% 坏账率
labels, edges = equal_freq_binning(bad_rate, n_bins=10)
print("分箱边界:", np.round(edges, 4))

4.3 时间窗口对齐:统一基准期与对比期

PSI 漂移监控的核心是比较两个时间窗口的分布差异。时间窗口对齐不当会导致“假漂移”——例如将淡季与旺季的坏账率直接对比,或使用不同长度的窗口。

4.3.1 窗口定义规则

  • 基准窗口(Reference Window):通常选取业务稳定期,如最近 12 个月或最近 4 个季度。窗口长度应覆盖至少一个完整业务周期。
  • 对比窗口(Monitoring Window):当前监控期,长度必须与基准窗口一致。例如基准窗口为 12 个月,对比窗口也必须是 12 个月。
  • 滑动步长:按月或按周滑动,推荐按月滑动以匹配财务报表周期。
常见陷阱:不要将不同长度的窗口直接比较。例如基准窗口用 12 个月数据,对比窗口只用 3 个月数据,会导致 PSI 值被低估或高估。必须保持窗口长度严格一致。

4.3.2 对齐流程

  1. 确定基准窗口的起止时间(如 2023-01 至 2023-12)。
  2. 将对比窗口设置为相同长度(如 2024-01 至 2024-12)。
  3. 对两个窗口内的坏账率数据分别进行分箱,得到两个概率分布。
  4. 检查两个窗口的箱体边界是否一致(若不一致,需重新分箱或插值对齐)。
时间窗口对齐与分箱流程 原始坏账率数据 数据清洗 基准窗口 (12个月) 对比窗口 (12个月) 等频分箱 等频分箱 分布对齐与 PSI 计算 关键对齐规则 • 窗口长度必须一致 • 分箱边界必须相同 • 滑动步长按月推荐

4.4 数据准备清单与质量检查

在进入 PSI 计算之前,建议按以下清单逐项确认数据准备状态:

检查项 通过标准 验证方法
缺失值处理 无缺失值或已合理填充 isnull().sum() == 0
极端值处理 无超过 ±3σ 的异常点 Z-score 统计
口径一致性 所有记录使用同一坏账定义 字段值枚举检查
分箱稳定性 每个箱体占比 ≥ 5% value_counts(normalize=True)
窗口长度 基准与对比窗口长度相同 len(reference) == len(monitoring)
时间连续性 窗口内无缺失月份 日期序列差分检查
数据准备阶段产出物:
  • 清洗后的坏账率时序表(含日期、坏账率、批次标识)
  • 分箱边界定义表(箱体编号、下限、上限、基准期占比、对比期占比)
  • 时间窗口对齐配置(基准窗口起止、对比窗口起止、滑动步长)

完成上述三个步骤后,即可获得标准化、可比较的坏账率分布数据,为后续 PSI 计算与漂移判定奠定可靠基础。