核心要点

  • 首查训练-服务特征一致性(training/serving skew):同一请求线上线下特征值是否逐字段对齐

  • 查标签泄漏/穿越:离线用到了线上拿不到的未来信息或目标相关特征,导致离线虚高

  • 查分布漂移:线上数据分布、流量构成与离线评估集是否一致,评估集是否代表真实线上

  • 查线上特征质量:实时特征延迟、缺失、默认值填充与回填口径,是否和离线计算不同

标准回答

先怀疑「线上线下不一致」,而非模型本身(独占一行)

离线好线上差,绝大多数是工程一致性问题而非模型能力问题。系统化思路是:抓一批线上真实请求,离线重放,逐字段比对特征与打分,定位差异来源。

训练-服务特征一致性(skew)

最常见根因。同一份特征在离线(批计算)和线上(实时计算)用了不同代码/口径/时间窗,导致同一请求特征值不同。解法:统一用 Feature Store 共享特征定义、做线上线下一致性校验与影子比对。

标签泄漏与穿越

离线训练若用到线上推理时拿不到的未来信息或与标签强相关的泄漏特征,离线指标会虚高、线上崩塌。需按时间切分、审计每个特征的可得时点。

数据分布与评估集

线上流量分布、用户构成、长尾场景可能与离线评估集差异大(漂移监控),离线集不代表线上就会高估;同时存在反馈回路(模型影响后续数据)需警惕。

线上特征质量

实时特征可能延迟、缺失、被默认值填充,或上游服务超时降级,使线上输入劣于离线。需监控特征覆盖率/缺失率,并对缺失做与训练一致的处理。

常见误区

⚠️ 常见踩坑

一看线上差就回去重训/调模型,却没先做线上请求离线重放、逐字段比对特征——多数情况下根因是 training/serving skew 或标签泄漏,而非模型不行。

追问

追问 1如何系统性地发现 training/serving skew?

在线上打分时把实际用到的特征快照落日志,离线用同一批样本与同一特征定义重算并逐字段比对,统计不一致率;并搭影子流量:新特征/新模型先旁路计算不影响线上,比对其分布与离线是否一致,发现偏差再上线。根治办法是离线和线上共用同一套特征计算逻辑。

追问 2怎么判断是数据漂移还是特征 bug 导致的线上下降?

特征 bug 通常表现为某些字段分布突变、大量缺失或恒定默认值,且离线重放能复现差异;数据漂移则是输入分布随时间平滑变化、特征本身计算正确但与训练分布偏离。前者修代码/口径,后者靠监控漂移并定期/触发式重训,必要时上在线学习。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。