4、迁移矩阵可视化:热力图展示状态转移、桑基图展示客户流动路径、矩阵稳定性分析

迁移矩阵是贷后预警体系的核心量化工具,它记录了客户在不同预警状态(如正常、关注、次级、可疑、损失)之间的月度转移概率。单纯看数字表格难以发现趋势和异常,因此需要借助可视化手段进行深度解读。本节围绕三种核心可视化方法展开:热力图用于快速识别状态转移的集中区域,桑基图用于追踪客户个体的流动路径,矩阵稳定性分析用于评估模型在时间维度上的可靠性。

4.1 热力图:状态转移的密度与方向

热力图将迁移矩阵中的概率值映射为颜色深浅,帮助分析师一眼定位“高聚集”和“异常偏离”区域。以下是一个典型的月度迁移矩阵热力图示例,展示了从“正常”到“损失”五个状态之间的转移概率分布。

月度迁移矩阵热力图(示例) 本期\下期 正常 关注 次级 可疑 损失 正常 关注 次级 可疑 损失 0.85 0.10 0.03 0.01 0.01 0.20 0.60 0.12 0.05 0.03 0.05 0.15 0.55 0.18 0.07 0.02 0.08 0.20 0.50 0.20 0.01 0.02 0.05 0.10 0.82 高概率 (≥0.50) 中概率 (0.10~0.49) 低概率 (<0.10) 回流概率 💡 对角线(绿色)表示状态保持稳定;右上角(红色)表示劣化;左下角(蓝色)表示回流改善。
热力图解读要点:
  • 对角线高亮:正常→正常、损失→损失等对角线格子颜色最深,说明大部分客户状态保持稳定,这是模型收敛性的基础。
  • 右上角劣化区:正常→次级、关注→可疑等格子若出现异常高值(如超过5%),需立即排查该批次客户的共性风险特征。
  • 左下角回流区:次级→关注、可疑→次级等格子反映催收或重组措施的效果,若回流概率持续下降,说明清收手段失效。

4.2 桑基图:客户流动路径与归因

热力图展示的是“概率密度”,而桑基图展示的是“客户数量”在状态之间的实际流动路径。桑基图通过不同宽度的流带,直观呈现客户从初始状态到最终状态的迁移规模,特别适合用于坏样本归因分析——即找出哪些路径导致了最多的坏账生成。

客户流动桑基图(简化示意) 正常 (800) 关注 (150) 次级 (40) 可疑 (10) 正常 (700) 关注 (120) 次级 (60) 可疑 (20) 🔍 流带宽度代表客户数量。正常→次级流带变宽,意味着劣化加速,需重点分析该路径的客户画像。
桑基图在坏样本归因中的典型应用:
  1. 识别“劣化主干道”:如果“正常→次级”流带宽度连续两个月增加超过20%,说明预警模型对早期风险信号的捕捉存在滞后。
  2. 评估“回流有效性”:“次级→关注”流带宽度若收窄,表明催收策略对特定客群失效,需要调整处置手段。
  3. 发现“跳跃式劣化”:正常→可疑的直接流带(跳过关注和次级)若出现,通常意味着欺诈或突发性风险事件,应触发人工复核。

4.3 矩阵稳定性分析:时间维度的可靠性评估

单月的迁移矩阵只能反映静态截面,而矩阵稳定性分析关注的是迁移概率在连续月份之间的波动程度。如果某个转移概率(如正常→次级)在3个月内从2%跳变到8%,说明模型或客群结构发生了显著变化,需要及时归因。

常用的稳定性评估指标包括:

指标名称 计算公式 阈值建议 异常含义
状态转移波动率 |Pt - Pt-1| / Pt-1 < 30% 为正常 波动率超过50%时,需排查外部宏观因素或内部策略变更
对角线稳定性指数 ∑(对角线概率的月度标准差) < 0.05 为稳定 指数上升说明客户状态切换频繁,模型区分度下降
劣化迁移比 ∑(劣化方向概率) / ∑(改善方向概率) 1.0 ~ 1.5 为正常 比值持续大于2.0,说明资产质量加速恶化
⚠️ 矩阵稳定性分析常见误区:
  • 忽略样本量变化:当月新增客户过多时,迁移概率会被稀释,应使用“标准化迁移矩阵”或“同批次客户追踪”来修正。
  • 只看均值不看分布:整体稳定性指标正常,但某个特定状态(如“次级→可疑”)的波动可能已经失控,需要按状态分层监控。
  • 过度依赖单一阈值:不同产品、不同周期的迁移矩阵稳定性基线不同,建议按产品线分别设定预警阈值。

4.4 可视化组合策略:从发现到归因

在实际贷后监控中,三种可视化方法通常组合使用,形成完整的分析闭环:

  1. 第一步:热力图扫描——快速定位本月迁移矩阵中颜色异常的格子(如劣化区突然变红)。
  2. 第二步:桑基图追踪——针对异常格子对应的路径,查看实际客户流动数量,判断是普遍现象还是个别大额客户导致。
  3. 第三步:稳定性验证——将异常路径的迁移概率与过去3~6个月的基线对比,确认是趋势性变化还是偶发波动。

以下是一个完整的归因分析流程示例:

# 伪代码:迁移矩阵稳定性监控与归因流程
def monitor_migration_matrix(current_matrix, history_matrices, threshold=0.3):
    alerts = []
    for state_from in states:
        for state_to in states:
            current_prob = current_matrix[state_from][state_to]
            baseline_prob = np.mean([m[state_from][state_to] for m in history_matrices])
            volatility = abs(current_prob - baseline_prob) / baseline_prob
            if volatility > threshold:
                alerts.append({
                    'path': f'{state_from}→{state_to}',
                    'current': current_prob,
                    'baseline': baseline_prob,
                    'volatility': volatility
                })
    return alerts

# 输出示例
# alerts = [
#   {'path': '正常→次级', 'current': 0.08, 'baseline': 0.03, 'volatility': 1.67},
#   {'path': '关注→可疑', 'current': 0.12, 'baseline': 0.06, 'volatility': 1.00}
# ]
案例提示:某消费金融公司通过热力图发现“正常→次级”转移概率从2%升至7%,桑基图追踪显示该路径涉及3000名客户,其中60%为“多头借贷”客群。稳定性分析确认该波动已持续3个月且劣化迁移比达到2.3。最终归因结论:多头借贷客群的预警规则需要收紧,同时调整该客群的催收优先级。