2. 回放对比需求分析
在风控系统演进过程中,每一次模型升级、策略调整或架构变更都伴随着不可忽视的风险。回放对比(Replay & Compare)正是为了在灰度或全量上线前,用历史真实流量验证新版本的正确性与性能。本章从业务场景和对比维度两个层面,拆解为什么需要回放对比。
2.1 为什么需要回放对比?
风控网关作为流量入口,任何变更都可能影响数亿笔交易。回放对比的核心价值在于:用历史数据模拟未来,用对比结果量化风险。以下三个业务场景最能说明其必要性。
| 业务场景 | 核心诉求 | 回放对比解决的问题 |
|---|---|---|
| 模型迭代 | 新模型效果是否优于旧模型? | 对比新旧模型在同一批请求上的评分分布、拒绝率、AUC 等指标,避免回退风险。 |
| 策略验证 | 新策略规则是否误杀或漏过? | 逐笔对比策略命中结果,发现规则冲突或阈值漂移,确保策略一致性。 |
| 故障排查 | 线上异常是代码 bug 还是数据问题? | 回放故障时段流量,对比正常时段与异常时段的响应差异,快速定位根因。 |
关键洞察: 回放对比不是简单的“跑两遍数据”,而是通过结构化对比,将隐性风险显性化。在金融风控场景中,一次未被发现的策略偏差可能导致千万级损失。
2.2 对比维度:从请求到结果的全链路校验
回放对比需要覆盖风控网关处理的完整链路。我们将其拆解为三个核心维度:请求/响应、耗时、结果一致性。每个维度对应不同的校验目标。
2.2.1 请求/响应维度
校验新老版本在输入输出层面的差异。包括:请求参数是否被正确解析、响应字段是否完整、异常码是否一致。
- 请求侧: 字段映射、参数类型、缺失值处理。
- 响应侧: 决策码、拒绝原因、附加标签(如模型分数、策略命中列表)。
- 边界情况: 超长字段、特殊字符、空值请求的处理是否一致。
2.2.2 耗时维度
性能退化是上线后最常见的回滚原因。回放对比需要精确到每个子环节的耗时变化。
- P50/P99 耗时对比: 新版本是否引入额外延迟?
- 超时比例: 是否因资源竞争导致更多请求超时?
- 耗时分布: 通过直方图对比,发现长尾请求的变化。
2.2.3 结果一致性维度
这是最严格的维度,要求新老版本对同一请求输出完全相同的决策结果。
- 严格一致: 决策码、拒绝原因、模型分数完全相等。
- 宽松一致: 允许分数有微小浮动(如 ±0.01),但决策方向不变。
- 不一致分类: 将不一致结果按严重程度分为“高危”“中危”“低危”,便于人工审核。
实践建议: 在结果一致性对比中,建议先做“严格一致”校验,再对不一致样本做“宽松一致”降噪。这样可以快速过滤掉因浮点精度或随机种子导致的微小差异,聚焦真正的逻辑偏差。
2.3 回放对比流程架构
下图展示了回放对比在风控网关中的整体流程。历史流量从消息队列或日志存储中回放,经过新老两套网关处理后,由对比引擎输出差异报告。
2.4 对比维度与校验粒度
在实际工程中,不同维度的校验粒度差异很大。下表总结了每个维度的典型校验字段和对比方法。
| 对比维度 | 校验字段示例 | 对比方法 | 常见差异类型 |
|---|---|---|---|
| 请求/响应 | requestId, userId, decision, reasonCode, modelScore | 字段级精确匹配 + 空值校验 | 字段缺失、类型转换错误、枚举值不一致 |
| 耗时 | totalTime, modelInferTime, ruleEvalTime | 分位数对比 + 耗时分布直方图 | P99 升高、超时比例增加、长尾请求变多 |
| 结果一致性 | decision, riskLevel, hitRules | 严格相等 / 宽松阈值 / 不一致分类 | 决策翻转、规则命中差异、分数漂移 |
注意: 结果一致性对比中,如果发现“决策翻转”(即旧版本拒绝、新版本通过,或反之),必须标记为高危差异,并触发人工审核。这类差异往往意味着策略逻辑存在根本性变化。
2.5 回放对比的典型输出
一次完整的回放对比作业,最终会输出以下三类结果,用于指导上线决策:
- 通过率对比: 新版本通过率 vs 旧版本通过率,偏差超过阈值则告警。
- 不一致样本明细: 列出所有决策不一致的请求 ID、差异字段、差异值,支持下钻分析。
- 性能对比报告: 包含 P50/P90/P99 耗时、平均耗时、超时比例,以及耗时分布对比图。
下图展示了不一致样本在回放对比中的分类与处理流程。