2026-02-12 · 碎片
32
碎片 · 2026-02-12

别再怪模型不稳定:真正让 AI 线上翻车的,是你把“特征工程”当成了临时脚本

很多团队都经历过同一个魔幻时刻:

你在 notebook 里把模型调到 0.9+,验证集漂亮得像 PPT 封面;一上生产,效果直接塌成 0.6,甚至更差。然后会议室里开始出现熟悉台词:

坦白说,这类讨论大多在浪费时间。我的判断很直接:多数线上劣化,不是模型问题,而是训练—服务偏差(train/serve skew)问题。

你训练时喂给模型的世界,和线上推理时让它面对的世界,根本不是一个世界。模型不是不聪明,是你在训练时教它开自动挡,上线时却把车换成手动挡,还怪它不会踩离合。

一、什么叫训练—服务偏差?

一句话:同一个特征名,背后不是同一个计算过程。

看起来你在训练和线上都用了 user_7d_ctris_new_usersession_depth,但细看实现:

这些差异单看都“不大”,叠加起来就是灾难。你以为是同一个特征,模型看到的却是两套语义。

这不是精度波动,这是输入分布被你自己改写了。

二、为什么这个坑反复出现?

因为很多团队把特征工程当“研究代码”,把线上推理当“工程代码”,中间靠口头对齐。口头对齐在 demo 阶段能活,在生产阶段必死。

1) 组织结构把“同一件事”拆成两拨人

算法同学写训练 pipeline,平台同学写 serving pipeline。两边都很专业,但目标函数不同:

最后出现经典局面:离线指标很好,线上 SLA 也没超,但业务指标掉了。因为没人对“特征语义一致性”负总责。

2) 代码复用是假象,逻辑复用才是关键

很多人说“我们复用了函数库”。问题是你只复用了工具函数,没复用完整变换图:字段依赖、执行顺序、时间窗口、缺失策略、版本边界。这些才是语义。

3) 评审机制在看“能不能跑”,不看“是不是同一个东西”

上线评审常问:

却很少问:

你不问,就默认它一致;默认一致通常就是不一致。

三、别再迷信“更大模型能覆盖脏输入”

很多团队在 skew 出现后第一反应是升级模型:从小模型换大模型,从单塔换多塔,甚至直接上多模态。结果通常是:短期有点提升,长期继续崩。

原因很简单:

用一句不好听但真实的话:用更大模型去掩盖 skew,就像用更厚的粉底遮结构性骨折。

四、真正有效的解法:把“特征”当产品,不当脚本

我建议把特征系统升级为三层治理,而不是继续堆 patch。

第一层:单一计算真相(Single Source of Feature Truth)

核心原则:特征只计算一次,多处消费,不允许二次实现。

这一步做不到,后面全是补丁美学。

第二层:上线前“黄金样本对拍”

准备一组覆盖边界条件的黄金样本(新用户、老用户、异常值、跨时区、缺字段等),在训练链路和服务链路分别计算特征,逐列比对。

验收标准别写“差不多”,要写:

对拍不过,禁止上线。 这条规则会得罪人,但会救命。

第三层:上线后分布守卫(Distribution Guardrail)

模型上线不是结束,而是开始。你需要持续监控:

并且预先定义自动化动作:

没有“可执行的回滚”,所有监控都只是赛博烟花。

五、从工程问题到治理问题:你到底在奖励什么行为?

很多组织明知有 skew,仍长期不修,不是技术不会,是激励错了。

如果你的绩效体系奖励的是:

那团队自然会把“特征一致性”当阻碍,因为它短期拖慢节奏。

你要改的是激励函数:

系统会长成你奖励的样子。 这是工程世界最朴素、也最残酷的规律。

六、给正在做 AI 产品的团队一个硬结论

如果你现在还在:

那你不是“偶尔会出线上事故”,你是已经在事故轨道上,只是等时间戳

真正成熟的 AI 团队,不是离线分数最高的团队,而是能长期维持“训练语义 = 服务语义”的团队。前者靠天赋,后者靠制度。天赋会波动,制度才可复制。

所以,别再问“模型怎么又不稳定”。先问一句更扎心但更有用的话:

我们有没有把特征工程,从个人技巧升级成组织能力?

如果没有,现在就改。越晚改,补的窟窿越贵。

—— https://www.80aj.com

目录 最新
← 左侧翻上一屏 · 右侧翻下一屏 · 中间唤出菜单