特征平台与 MLOps:从离线训练到在线推理的一致性保障

特征平台与 MLOps:从离线训练到在线推理的一致性保障

机器学习项目有一个很典型的失败模式:离线评估 AUC 0.92,上线后效果平平,排查半天发现不是模型不行,而是训练时用的特征和线上算出来的特征不一致。这类问题不靠加数据、调参能解决,只能靠工程规范。

特征仓库分别供给离线训练与在线推理的插画
特征平台的核心价值:让训练与推理用上同一份定义

一、训练与推理不一致的三种来源

类型 表现 典型根因
逻辑不一致 离线用 SQL、线上用 Python 各写一遍 两套代码无人对账
时间不一致 离线用了未来信息,线上拿不到 特征回填未做时间点对齐
分布不一致 线上特征分布明显偏离训练集 缺失值填充、默认值策略不同

其中时间不一致的危害最大且最难发现。比如用“用户近 30 天订单数”做特征,若离线直接取当前快照值,则训练样本里实际混入了标签发生后才产生的数据,离线指标会虚高,而这种虚高在上线后无法复现。

二、时间点正确性:必须写进流程

特征回填时,“每个训练样本只能看到标签时点之前的信息”这条约束需要被工具化强制,而不是写在文档里提醒。实现上有几种做法:

  • 事件时间快照:特征按时间分区存储,回填时取样本时间之前的最后一个版本。
  • 统一时间基准:把事件时间、采集时间、入库时间三者分清楚,且在链路上全程传递事件时间。
  • 自动检查:在特征产出后自动检测特征时间戳是否晚于样本时间,发现违规直接阻断数据集生成。

建议把最后一项做成阻断式检查,而不是告警。因为这类错误的后果是“指标好看但没用”,它不会被业务发现,只会被时间发现。

三、特征平台真正该提供的四件事

一是统一的特征定义。特征名称、业务含义、计算逻辑、负责人、更新频率。定义应可版本化,修改要与模型训练记录关联。

二是离线与在线的一致产出。同一个定义能同时生成离线数据集与线上特征。实务中最容易落地的方式是:在离线侧计算并写入在线存储,保证两边同源,而不是各自实现一遍。

三是回填与重算能力。特征逻辑修正后,能按时间区间重算并覆盖。没有这个能力,特征库会逐渐失去可信度。

四是监控。在线特征的分布、缺失率、延迟,以及相对训练集的偏移程度。

四、上线后的监控与回滚

模型上线不是终点,而是监控的起点。除了业务指标(点击率、转化率、坏账率),技术侧至少需要盯三类信号:

  • 特征漂移:在线特征的分布相对训练集的偏移超过阈值时告警。它是模型失效最早的信号。
  • 预测分布:预测值的均值与方差发生突变,往往意味着上游数据出问题或模型未正确加载。
  • 特征延迟:依赖实时特征的模型,特征延迟直接影响效果,应作为可用性指标对待。

同时必须预置回滚路径:模型版本可快速切回上一版、特征可切换到降级版本(比如用离线最新值代替)。没有回滚能力的模型上线,等于把风险留给了业务。

五、推进顺序建议

不建议一上来就建“大而全”的特征平台。可行的路径是:先选一个已有效果较好的模型,把它的特征从代码里抽到统一定义中,建立离线与在线的一致性验证,跑通一两个迭代周期;然后再扩到更多模型。这个顺序的好处是:你能先看到一致性问题到底存不存在、存在哪里,再决定平台要建得多重。

Related

相关阅读

这篇文章讨论的问题,我们也许能帮你解决

把你的场景描述给我们,一起看看有没有更省的路径。