市中心有家口碑极好的餐厅,主厨阿志研发了一道新菜——把招牌鱼从清蒸改成低温慢煮,理论上更嫩更鲜。他自己吃得连连点头,但上次凭感觉换菜单翻车的教训还历历在目。这次他学聪明了:不急着改菜单,而是让接下来两周进店的客人随机分成两队,一队照旧吃老配方,一队试新菜,服务员悄悄记录好评、差评、剩菜量,等样本攒够了再让统计数据来做最终裁决。这就是A/B实验——不是拍脑袋,而是让数据当裁判。 AI项目交付中的模型优化,和主厨研发新菜一模一样。离线指标(准确率、召回率)是主厨自己的舌头,真实线上用户的行为才是客人的投票。一次草率的“更好”模型全量上线,可能造成转化率下降、用户流失,甚至业务事故。而一套完整的A/B实验体系,能让你在每一次模型升级、提示词调整、策略改动前,都有底气说一句:“先跑个实验看看。”

岗位关联

学完本文,你将掌握从实验设计、指标体系、平台搭建到统计判断的完整方法论,让每次AI优化的上线决策都有数据背书,显著降低交付风险。

目录
  1. 可视化演示
  2. 实验体系概述
  3. 实验设计要点
  4. 指标体系设计
  5. 实验平台搭建
  6. 统计原理基础
  7. 决策与闭环
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示流量分流转化、统计检验分布对比、实验闭环决策三大场景,点击按钮切换模式查看不同维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

流量分流与转化对比 流量随机均分至A/B两组 实验组转化率提升显著 Lift = (CR_B - CR_A) / CR_A 分流需保证SRM检验通过

实验体系概述

主厨阿志研发新菜时最大的困惑是:我自己的舌头能代表客人吗?答案显然不能。他上次凭感觉把招牌酱汁改成低糖版,结果老客群里骂声一片。这次他决定不再自说自话——把新旧两个配方同时摆上餐桌,让客人用行为投票。这就是A/B实验最朴素的内核:两个版本同时运行,随机分流,对比结果,用数据说话。

AI项目交付也有同样的困惑。模型团队在离线测试集上把准确率从92%提到94%,兴冲冲全量上线,结果线上转化率反而掉了。为什么?因为离线指标是“主厨的舌头”,只有线上真实用户的行为才是“客人的投票”。模型输出的不确定性、上下文环境的复杂性、用户群体的多样性,都让“我觉得更好”变得非常不可靠。A/B实验正是用来弥合这种“我感觉”与“事实”之间鸿沟的桥梁。

在AI交付场景中,每一次模型版本升级、提示词调整、推荐策略改动、风控阈值变化,本质上都是一道“新菜”。搭建A/B实验体系,就是要为这些持续不断的改动建立一个标准的验证流水线:定义对照组与实验组、随机分配流量、并行运行、收集指标、统计裁决。体系中还需要一套科学的评价口径和管理工具,这正是后面各节要展开的内容。

这里先引入A/B实验中最常用的量化指标——提升率。它回答“新菜比旧菜多吸引了几成顾客”这个最直接的问题。

回到阿志的厨房。他不再问“我觉得新菜好不好吃”,而是问“数据告诉我,新菜比旧菜提升了百分之几”。有了这个数字,他去找老板要预算、要排期都有了底气。对AI交付团队来说,提升率就是每次模型迭代的“成绩单”,但它究竟靠不靠谱,还得看这场实验本身设计得是否严谨——这就进入下一节。

提升率=pB−pApA×100%\displaystyle \text{提升率} = \frac{p_B - p_A}{p_A} \times 100\%
若提升率为10%,相当于每100位原本满意的顾客中,因为换新配方又多收获了10位。注意,p_A 是基线,分母用基线而不是用实验组,这样提升率才不会“虚高”。
  1. 定位对照组转化率 p_Ap_A 是旧配方那组顾客的转化率,即“每来一位顾客,最终给出好评的比例”,它是一切比较的基准线。
    pA=对照组成功人数nA\displaystyle p_A = \frac{\text{对照组成功人数}}{n_A}
  2. 定位实验组转化率 p_Bp_B 是试吃新配方那组顾客的转化率,计算方式与 p_A 完全一致,这样才能保证口径可比。
    pB=实验组成功人数nB\displaystyle p_B = \frac{\text{实验组成功人数}}{n_B}
  3. 求相对提升率用差值除以基线 p_A,把绝对差换算成相对比例,这样不同基线的实验之间也能互相比较。
    提升率=pB−pApA×100%\displaystyle \text{提升率} = \frac{p_B - p_A}{p_A} \times 100\%

实验设计要点

阿志开始布置试吃,但他很快发现事情没那么简单。如果他把常客全都安排到新菜桌,那新菜好评率高可能是“人情分”;如果服务员知道哪桌是新菜,可能下意识多关照;如果只试吃三天就下结论,赶上周末客流高峰结论就会失真。一场科学的试吃,必须在开始之前就把规则定清楚。

实验设计的第一步是提出假设。统计上通常写成一对:零假设 H₀——“新配方和旧配方效果一样”;备择假设 H₁——“新配方效果更好”。整个实验的目的,就是寻找足够强的证据来推翻零假设,就像法庭上“疑罪从无”,必须有充分证据才能宣判新菜胜出。第二步是明确变量:自变量是配方版本,因变量是转化率、好评率等结果指标,其余一切(食材采购、烹饪温度、服务流程)都要保持不变。

第三步是随机分组。随机化的核心目的,是让两组顾客在年龄、口味偏好、消费习惯等所有特征上分布相似,唯一的区别就是吃到了哪个配方。这样最后观察到的差异才能归因于配方本身,而不是两组人本身就不一样。第四步是估算样本量——到底要请多少位顾客试吃才够?这个问题由下面的公式回答。

阿志在自己的小本子上写下了试吃计划:假设、变量、随机分桌规则、最少试吃人数、实验周期。有了这份计划书,无论结果是赢是输,他都能说清楚“这场试吃是怎么做的、结论站不站得住”。实验设计确定之后,下一步就是回答一个更关键的问题:用什么指标来判定输赢?

n=(zα/2+zβ)2⋅2pˉ(1−pˉ)δ2\displaystyle n = \frac{\left(z_{\alpha/2} + z_{\beta}\right)^2 \cdot 2\bar{p}(1-\bar{p})}{\delta^2}
这个公式告诉我们:要求的证据越严格(z 越大)、想捕捉的差异越微小(δ 越小),需要的顾客数 n 就越多。它不是数学考试题,而是实验预算的“点菜清单”。
  1. 显著性临界值 z_{\alpha/2}α 通常取 0.05,对应 z_{\alpha/2}=1.96,表示愿意承担 5% 的“新菜其实没更好却误判它更好”的风险。
    zα/2=1.96(α=0.05)\displaystyle z_{\alpha/2} = 1.96 \quad (\alpha = 0.05)
  2. 功效临界值 z_{\beta}β 通常取 0.2,对应 z_{\beta} \approx 0.84,表示新菜真的更好时,实验有 80% 的把握能发现它。
    zβ≈0.84(β=0.2)\displaystyle z_{\beta} \approx 0.84 \quad (\beta = 0.2)
  3. 合并转化率 \bar{p}把两组的成功人数与总人数合并,得到一个反映整体水平的基线概率,用来估方差。
    pˉ=xA+xBnA+nB\displaystyle \bar{p} = \frac{x_A + x_B}{n_A + n_B}
  4. 最小可检测提升 δ业务上认为值得上线的最小效果,比如 2 个百分点。注意 δ 越小,需要的人数 n 越大,实验周期就越长。
    δ=pB−pA\displaystyle \delta = p_B - p_A
  5. 合成每组样本量 n把前三项代入公式,分子越大、分母越小,n 就越大。算出来的是“每组”需要的人数,两组合计要翻倍。
    n=(zα/2+zβ)2⋅2pˉ(1−pˉ)δ2\displaystyle n = \frac{(z_{\alpha/2} + z_{\beta})^2 \cdot 2\bar{p}(1-\bar{p})}{\delta^2}

指标体系设计

试吃报告如果只写一行“新菜好评率60%”,阿志是不敢拍板换菜单的。因为一道菜上了菜单,要考虑的远不止“好不好吃”:新配方成本是不是涨了?出菜速度是不是变慢了?老客人会不会因为口味变了而流失?一道菜能不能上菜单,必须用一整张评价表来衡量,而不是只盯一个数字。

A/B实验的指标体系通常分三层。第一层是主指标,也叫北极星指标,它是这场实验唯一的“胜负手”。对AI客服机器人来说,主指标可以是问题解决率;对推荐系统,主指标是人均点击量;对风控模型,主指标是欺诈损失率。第二层是护栏指标,它们的职责不是争功,而是“保命”——任何实验都不能以牺牲系统响应延迟、服务可用性、用户投诉率为代价。第三层是辅助指标,用来解释“为什么赢或输”,比如细分到各个意图类别的问题解决率,帮助团队理解机制。

在AI项目交付中,模型效果往往是多目标的。主指标涨了,延迟可能涨了;转化率升了,退款率可能也升了。为了在多个目标之间做权衡,实践中常用OEC(总体评估标准)把多指标加权合成一个单一分数。

阿志把那张评价表挂在了后厨最显眼的位置:好吃度是主指标,成本与出菜速度是护栏指标,哪道配菜更受欢迎是辅助指标,每一项都写清了“怎么算、谁来记、多久更新一次”。指标口径统一之后,服务员记录的数据才真正可比。现在评价表有了、规则清晰了,但靠人工记录几百桌客人根本不现实——阿志需要一个自动化的试吃流水线。

OEC=w1×X1+w2×X2−w3×X3\displaystyle \text{OEC} = w_1 \times X_1 + w_2 \times X_2 - w_3 \times X_3
OEC 像一张“加权成绩单”:最终得分 = 主指标 × 权重 + 正面辅助 × 权重 − 负面代价 × 权重。把多目标压成一个可排序的数字,让“赢还是输”一目了然。
  1. 主指标 X_1决定实验胜负的第一指标,如转化率或留存率,通常在OEC中占最大权重。
    X1=转化率\displaystyle X_1 = \text{转化率}
  2. 正面辅助 X_2反映方案长期健康度的正向指标,如用户满意度、复购率,计入加分项。
    X2=满意度\displaystyle X_2 = \text{满意度}
  3. 负面代价 X_3方案可能带来的成本或风险,如单位成本率、平均延迟,用减号计入。
    X3=单位成本率\displaystyle X_3 = \text{单位成本率}
  4. 加权合成 OEC权重 w 由业务方依据当前战略目标确定;在AI训练阶段,甚至可以把OEC直接当作模型的优化目标。
    OEC=w1X1+w2X2−w3X3\displaystyle \text{OEC} = w_1 X_1 + w_2 X_2 - w_3 X_3

实验平台搭建

餐厅客流高峰期,一晚上三百桌客人,靠服务员手写“哪桌吃了新菜、吃了多少、有没有剩菜”完全不现实。阿志找了软件公司,给后厨装了一套“试吃流水线”:点菜系统里有一个配方切换开关,排桌系统自动把客人分到新旧两区,服务员扫码记录每一桌的反馈,所有数据实时汇成一张试吃看板。AI项目交付中的实验平台,就是这个流水线的数字化版本。

实验平台的核心能力有四件套。第一,功能开关:用配置中心控制模型版本、提示词模板、策略参数在哪些用户、多大比例、什么时间段生效,支持秒级开关和灰度发布。第二,流量分桶:通过哈希算法把用户稳定地分配到不同实验桶,保证同一用户在一场实验中始终只看到同一个版本,避免“串味”。第三,数据埋点:在模型请求、响应、用户行为等关键节点采集事件与属性,这是所有分析的原料。第四,报表监控:实时展示两组指标对比、置信区间和异常告警,让团队像看餐厅看板一样掌握实验动态。

其中流量分桶是整个平台的基石。实践中广泛使用哈希取模的方式,把用户ID与实验ID拼起来算哈希,再对100取模,实现近似均匀且稳定的分流。公式如下:

流水线建好之后,阿志不再需要亲自盯着每一桌客人。他每天早晨看一眼看板,哪组数据异常、哪组显著领先都一目了然。平台把“试吃”从一次性的手工活动变成了标准化、可复用的日常能力。但看板上那些数字到底意味着什么?“新菜好评率高5个百分点”就一定说明新菜更好吗?这就需要统计学的帮助。

桶号=hash(user_id+exp_id) mod 100\displaystyle \text{桶号} = \text{hash}\left(\text{user\_id} + \text{exp\_id}\right) \bmod 100
哈希分桶像“大厅排桌系统”:每位顾客凭自己独特的号牌被稳定地分到A桌或B桌,同一顾客每次来都坐同一类桌。这样实验组和对照组就像两个平行的餐厅,互不干扰。
  1. 拼接用户与实验标识把用户ID和实验ID拼成一个字符串,作为分桶的唯一输入,保证不同实验之间的分桶相互独立。
    输入=user_id+exp_id\displaystyle \text{输入} = \text{user\_id} + \text{exp\_id}
  2. 哈希映射对拼接串做哈希计算,得到一个近似均匀分布的整数,让流量平滑地铺到各个桶上。
    h=hash(user_id+exp_id)\displaystyle h = \text{hash}(\text{user\_id} + \text{exp\_id})
  3. 取模得到桶号对100取模得到0~99的桶号,再按桶号区间划分对照组与实验组,实现五五分流或三七分流。
    桶号=h mod 100\displaystyle \text{桶号} = h \bmod 100

统计原理基础

三十桌试吃结束,新菜好评率60%,旧菜55%,差了5个百分点。阿志很兴奋,但数据分析师拦住他:“先别急着高兴,万一这拨客人只是碰巧口味偏新呢?”这就是统计学要回答的问题:如何区分“真实差异”和“随机波动”——就像区分“新菜真的更好”和“这波客人恰好更喜欢新口味”。

这里有几个必须理解的核心概念。显著性水平 α:我们愿意承担多少“误判风险”,通常取0.05,意思是“允许有5%的概率冤枉旧菜”。p值:在假设新旧效果相同的前提下,观察到当前这么大(或更大)差异的概率。p值越小,说明“纯靠运气出现这个差异”越罕见,证据越强。置信区间:对真实效果大小的一个合理估计范围,比单一数字更有信息量。统计功效:新方案真的有效时,实验能检测出它的概率,通常要求不低于80%。

把上面这些概念串起来的就是假设检验。实践中常用 z 检验来比较两个比例的差异,z 统计量的计算如下:

阿志盯着看板上的z值读数,它就像一根温度计:低于1.96,灯是红的,说明证据不足,继续攒样本;超过1.96,灯变绿,他才有底气去找老板说“换菜单”。但温度计变绿只代表“统计上显著”,还不足以让他立刻拍板——真正做上线决策时,还要看效果幅度够不够大、护栏有没有被冲破。

z=pB−pApˉ(1−pˉ)(1nA+1nB)\displaystyle z = \frac{p_B - p_A}{\sqrt{\bar{p}(1-\bar{p})\left(\frac{1}{n_A} + \frac{1}{n_B}\right)}}
z 值像一根“差异温度计”:分子是两组转化率的差值,分母是这个差值有多“不稳”的标准误。当 |z| > 1.96 时,差异在 5% 显著性水平下成立,等价于 p < 0.05。
  1. 计算效果点估计用实验组转化率减对照组转化率,得到新方案效果的初步估计,这是分子。
    δ^=pB−pA\displaystyle \hat{\delta} = p_B - p_A
  2. 合并转化率把两组成功数与人数合并,估计共同的总体转化率,作为方差计算的依据。
    pˉ=xA+xBnA+nB\displaystyle \bar{p} = \frac{x_A + x_B}{n_A + n_B}
  3. 求标准误 SE标准误衡量“这个差值估计得有多稳”。样本越多、SE越小,差值就越可信。
    SE=pˉ(1−pˉ)(1nA+1nB)\displaystyle \text{SE} = \sqrt{\bar{p}(1-\bar{p})\left(\frac{1}{n_A} + \frac{1}{n_B}\right)}
  4. 计算 z 统计量效果点估计除以标准误,得到标准化的差异强度,即“差异相当于多少个标准误”。
    z=δ^SE\displaystyle z = \frac{\hat{\delta}}{\text{SE}}
  5. 与临界值比较|z| > z_{\alpha/2}=1.96 时差异显著,此时可以拒绝“新旧一样好”的零假设。
    ∣z∣>zα/2  ⟹  差异显著\displaystyle |z| > z_{\alpha/2} \implies \text{差异显著}

决策与闭环

试吃期满,阿志把整份报告摊在桌上:新菜显著胜出,成本没超标,出菜速度没拖后腿。他长舒一口气,决定把新菜写进菜单。但他没有把旧配方直接扔掉——万一新菜在真实菜单环境里翻车,他需要能一键切回去。这就是A/B实验体系的最后一块拼图:决策与闭环。

上线决策不能只看“p值小于0.05”这一个条件。成熟的决策标准通常有四条同时满足:一是统计显著,差异不是随机波动;二是方向为正,主指标确实更好;三是护栏指标没有恶化,系统体验没有受损;四是实际提升幅度超过业务预设的阈值——因为在大样本下,0.05%的提升也能“显著”,但这点提升可能覆盖不了开发和运维成本。四条全过才上线,任何一条不满足,都回到设计阶段重新优化。

决策之后,实验体系的价值才真正开始发挥。每个实验都应该沉淀成一个“洞察”:新方案为什么有效?哪类用户受益最大?成本增加了多少?这些洞察成为下一个假设的原料。配合完善的回滚机制(开关一键切回旧模型),团队就可以大胆试错,形成“假设→实验→学习→新假设”的持续迭代飞轮。而决策环节,离不开置信区间这个工具来量化效果的取值范围。

阿志把每一份试吃报告都归档编号,下次研发新菜,先翻旧报告找灵感、避坑。菜单在一次次“试吃—验证—上线—复盘”中越换越好,靠的不是运气,而是这套科学决策的飞轮。对于AI项目交付团队而言,A/B实验体系最终沉淀的是一种文化:人人敢提假设,人人会用实验验证,每一次迭代都有据可依、有迹可循。

CI=(pB−pA)±zα/2×pB(1−pB)nB+pA(1−pA)nA\displaystyle \text{CI} = (p_B - p_A) \pm z_{\alpha/2} \times \sqrt{\frac{p_B(1-p_B)}{n_B} + \frac{p_A(1-p_A)}{n_A}}
置信区间给出“真实效果可能落在的范围”:如果整个区间都在0的右侧,说明新配方大概率真的更好;如果区间跨过0,说明证据还不够,别急着换菜单。
  1. 点估计新旧转化率之差是真实效果的最佳单点猜测,但单点太脆弱,需要给它加一个区间。
    δ^=pB−pA\displaystyle \hat{\delta} = p_B - p_A
  2. 合并标准误分别计算两组的抽样方差再相加开根号,得到差值估计的标准误。
    SEδ=pB(1−pB)nB+pA(1−pA)nA\displaystyle \text{SE}_{\delta} = \sqrt{\frac{p_B(1-p_B)}{n_B} + \frac{p_A(1-p_A)}{n_A}}
  3. 加减临界值形成区间点估计 ± 1.96 倍标准误,就得到了95%置信区间。
    CI=δ^±zα/2×SEδ\displaystyle \text{CI} = \hat{\delta} \pm z_{\alpha/2} \times \text{SE}_{\delta}
  4. 按下界做决策区间下界大于0说明效果显著为正,可以上线;区间包含0则证据不足,需要更多样本或重新设计。
    CI下界>0  ⟹  可上线\displaystyle \text{CI}_{\text{下界}} > 0 \implies \text{可上线}

AI 应用场景

智能客服大模型版本升级验证

阶段:模型交付后的上线验证

解决的问题:大模型版本升级直接全量上线风险极高,可能出现回复质量下降、转人工率飙升、用户体验滑坡。传统做法是依赖离线评测集,但离线得分与线上真实表现经常背离。

具体案例:某银行智能客服团队在大模型GPT版本升级时,将10%流量分入实验组,主指标设“问题解决率”,护栏指标设“转人工率”和“用户满意度”,实验运行一周后实验组问题解决率显著提升3.2%,转人工率无恶化,才逐步放量至100%。

个性化推荐策略灰度迭代

阶段:策略迭代与持续优化

解决的问题:推荐算法每次改动影响面极大,离线AUC提升不代表线上点击率提升,贸然全量可能损伤用户体验和GMV。

具体案例:某电商推荐团队对新排序模型设置A/B实验,主指标为人均点击量和转化率,护栏指标为人均GMV不下降、接口延迟不增加,辅助指标看各品类点击分布。实验显著胜出后按10%→50%→100%逐步灰度,全程监控护栏指标。

风控模型阈值调整的科学决策

阶段:模型参数调优与策略上线

解决的问题:风控模型调高拦截阈值可以减少误伤,但可能放走真实欺诈;调低阈值则相反。传统靠经验拍板,难以量化权衡。

具体案例:某支付风控团队将阈值调整做成A/B实验,实验组为新阈值,主指标为欺诈损失率,护栏指标为交易通过率和客诉率。实验确认损失率下降且通过率无显著恶化后才全量,并保留一键回滚开关。

Python 演示

python39 行
import mathimport random  def normal_cdf(x):    # 标准正态分布的累积分布函数    return 0.5 * (1 + math.erf(x / math.sqrt(2)))  def ab_test_p_value(n_control, x_control, n_treat, x_treat):    # 基于z检验计算两组比例差异的双侧p值    pa = x_control / n_control    pb = x_treat / n_treat    p_pool = (x_control + x_treat) / (n_control + n_treat)    se = math.sqrt(p_pool * (1 - p_pool) * (1.0 / n_control + 1.0 / n_treat))    z = (pb - pa) / se    return 2 * (1 - normal_cdf(abs(z)))  def simulate_ab_test(p_control, p_treat, n, seed=42):    # 模拟一次完整的A/B实验: 生成两组转化数据并返回p值    random.seed(seed)    control = [1 if random.random() < p_control else 0 for _ in range(n)]    treat = [1 if random.random() < p_treat else 0 for _ in range(n)]    return ab_test_p_value(n, sum(control), n, sum(treat))  def main():    p_value = simulate_ab_test(0.05, 0.07, 5000)    print("模拟A/B实验: 旧配方5%转化 vs 新配方7%转化, 每组5000人")    print("p值 = {:.4f}".format(p_value))    if p_value < 0.05:        print("结论: 差异显著, 新方案可以上线")    else:        print("结论: 差异不显著, 需要扩大样本继续观察")  if __name__ == "__main__":    main()
目的:用Python完整模拟一次A/B实验——生成两组用户转化数据,计算z统计量与p值,并给出是否上线的决策建议。
  1. random.seed(seed)固定随机种子,保证每次运行结果可复现,这对应实验前的“预注册”思想。
  2. control = [1 if random.random() < p_control else 0 for _ in range(n)]为对照组每位用户模拟“是否转化”,1代表成功。
  3. p_pool = (x_control + x_treat) / (n_control + n_treat)合并两组数据估计总体转化率,对应z检验公式中的 \bar{p}。
  4. se = math.sqrt(p_pool * (1 - p_pool) * (1.0 / n_control + 1.0 / n_treat))计算差值标准误,样本量越大SE越小。
  5. z = (pb - pa) / se计算z统计量,衡量“差异相当于多少个标准误”。
  6. return 2 * (1 - normal_cdf(abs(z)))用正态分布求双侧p值,对应“纯靠运气出现这么大差异的概率”。
  7. if p_value < 0.05:显著性水平取0.05,这是实验决策的“温度计阈值”。

常见误区

误区新方案上线两天,数据显示效果不错,担心红利消失,赶紧趁早全量上线抢占先机。

正解这就是典型的“偷看数据”(peeking)。样本量不足时,早期数据几乎完全被随机波动主导,今天领先的组明天可能就落后。正确做法是实验开始前就定好样本量和时长,中途最多观察护栏指标是否异常,最终结论必须等达到预定样本量之后再下。提前结束会大幅抬高误判概率,让“碰巧好看”被当成“真的更好”。

为何常见:业务压力大、急于出成绩,把早期的随机波动误当成了真实趋势,忽略了统计规律需要足够样本才能稳定显现。

误区p值=0.03,说明新方案有97%的概率就是比旧方案好,可以放心上线。

正解p值的精确定义是“假设新旧效果相同(零假设成立)时,观察到当前或更极端结果的概率”。它不是“新方案更好的概率”。0.03只说明“如果新旧一样好,出现这么大差异很罕见”,至于新方案真实获胜的概率是多少,需要贝叶斯框架才能回答。把p值当成胜率,是把条件概率的方向搞反了。

为何常见:p值这个名字本身就很有误导性,再加上“1减p值就是正确率”的直觉诱惑,让很多人栽了跟头。

误区p值小于0.05就是赢了,直接全量上线,不用再看别的。

正解统计显著只说明差异“不太可能是随机波动”,不代表差异幅度有业务价值。当样本量足够大时,转化率提升0.05%也可能“显著”,但全量上线后这点提升可能覆盖不了开发运维成本。正确的决策公式是:统计显著 + 方向正确 + 护栏无恙 + 实际提升超过业务阈值,四个条件缺一不可。

为何常见:混淆了“统计显著性”与“实际显著性”,大样本下任何微小差异都能变得显著,这是中心极限定理的“副作用”。

误区实验报告里主指标涨了就行,其他指标不用看,反正主指标定胜负。

正解新方案很可能主指标涨了,但响应延迟翻倍、用户差评激增——用短期收益换长期口碑,等于杀鸡取卵。护栏指标是体系的“安全带”,任何实验都不能以核心体验为代价。这正是OEC加权成绩单思想的来源:多指标综合权衡,而不是单指标一票定音。

为何常见:单一指标最直观、最好汇报,多指标权衡需要复杂度和业务判断,容易被急于求成的团队跳过。

误区反正平台能力强,同时跑十个实验,最后把显著的那几个挑出来上线,效率最高。

正解这是多重比较问题。同时检验多个假设时,纯随机波动中也会出现“看似显著”的结果——好比连抛一百枚硬币,总有一枚连抛五次正面。并行实验越多,假阳性风险越高,需要Bonferroni校正或控制FDR(错误发现率)。正确做法是减少并行实验数量、实验前预注册假设、对探索性发现进行二次验证。

为何常见:幸存者偏差在作祟——人们只看到“那个显著的幸运儿”,却看不到随机噪声本身就有概率制造显著。

面试题

Q1. A/B实验中对照组的主要职责是什么?

单选题 · easy

  • A.为实验模型提供额外的训练数据
  • B.作为衡量新方案效果的基准对照← 正确答案
  • C.扩大整体实验的样本容量规模
  • D.防止实验组模型过拟合到噪声

答案:B。对照组提供的是“如果不改会怎样”的基线,是效果衡量的天秤另一端。A是把对照组误当成训练数据来源;C、D都与对照组在实验中的定位无关,对照组的价值在于对比而非扩容或防过拟合。

Q2. 把用户随机分到对照组和实验组,核心目的是什么?

单选题 · easy

  • A.让两组除实验变量外尽量同质可比← 正确答案
  • B.让每个用户都能尽快体验新功能
  • C.降低服务器压力并节约计算成本
  • D.保证新功能有足够多的实验流量

答案:A。随机化的精髓是“唯一变量”——让两组用户在年龄、偏好、行为习惯上分布相似,唯一差别是是否吃到新配方。B让所有人体验新功能反而失去了对照组;C是运维考虑而非实验目的;D说的只是流量大小,不是随机化的本质。

Q3. 关于P值的正确理解是?

单选题 · mid

  • A.新方案相比旧方案生效的真实概率
  • B.新方案提升幅度比结果更大的概率
  • C.零假设成立时出现当前或更极端结果的概率← 正确答案
  • D.实验结论完全正确且可复现的把握

答案:C。p值衡量的是“在'新旧一样好'的前提下,看到当前差异的概率”,是证据强度而非方案胜率。A、B、D都把p值误读成了“方案正确的概率”,搞反了条件概率的方向。记住主厨的比喻:p值是说“运气成分有多大”,不是“新菜赢面有多大”。

Q4. 以下哪些指标适合作为AI系统的护栏指标?

多选题 · mid

  • A.平均响应延迟不显著增加← 正确答案
  • B.服务可用性保持在约定水平← 正确答案
  • C.用户差评率没有明显上升← 正确答案
  • D.点击转化率获得显著提升

答案:ABC。护栏指标的职责是“保命”——保护系统核心体验不因实验而恶化。延迟、可用性、差评率都是典型护栏指标。D是主指标,用来定胜负而不是守底线,把它当护栏会让实验“既当运动员又当裁判”。

Q5. 样本量过小会给A/B实验带来什么影响?

单选题 · mid

  • A.实验周期缩短结论更高效
  • B.统计功效不足难以发现真实差异
  • C.两组人数会自动趋于相等
  • D.提升率计算结果必然偏大

答案:。

Q6. 哪些做法会导致A/B实验结论不可信?

多选题 · hard

  • A.中途反复查看数据并提前结束← 正确答案
  • B.多实验并行却未做多重比较校正← 正确答案
  • C.按用户ID哈希规则随机均匀分桶
  • D.上线前不做样本量预算直接开跑← 正确答案

答案:ABD。偷看数据(peeking)会放大假阳性率;多实验并行不做校正会因多重比较引入大量“伪显著”;不预估样本量会让实验做多久、结论靠不靠谱都成未知数。C是标准的随机分桶做法,是可靠的。

Q7. 某细分用户群显著但总体不显著,正确的做法是?

单选题 · hard

  • A.立即宣布对所有用户全量上线
  • B.视为探索线索并重新设计实验验证← 正确答案
  • C.忽略细分结果只相信总体数据
  • D.调低显著性水平让结果变得显著

答案:B。总体不显著说明整体证据不足,细分显著可能是多重比较制造的噪声,也可能是真实的异质性效应。正确做法是把细分发现当作探索性线索,重新设计一个聚焦该人群的实验来验证。直接上线是赌博,调低显著性水平则是数据造假。

Q8. 对95%置信区间的正确理解是?

单选题 · mid

  • A.真实效果落在区间内的概率是95%
  • B.重复抽样约95%的区间会覆盖真实值← 正确答案
  • C.区间越宽说明效果估计越精确
  • D.区间包含零说明新方案确定有效

答案:B。置信区间是从频率学视角定义的:重复做同样实验,约95%的区间会盖住真实效果值。A把参数当成随机的,是常见误读;C说反了,区间越宽说明估计越粗糙;D恰好相反,区间跨过零恰恰说明证据不足。

Q9. A/B实验平台通常需要支持哪些核心能力?

多选题 · mid

  • A.功能开关与灰度发布控制能力← 正确答案
  • B.基于ID哈希的稳定流量分桶← 正确答案
  • C.数据埋点采集与实时报表← 正确答案
  • D.自动修改生产环境的数据库

答案:ABC。平台四件套是功能开关、流量分桶、数据埋点和报表监控,分别对应“控制、分流、采集、呈现”。D自动改生产数据库是危险操作,与实验平台的设计目标完全背道而驰,绝不该出现在实验能力清单里。

Q10. 达到预定样本量后判定新方案胜出的依据是?

单选题 · easy

  • A.主指标显著且护栏指标未恶化← 正确答案
  • B.挑选多个指标中显著的那个
  • C.凭借业务直觉判断效果好坏
  • D.再延长实验周期观察一段时间

答案:A。科学的上线判定是“主指标显著 + 护栏指标无恶化 + 实际提升超过业务阈值”的组合拳。B是典型的多重比较陷阱,挑显著的说等于让随机噪声决定决策;C是拍脑袋;D没有明确终点,无限延长既浪费流量又违背实验设计初衷。