2. 尖峰告警定义:什么是尖峰告警,与常规PSI趋势告警的区别
在贷后预警体系中,PSI(Population Stability Index)是衡量客群分布偏移的核心指标。然而,并非所有PSI波动都代表相同的风险含义。本章将明确尖峰告警的定义,并系统对比其与常规PSI趋势告警在触发逻辑、监控粒度、业务解读上的本质区别。
2.1 尖峰告警的定义
尖峰告警(Spike Alert)是指在极短时间窗口内(通常为单日或单批次),PSI值出现瞬时、剧烈、超过预设阈值的异常跳变。它不关注长期漂移趋势,而是聚焦于“突发性”与“幅度”两个维度。
核心特征: 单点爆发、幅度大、持续时间短、通常伴随业务异常事件(如数据断流、策略误配、外部欺诈攻击)。
| 维度 | 尖峰告警特征 |
|---|---|
| 时间窗口 | 单日 / 单批次(通常 ≤ 1天) |
| PSI变化幅度 | 瞬时跳变 ≥ 0.25(或自定义高阈值) |
| 持续时间 | 短(1~3个监控周期后快速回落) |
| 触发条件 | 单点绝对值超过告警线,不依赖历史趋势 |
| 典型根因 | 数据异常、策略误配、外部冲击、系统故障 |
2.2 常规PSI趋势告警的定义
常规PSI趋势告警(Trend Alert)关注的是PSI在连续多个监控周期(通常为周、月或滚动窗口)内的累积漂移。它通过移动平均、指数平滑或回归斜率来识别客群结构的渐进式恶化。
典型场景: 客群信用质量缓慢下沉、产品政策长期调整导致的分布偏移。趋势告警更适用于“慢变量”风险监控。
2.3 核心区别对比
以下表格从监控逻辑、业务含义、响应策略三个层面,系统对比两种告警模式:
| 对比维度 | 尖峰告警 | 常规趋势告警 |
|---|---|---|
| 监控粒度 | 单日 / 单批次 | 周 / 月 / 滚动窗口 |
| 触发逻辑 | 瞬时绝对值超过阈值 | 累积漂移超过趋势线或移动平均线 |
| 告警形态 | 尖峰脉冲(Spike) | 斜坡漂移(Drift) |
| 业务解读 | 突发异常事件,需立即排查 | 结构缓慢变化,需策略调优 |
| 响应时效 | 小时级 / 当天 | 周级 / 月级 |
| 误报率 | 较高(易受单点噪声干扰) | 较低(平滑后更稳定) |
| 典型阈值 | PSI ≥ 0.25(单点) | PSI累积 ≥ 0.10(滚动窗口) |
2.4 尖峰告警 vs 趋势告警:SVG对比图
下图直观展示两种告警在PSI时序曲线上的形态差异:
2.5 两种告警的适用场景对比
在实际贷后监控中,两种告警模式并非互斥,而是互补关系。以下列表总结各自的最佳适用场景:
- 尖峰告警适用场景:
- 数据源断流或重复推送导致的PSI瞬时跳变
- 风控策略误上线(如评分卡阈值错误)引发的客群分布突变
- 外部欺诈团伙集中攻击导致的短期客群异化
- 系统升级或模型版本切换后的即时验证
- 趋势告警适用场景:
- 宏观经济下行导致的客群信用质量缓慢下沉
- 产品利率调整后,优质客群逐步流失的长期漂移
- 渠道获客质量持续下降的渐进式恶化
- 模型老化导致的区分能力缓慢衰减
2.6 组合监控策略建议
重要提示: 单一依赖尖峰告警会导致“噪声过载”,单一依赖趋势告警则会“错过突发风险”。建议采用双轨并行策略:尖峰告警用于实时应急响应,趋势告警用于周期性策略调优。
下表给出推荐的组合监控参数:
| 监控层级 | 告警类型 | 时间窗口 | 阈值 | 响应动作 |
|---|---|---|---|---|
| L1 实时 | 尖峰告警 | 单日 | PSI ≥ 0.25 | 立即排查、冻结策略、通知风控值班 |
| L2 日度 | 尖峰告警 | 3日滚动 | PSI ≥ 0.20 | 触发二次复核、生成异常事件报告 |
| L3 周度 | 趋势告警 | 4周滚动 | 累积PSI ≥ 0.10 | 启动策略复盘、模型校准评估 |
| L4 月度 | 趋势告警 | 12周滚动 | 累积PSI ≥ 0.15 | 提交风控委员会、启动模型迭代 |
2.7 尖峰告警的PSI计算逻辑
尖峰告警的PSI计算与常规PSI公式一致,但对比基准和时间窗口不同:
# 尖峰告警PSI计算示例(单日 vs 基准分布)
import numpy as np
def calculate_spike_psi(actual_dist, expected_dist, bins=10):
"""
尖峰告警PSI计算
:param actual_dist: 当日实际客群分布(数组)
:param expected_dist: 基准客群分布(通常为近30天稳定分布)
:param bins: 分箱数
:return: PSI值
"""
# 分箱处理
actual_bins = np.histogram(actual_dist, bins=bins, range=(0,1))[0] / len(actual_dist)
expected_bins = np.histogram(expected_dist, bins=bins, range=(0,1))[0] / len(expected_dist)
# 避免除零
actual_bins = np.clip(actual_bins, 1e-6, None)
expected_bins = np.clip(expected_bins, 1e-6, None)
# PSI计算
psi = np.sum((actual_bins - expected_bins) * np.log(actual_bins / expected_bins))
return psi
# 示例:当日PSI=0.28,触发尖峰告警
spike_psi = calculate_spike_psi(actual_distribution, baseline_distribution)
print(f"尖峰PSI: {spike_psi:.4f}") # 输出: 尖峰PSI: 0.2812
关键差异: 尖峰告警的基准分布通常固定为“稳定期分布”或“前30天滚动中位数分布”,而非趋势告警中使用的“前一周/前一个月分布”。这确保了尖峰检测对“瞬时偏离”的敏感性。