2. PSI监控体系设计:因子库PSI监控的整体架构、数据流与告警链路
一个稳健的PSI监控体系是因子库稳定性的“免疫系统”。本章从整体架构、数据流转和告警链路三个维度,拆解如何构建一个覆盖全生命周期的PSI监控方案。
2.1 整体架构:三层监控模型
因子库PSI监控体系采用“采集层 → 计算层 → 决策层”三层架构,确保从原始数据到最终告警的端到端闭环。
架构设计原则: 分层解耦、实时与离线并行、阈值可配置、告警可追溯。
| 层级 | 核心组件 | 职责说明 | 技术选型示例 |
|---|---|---|---|
| 采集层 | 数据管道、日志收集器 | 实时/批量采集线上评分分布、特征值分布;记录时间戳与版本号 | Kafka、Flume、Spark Streaming |
| 计算层 | PSI计算引擎、窗口聚合器 | 按时间窗口(日/周/月)计算各因子PSI值;支持滑动窗口与累积窗口 | Flink、Spark SQL、ClickHouse |
| 决策层 | 告警规则引擎、阈值管理器 | 根据预设阈值判断是否触发告警;支持动态阈值与分级告警 | Drools、自研规则引擎、Prometheus Alertmanager |
2.2 数据流:从原始分布到PSI指标
数据流是监控体系的“血液循环”。一个完整的数据流包含5个关键环节,每个环节都需要考虑延迟、准确性和容错。
- 分布采集: 从线上服务日志或数据库抽取评分/特征的分桶计数,按
时间戳 + 模型版本分区存储。 - 分布对齐: 将当前分布与基准分布(如训练集分布或上一周期分布)进行分桶对齐,处理缺失桶和零频桶。
- PSI计算: 逐桶计算
(实际占比 - 预期占比) * ln(实际占比 / 预期占比),累加得到单因子PSI。 - 时序聚合: 按时间窗口(如最近7天滑动窗口)聚合PSI值,生成
因子_PSI_时序表。 - 阈值判定: 将聚合后的PSI值与预设阈值(如0.1、0.25)比较,输出告警等级。
数据流避坑: 分布对齐阶段容易忽略“零桶”问题。当某个分桶在基准分布中有值但当前分布为0时,建议加一个极小平滑值(如1e-6),避免ln(0)导致计算异常。
2.3 告警链路:分级与收敛策略
告警链路的核心目标是“不漏报、不轰炸”。通过分级告警和收敛策略,将有效信息传递给正确的人。
| 告警等级 | PSI阈值范围 | 通知方式 | 响应要求 | 升级条件 |
|---|---|---|---|---|
| INFO(提示) | 0.05 ≤ PSI < 0.10 | 监控看板标记 | 无需立即处理 | 持续3个窗口 → 提升为WARN |
| WARN(关注) | 0.10 ≤ PSI < 0.25 | 邮件 + 企微群消息 | 24h内分析原因 | 持续2个窗口 → 提升为CRITICAL |
| CRITICAL(严重) | PSI ≥ 0.25 | 邮件 + 企微 + 电话 | 2h内响应并介入 | 持续1个窗口 → 触发值班负责人 |
告警收敛要点: 避免“告警风暴”。建议对同一因子在1小时内只发送1次同等级告警;对批量因子同时漂移的情况,合并为一条“批量漂移摘要”告警,而非逐条发送。
2.4 监控体系的关键指标
除了PSI本身,监控体系还需要关注以下元监控指标,确保体系自身健康运行:
- 数据覆盖率: 实际参与PSI计算的因子数 / 因子库总因子数。低于95%需排查采集链路。
- 计算延迟P99: 从数据到达采集层到PSI结果可查询的耗时。建议P99 < 10分钟。
- 告警准确率: 人工确认的有效告警数 / 总告警数。低于80%需调整阈值或规则。
- 误报率: 误报告警数 / 总告警数。高于20%需优化收敛策略。
最佳实践: 建议在监控看板上同时展示“PSI时序曲线”和“因子分布对比直方图”,帮助分析师快速定位漂移发生的具体分桶。