4. PSI漂移根因分析流程

当PSI告警触发后,不能直接进入模型迭代或回退操作。必须按照标准化的根因分析流程,逐层定位漂移来源,判断是数据质量问题、特征分布变化、业务策略调整还是外部环境变化所致。本节将流程拆解为五个核心步骤。

4.1 流程总览

PSI漂移根因分析采用“漏斗式”排查策略:从告警信号出发,先排除数据层异常,再聚焦特征层,最后落到业务层和影响评估。每一步都设置明确的判定标准和输出物。

核心原则: 先校验数据质量,再分析特征分布;先定位漂移特征,再追溯业务原因;先评估影响范围,再决定处置策略。
PSI漂移根因分析五步流程 ① 告警接收 PSI阈值触发 ② 数据校验 质量/口径/缺失 ③ 特征级PSI分解 单特征/组合特征 ④ 业务归因 策略/客群/渠道 ⑤ 影响评估 AUC/KS/通过率 反馈闭环:评估结果驱动模型迭代或特征工程 关键判定节点 • 数据校验未通过 → 修复数据管道,重新计算PSI • 特征级PSI分解定位到1~3个主导特征 → 进入业务归因 • 业务归因确认策略变更 → 评估是否需要调整模型阈值或特征 • 影响评估显示模型性能下降超过容忍线 → 启动模型迭代流程

4.2 步骤一:告警接收与分级

PSI告警并非所有都需要立即响应。根据漂移严重程度和影响范围,将告警分为三个等级,不同等级对应不同的响应时效和处理流程。

告警等级 PSI阈值范围 响应时效 处理要求
L1 严重 PSI > 0.25 2小时内 立即暂停模型决策,启动紧急排查
L2 中等 0.15 < PSI ≤ 0.25 24小时内 启动根因分析,输出影响评估报告
L3 关注 0.10 < PSI ≤ 0.15 72小时内 纳入监控周报,持续观察趋势
实操建议: 告警接收环节应自动附带告警上下文信息:触发时间、PSI值、对比窗口(T vs T-1/T-4/T-12)、涉及模型版本、数据源批次号。这些信息能大幅缩短后续排查时间。

4.3 步骤二:数据校验

数据校验是根因分析的第一道过滤网。大量PSI告警的根因并非真实分布漂移,而是数据管道异常。校验内容覆盖三个维度:

  • 数据完整性: 检查特征缺失率是否突增、记录数是否骤降、关键字段是否为空。
  • 数据口径一致性: 确认特征计算逻辑、衍生规则、编码映射是否在对比窗口内发生过变更。
  • 数据时效性: 验证当前批次数据是否包含完整的时间窗口,是否存在数据延迟或截断。
常见陷阱: 特征缺失率从1%上升到5%时,PSI可能被推高0.05~0.10。此时应先修复缺失值处理逻辑,而非直接归因于客群变化。数据校验环节能避免至少30%的无效告警。

4.4 步骤三:特征级PSI分解

通过数据校验后,进入特征级PSI分解。这一步的目标是找出导致整体PSI漂移的主导特征。常用的分解方法有两种:

4.4.1 单特征PSI贡献度

计算每个特征在整体PSI中的贡献占比,按贡献度从高到低排序。通常前3个特征的累计贡献度会超过80%。

特征名称 单特征PSI 贡献占比 累计贡献 漂移方向
收入等级 0.082 41.0% 41.0% 低收入组占比上升
负债率 0.056 28.0% 69.0% 高负债组占比上升
查询次数 0.034 17.0% 86.0% 高频查询组占比上升
其他特征 0.028 14.0% 100.0% —

4.4.2 组合特征交互分析

当单特征PSI贡献度分散、无明显主导特征时,需要检查特征之间的交互效应。例如:收入等级和负债率单独看PSI不高,但两者联合分布出现明显偏移。

# 组合特征PSI计算示例(Python伪代码)
def compute_joint_psi(df_ref, df_cur, features, bins=10):
    # 对两个特征进行联合分箱
    df_ref['joint_bin'] = pd.cut(df_ref[features[0]], bins=bins).astype(str) + '_' + \
                          pd.cut(df_ref[features[1]], bins=bins).astype(str)
    df_cur['joint_bin'] = pd.cut(df_cur[features[0]], bins=bins).astype(str) + '_' + \
                          pd.cut(df_cur[features[1]], bins=bins).astype(str)
    
    # 计算联合分布PSI
    ref_dist = df_ref['joint_bin'].value_counts(normalize=True).sort_index()
    cur_dist = df_cur['joint_bin'].value_counts(normalize=True).sort_index()
    
    psi = 0
    for bin_label in ref_dist.index:
        p = ref_dist[bin_label]
        q = cur_dist.get(bin_label, 0.0001)
        psi += (p - q) * np.log(p / q)
    return psi
特征级PSI分解决策树 整体PSI = 0.20 单特征PSI贡献度排序 收入等级 41% 负债率 28% 查询次数 17% 组合特征交互分析 收入×负债率 收入×查询 负债率×查询 结论:收入等级和负债率联合漂移贡献占比达69%,进入业务归因 若单特征贡献分散且组合交互显著,优先排查业务策略变更

4.5 步骤四:业务归因

特征级PSI分解定位到具体特征后,需要与业务团队协作,追溯特征分布变化的业务原因。常见的业务归因方向包括:

  • 客群结构变化: 渠道投放策略调整、获客地域偏移、季节性客群波动。
  • 产品策略调整: 额度审批规则变更、利率定价策略调整、产品准入标准放宽/收紧。
  • 外部环境变化: 监管政策出台、宏观经济波动、行业竞争格局变化。
  • 数据源变更: 第三方数据供应商切换、数据采集字段调整、数据清洗逻辑更新。
归因验证方法: 对每个候选业务原因,构造“反事实分布”——假设该业务变更未发生,特征分布应是什么样。将反事实分布与实际分布对比,若PSI显著下降,则确认该原因为主导因素。

4.6 步骤五:影响评估

根因分析的最后一步是评估漂移对模型实际业务效果的影响。不能仅凭PSI值判断模型是否需要迭代,必须结合模型性能指标和业务指标综合决策。

评估维度 核心指标 判定标准 处置建议
区分能力 AUC / KS 下降超过0.03 启动模型迭代
校准度 校准曲线 / Brier Score 校准偏差超过5% 调整模型阈值
业务通过率 审批通过率 / 授信通过率 波动超过10% 评估策略影响
坏账率 逾期率 / 不良率 上升超过20% 紧急干预
影响评估报告输出: 每次根因分析完成后,应输出标准化的《PSI漂移根因分析报告》,包含:告警基本信息、数据校验结果、特征级PSI分解表、业务归因结论、影响评估矩阵、处置建议。报告存档作为模型监控历史记录,用于后续趋势分析和模型迭代参考。