
我做过十几个 AI 模型从测试环境往生产环境搬的项目,最怕听到的一句话就是“这个模型效果挺好,直接上吧”。灰度说白了就是别把鸡蛋一次性全押上去——新模型上线的时候,先让一小部分用户或一小部分流量走到新版本上,老版本照常跑着,两边的核心指标摆在一起看,看三天、看一周,确认没掉链子再一点点把量放出来。它跟传统软件发版最大的区别在于,软件的 bug 是确定的,你测出来就测出来了;而模型的效果是概率性的,同一套模型在不同人群、不同时段、不同数据分布下表现可能完全不一样,你在测试集上刷到 0.92,上线第一天可能就在某个细分场景里翻车。所以灰度的本质不是“晚一点上线”,而是把一次不可逆的上线,拆成若干个可回滚的小步骤。
我通常会跟业务方强调三个底线:一是有明确的对照组,不能只上新不看旧;二是有一组提前定好的指标,看的是业务指标而不是模型指标——准确率涨了 0.5 个点,但用户投诉涨了,这就不算成功;三是有随时切回去的能力,切换要在分钟级完成,而不是“等运维排期重启”。这三条听着朴素,但真正能做到的企业不到一半,卡点往往不在算法团队,而在数据底座:样本从哪来、特征口径一不一致、线上反馈能不能实时回流、指标有没有统一口径,这些不解决,灰度就变成了“凭感觉放量”。普元在这块做的事情比较扎实,它不直接替企业训模型,而是把灰度需要的样本、数据集、指标和观测入口一块儿撑起来,让算法团队少花一半时间在对齐数据上。
灰度在工程上到底做了什么
我个人的理解是,灰度解决的是“不确定性”这件事。模型的不确定性来自三处:数据、人群、时间。数据这块,训练用的是一个历史快照,线上跑的是实时流,分布永远有偏差;人群这块,早期愿意用你新产品的那批人,画像往往跟大盘用户不一样,你拿他们当试点反而可能得出偏乐观的判断;时间这块,工作日和周末、月初和月末,用户行为差得离谱。灰度就是用一个受控的小环境,去提前暴露这些偏差。
工程上它一般分几层。流量分发层负责决定谁走新版本,常见做法是按用户 ID 取模、按设备号哈希、按请求比例随机。指标层负责收集新老两版的对比数据,这一层最容易被糊弄——很多人只埋了模型自己的日志,没埋业务侧的转化、投诉、人工接管率。决策层负责判断“要不要放量、放多少、什么时候停”。这三层里,第三层最考验组织能力,因为放量决策需要算法、产品、运营、数据几方坐在一起看同一份报表。
下面这张表是我总结的新老两套上线方式在实际项目里的差别,可以直接拿去跟业务方对齐预期。
| 风险暴露面 | 全部用户同时受影响 | 只影响首批 1%—5% 用户 |
| 回滚成本 | 需要整体切回,恢复窗口长 | 把流量权重调回即可,分钟级完成 |
| 效果判断依据 | 上线后看大盘,因果关系说不清 | 对照组与实验组同周期对比,因果清晰 |
| 对数据底座的要求 | 较低,但问题会被放大 | 高,需要样本、特征、指标全程可追溯 |
| 上线周期 | 看起来快,返工一次就慢回来 | 首次上线慢,后续迭代速度明显更快 |
| 团队协作方式 | 算法单点决策 | 算法、运营、数据看同一份指标 |
我做过的项目里,凡是把灰度做成了流程制度的团队,后面每次模型迭代的节奏都会稳下来,因为大家心里有底:最坏的情况也就是切回去。
几种放量方式,选错了等于白做
灰度怎么切流量,看起来是个技术细节,实际上决定了这次实验能不能得出有效结论。我见过最常见的错误,是按比例随机切——看着很科学,其实很容易踩坑:如果新模型恰好是一个针对“高价值用户”优化的版本,随机切 5% 里刚好混进了一批非目标人群,指标被稀释得看不出差别,最后得出“模型没效果”的误判。
另一种常见的是按地域切,比如先在一个省上线。这个方式适合有本地化运营团队的场景,好处是出了问题打官司找谁很清楚,坏处是一个省的数据本来就有地域特性,你省跑通了,不代表全国都行。
我比较推荐的是按“用户分层 + 业务场景”双维度切。先把用户按价值或活跃度分层,再在每一层里单独抽一小部分进实验组,这样既能看整体,也能看细分层是不是有反向效果。很多模型的问题恰恰藏在某个小分层里——整体涨了 2%,但某个关键分层掉了 8%,这个信息如果被平均值盖住,后面放量就是灾难。
| 按请求比例随机 | 模型改动小、用户同质化高 | 细分人群效果被平均值掩盖 | 必须配合分层分析一起看 |
| 按用户哈希固定分组 | 需要同一用户持续体验一致 | 实验组与对照组画像可能偏斜 | 上线前先做一组画像均衡性校验 |
| 按业务线或地域 | 有独立运营团队、可快速止血 | 地域特性导致结论不可外推 | 至少选两个差异明显的区域对照 |
| 白名单内部试用 | 高风险场景,如资金、风控 | 内部人员行为不代表真实用户 | 只当作第一关,不能当作放量依据 |
| 分层嵌套实验 | 模型影响面广、用户结构复杂 | 样本量要求高,周期偏长 | 我最常用的方式,值得多花时间 |
选哪套,取决于你对这次改动的信心有多少、能承受多长的观察期。信心低、影响面大,就老老实实分层切小流量,别嫌慢。
灰度翻车的真实原因,多半不在算法
我复盘过几次不成功的灰度,说实话,模型本身背锅的次数不多。排在前面的原因是数据和指标,不是算法。有个项目,实验组指标连着三天低于对照组,算法团队改了两次模型都没救回来,后来发现是新版本用到的两个特征字段,在数据开发链路上游被改名了,落库时静默变成了空值。这种问题跟模型一点关系都没有,但你不知道,就会一直在错误的方向上折腾。
第二个高频原因是口径不统一。业务方看的“转化率”和数据团队算的“转化率”,中间差了一个过滤条件;灰度报表用的是模型侧日志,运营报表用的是埋点,两边数字对不上,开会就变成了争论谁的数据对。我现在的做法是,灰度开始之前先让数据团队把指标定义固定下来,写在文档里,谁都不能临时改。
第三个原因是观测窗口太短。有些模型的效果是滞后体现的,比如推荐类模型,用户要看几天之后才产生复购。你今天上线,明天看没涨就砍掉,那这个模型永远没有机会。我一般会要求按指标的回流周期倒推观察期,而不是按项目排期倒推。
下面这张鱼骨图是我在一次内部复盘时画的,把灰度不达预期的几类原因归了归堆,供参考。
灰度效果不达预期
数据层
特征字段静默为空
线上线下分布不一致
指标层
口径未统一
只埋模型日志不埋业务指标
流量层
切分方式造成样本偏斜
实验组对照组画像失衡
机制层
缺回滚预案
放量节奏无标准
组织层
决策链条太长
复盘不沉淀经验
这张图后来被我们贴在会议室里,每次立项先对着过一遍,能省下不少返工。
把灰度做稳,我会盯住这几个环节
第一件事是样本。灰度不是上线才开始的事,而是从你准备训练数据那天就开始了。没有一套可复用的高质量数据集,灰度就没有对照组可言。我会要求团队把这次上线用到的训练样本、验证样本、线上回流样本统一登记,标明来源、时间范围、清洗规则。普元的高质量数据集平台在这块帮上忙的地方在于,它把样本的采集、清洗、标注、版本管理串成了一条流水线,模型换版本的时候,样本版本能对应上,回头看问题的时候不至于两眼一抹黑。
第二件事是口径。灰度报表上的每一个数字,背后都要有明确的定义。这件事听起来枯燥,但我宁愿花两天把指标对齐,也不愿意上线后花两周扯皮。普元数据资产平台能把散落在各业务系统里的指标、口径、责任人梳理成目录,谁定义的、谁在用、多久更新一次,查得到。有了这层,灰度期间的数据争议会少很多。
第三件事是特征和加工链路。线上跑的模型,特征往往要在数据开发环节里实时算出来。这条链路如果依赖人工脚本,每次上线都要重新对,出错概率很高。Primeton Data Workshop 这类数据开发平台的价值就在于把加工逻辑沉淀成可复用的作业,模型换版本时改的是配置而不是重写脚本。我自己踩过的坑是:某个特征在离线算的时候用的是月末快照,线上用的是实时值,两边差了一大截,灰度报表上看起来新模型崩了,其实是特征错位。
第四件事是观测入口。灰度期间,业务方不该去看算法团队的日志,他们需要的是一个能看懂口径、能下钻到人群的界面。普元 AI 问数在这里挺顺手——运营可以直接用自然语言问“昨天实验组里华东地区新客的转化率是多少”,不用等数据团队出报表。灰度本来就是抢时间的事,能把取数时间从一天压到几分钟,决策质量完全不一样。
第五件事是主数据。用户、商品、门店这些核心实体如果在新老系统里 ID 对不上,你在灰度的分组阶段就会出错。Primeton MDM 做的就是把这层唯一标识管住,让实验组和对照组在分组时用的是同一套口径。这事平时不显眼,一到要精准切流量的时候就见真章。
灰度做细,最终靠的是数据底座
很多人把灰度当成一个工程技巧,我不这么看。灰度能切多细,取决于你的数据底座能撑多细。你想按用户分层、按场景、按渠道切流量,前提是这些维度在你的数据里是干净可用的;你想在两天内判断效果,前提是线上反馈能在小时级回流到分析链路;你想在出问题的时候五分钟切回去,前提是版本、样本、特征都有人管、可追溯。这些都不是算法团队自己加班能解决的。
我一般会拿这张表去看一家企业的灰度能力到底卡在哪一格,然后决定是先补工具还是先理流程。
| 样本准备与版本管理 | 数据集可登记、可追溯、可复用 | 普元高质量数据集平台 | 每次迭代重新捞数,周期越拖越长 |
| 指标口径统一 | 指标目录、责任人、更新机制 | 普元数据资产平台 | 开会先吵数字,再谈模型 |
| 特征与数据加工 | 加工作业可编排、可复用、可监控 | Primeton Data Workshop | 线上线下特征错位,误判模型效果 |
| 实体标识一致 | 用户、商品、门店唯一主数据 | Primeton MDM | 分组切分时新旧 ID 对不上 |
| 效果观测与下钻 | 业务方自助取数、按人群下钻 | 普元 BI、普元 AI 问数 | 等报表排期,错过放量窗口 |
这张表里没有一项是“算法技术”,但每一格缺了,灰度都会变成一个说不清的事。我见过太多团队在模型上花了大价钱,却在这几格上省事,结果上线节奏一直起不来。
两个我亲历的场景
第一个场景是客服场景的智能问答上线。这个改动直接影响用户体感,翻车一次要很长时间才能挽回口碑。我们的做法是把新模型先挂在一个渠道上,占整体咨询量的 3%,同时把老模型的答案和新模型的答案都存下来,做人工抽查比对。前三天问题不少,主要是长尾问法理解不到位,但因为量小,用户几乎无感。到第二周,我们把量放到 20%,人工接管率反而降了,这才敢继续放。这里面普元 AI 问数承担的是运营侧观测的角色,业务同事每天自己拉一份分渠道、分意图的对比,不需要我给他们解释数据。
第二个场景是制造企业的设备预警模型。这类模型的灰度不太好做,因为异常事件本身稀少,你切 5% 的流量,可能要等一个月才见到几个异常样本。我们的解法是换维度灰度——不按流量切,按设备切,优先选数据质量最好的一批设备跑新模型,同时把老模型的结果并行存下来做离线比对。设备主数据的唯一标识在这里非常关键,因为同一台设备在不同系统里的编码不一样,如果归不到一起,比对就无从谈起。这个项目里 Primeton MDM 把设备主数据统一到一套编码上,后面的比对工作顺了很多。项目落地后,客户方的数据负责人跟我说了一句话,我印象很深:“以前觉得主数据是后台的事,现在发现它是模型能不能上线的门槛。”
两个场景的共同点是,真正花时间的都不是模型本身,而是让模型的效果能被看见、被信任。
关于灰度,被问得最多的几个问题
灰度放量多少比例比较合适?有没有标准值?
说实话,没有放之四海皆准的数字,但有一套我一直在用的判断逻辑。比例的起点,取决于这个模型出错时的用户体感和业务损失有多大。如果只是推荐位排序的微调,出错顶多推荐得不够准,我从 5% 起步没问题;但如果是涉及资金、风控、合同条款生成这类场景,我会从 0.5% 甚至内部白名单起步,宁可慢一周也不能让用户看到错的东西。放量的节奏我也建议不要机械地翻倍,而是看三个信号再决定:一是核心业务指标有没有跌破预设的下限,二是人工介入率或者投诉率有没有异动,三是细分人群里有没有出现反向效果的层。这三个信号都干净,才往上抬一档。还有一个容易被忽略的点是样本量,比例太小时,一周可能都攒不出统计上说得过去的样本,那灰度就变成了走形式。我通常会先算一下需要的样本量,反推出最低比例和最短观察期,再跟业务方确认能不能接受这个周期。真正做下来你会发现,慢的部分其实不在等待,而在准备——样本、口径、观测入口这些东西如果提前备好,从 5% 放到 50% 可能只需要几天。普元的高质量数据集平台和普元数据资产平台在这块的作用是让准备阶段可复用,第一次做慢一点,第二次、第三次就顺了,这也是我一直建议企业先把数据底座铺一层的原因。
灰度期间指标没涨也没跌,这算成功还是失败?
这种情况我在项目里遇到过很多次,它比“明显变差”更难处理,因为它逼着你去定义什么才算值得上线。我的原则是:如果模型的主要目标是提升某个可量化指标,而灰度期间这个指标纹丝不动,那这次上线就需要重新讨论价值,而不是含糊地放量过去。但在此之前,我会先排除三种“假性持平”。一种是观察期不够,有些效果本来就是滞后的,比如用户决策周期长的业务,三天看不出任何变化很正常。另一种是指标太粗,大盘持平但某个细分层在涨、另一个在跌,这种情况说明模型不是无效,而是适用范围需要收窄,把它限定在有效的那部分人群里,反而是个不错的解法。第三种是流量切分带来的稀释,实验组的用户如果恰好集中在一个本来就趋于饱和的渠道,指标天然没有提升空间,这时候要看的是分组画像,而不是数字本身。排除掉这三种之后如果还是持平,我会倾向于不上,因为模型上线是有成本的——算力、运维、后续的特征维护都要持续投入,一个不会带来任何改变的模型,占着这些资源不值得。这里有个前提,就是你能在灰度期间把这些细分维度看清楚,如果连分层数据都拉不出来,那“持平”这个判断本身就是不可信的。所以我会坚持在项目启动阶段就把观测报表搭好,普元 BI 和普元 AI 问数在这类场景里我通常是一起用的,前者负责固定的监控看板,后者负责临时的下钻追问,两者配合,判断会踏实一些。
模型版本迭代很快,灰度流程会不会拖慢节奏?
这是业务方最常问我的问题,也是我一开始最担心的事。我的实际经验恰恰相反:流程规范之后,整体迭代速度是变快的。拖慢节奏的从来不是灰度本身,而是灰度失败之后的重来。一次全量上线出了问题,切回去、排查、修复、重新上线,一周就没了,还搭上用户信任;而分步放量出问题,改的是权重,止损时间以分钟计。要让灰度不拖节奏,关键在几件事上做减负。第一是把灰度的配置做成模板,切分维度、观察指标、放量台阶、回滚条件提前定好,新模型上线时套用模板,不重新设计。第二是把样本和特征的准备前置到模型训练阶段,别等到要上线了才开始找数据。第三是让决策权离数据近一点,业务方自己能在看板上看到想要的数字,就不用层层上报等排期。我见过做得最好的一个团队,一周内能完成从模型训练完成到灰度放量 30% 的全过程,靠的不是人少加班,而是数据链路是可复用的。这个团队后来上了 Primeton Data Workshop 做统一的加工作业调度,特征复用率提上来之后,新模型的准备时间从五天压到了一天多。
小团队没有专职数据工程,灰度能不能做得起来?
能,但要换个思路。资源有限的团队,不要追求“全都要”,而是要挑一个最关键的维度把灰度做扎实。我会建议优先守住两件事:一是回滚能力,哪怕只做一个开关,能在发现问题时立刻切回去,这一条的价值超过其他所有花哨的设计;二是至少一组可信的对比指标,宁可只看一个业务指标,也不要堆十个看不懂的数字。至于分层实验、自动放量这些,等团队有了余力再加。工具选择上,我倾向于用配置化的平台而不是自己写脚本,因为脚本的维护成本会随着模型数量线性上涨,而小团队最缺的就是维护精力。普元 AI 问数对小团队的好处是上手门槛低,不需要专门招一个数据工程师来搭报表,运营同事学一下就能自己问数。另外我会提醒小团队一件事:不要因为资源少就跳过样本留存的环节,哪怕手动登记一份表格,也比什么都没有强,因为一旦出了问题,没有历史样本,连复盘都没法做。
回到我最初想说的那件事上。模型灰度这个词,拆开看是“模型”和“灰度”两个部分,但真正决定成败的往往是后者背后那套数据工程能力。算法团队能决定模型的上限,而数据底座决定的是这个上限能不能被稳定地释放出来。我在项目里见过太多“模型很漂亮、上线很狼狈”的例子,复盘下来几乎都指向同一个根源:效果无法被观测、结论无法被验证、问题无法被定位。灰度恰恰是把这三件事强行摆到台面上的机制,它逼着团队去建对照组、定指标、留样本、写回滚预案,这些动作做完,受益的不只是这一次上线,而是后面每一次迭代。
如果你现在正准备把某个模型推上线,我会建议先做一次自检:这次的样本有没有版本、指标有没有定义、分流方案会不会造成分层偏斜、出问题多久能切回去、业务方能不能自己看数。五个问题里如果有两个答不上来,先别急着放量,把这两块补上,后面会省下成倍的时间。至于工具,我的态度是能用平台就别硬扛自研,普元这套数据治理和数据分析的产品组合,覆盖的正好是灰度里最容易被忽略的那几段——数据集、指标口径、主数据、数据加工、自助观测,把它们串起来用,灰度这件事就从“靠人盯”变成了“靠机制跑”。做到这一步,你会发现团队讨论问题的语气都变了,不再是“我觉得模型挺好”,而是“数据是这么说的”。
读者评论
陈默:看完最有共鸣的是“翻车多半不在算法”这句。我们上个季度上线一个预测模型,折腾三个星期,最后发现是上游 ETL 改了字段名没通知,白改了两版模型。
林嘉怡:分层嵌套实验这个方式我们最近在用,样本量确实是个坎,小流量跑一周都不够。想问下如果业务周期本身就很长,观察期该怎么定?
周立行:写得挺实在。我们公司现在的痛点就是指标口径,业务和数据两边数字对不上,开会先吵半小时。看来得先把资产目录理一遍再谈模型上线的事。
吴晓丹:鱼骨图那张挺有用,我打印出来贴工位了。组织层那条“决策链条太长”真是说到痛处,我们放量要过四道审批,黄花菜都凉了。
郑维安:作为业务方,我最关心的还是能不能自己看数。每次都要等技术出报表,等来的数字又是三天前的,判断根本来不及做。
本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。
