王姐在上海开了一家“满堂香”餐厅,招牌菜是红烧肉。最近她听大厨说“川味做法”更有市场,心里痒痒的,可又不敢直接把全部客人都换成新做法——万一老顾客不买账呢?她想了个办法:接下来两周,让一半客人试吃新做法的红烧肉,另一半客人还是吃老做法,最后比较两拨人的满意度。她挑出两个新客人当作“平行宇宙”,一个吃老的、一个吃新的,记录他们说“好吃”的人数比例,还要盯住“会不会再点一次”的指标。这个看似简单的餐厅实验,其实就是 AI 领域里大名鼎鼎的 A/B 测试。 A/B 测试听起来很高深,本质上就是“在真实用户身上做受控的对比实验”。而支撑它科学有效的,不是运气,而是一整套实验设计原则:先想清楚验证什么假设、怎么分对照组、如何控制变量、选什么指标、需要多少人、怎么看结果、避开哪些坑。这些原则就像王姐的“试菜规矩”,每一条都踩过雷:有人只问熟人意见(样本偏差)、有人试菜中途换配方(中途改版)、有人只看好评率不看是否真复购(指标定义不清)。这篇文章就像一本“试菜避坑手册”,从零讲清楚 A/B 测试的设计地基,让你在 AI 产品里做任何实验决策时,都能拿数据说话、说得有理有据。

岗位关联

掌握实验设计原则,是 AI 从业者从“拍脑袋迭代”走向“数据驱动决策”的分水岭。它能让你在设计实验、解读结果、上线决策时一眼看穿逻辑漏洞,为推荐系统、大模型 Prompt 等各类 AI 产品的迭代提供坚实可信的验证底座。

目录
  1. 可视化演示
  2. 假设构建:把“我觉得好吃”变成一道证明题
  3. 对照组设计:给新菜找一个“参照物”
  4. 变量控制:一次只动一道菜
  5. 指标定义:别让“好吃”变成一笔糊涂账
  6. 样本量计算:多少人试吃才不算“运气好”
  7. 显著性检验:别被随机波动的“假消息”骗了
  8. 常见陷阱:王姐踩过的那些“数据坑”
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

可视化实验分组对比与置信区间、假设检验分布与拒绝域、有效性威胁因素,滑块调节样本量观察统计功效变化。

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

分组对比:对照组vs实验组转化率 对照组:未改动基准转化率 实验组:改动后转化率提升 效应量:转化率差值Δconv Δconv = conv_B - conv_A 样本量越大置信区间越窄

假设构建:把“我觉得好吃”变成一道证明题

王姐对大厨说:“我总觉得川味红烧肉更受欢迎,要不直接换了吧?”大厨反问:“你觉得'更受欢迎'到底是指什么?多点菜?多点好评?还是多点回头客?”王姐愣住了。这正是无数 A/B 测试翻车的起点——把模糊的直觉直接当作实验方案。一个科学实验,首先要有一个可检验的假设,它必须能被数据证伪,而不是一句模棱两可的感慨。

在统计学里,这个“可证伪”的框架由一对待检验的命题构成:原假设(H₀) 和备择假设(H₁)。原假设是“默认立场”,通常声明新旧方案没有差别;备择假设是“想要证明的效果”。实验数据负责尝试推翻原假设,就像法庭上的“无罪推定”——你说新菜更好,就得拿出足够硬的证据。另一个好用的技巧是虚构验证法:实验开始前先自问一句“假如新菜其实没用,数据长什么样?”想清楚这个“无用场景”,能有效防止自己事后编故事。

H0:μnew=μoldvsH1:μnew>μold\displaystyle H_0: \mu_{new} = \mu_{old} \quad \text{vs} \quad H_1: \mu_{new} > \mu_{old}

1. μ_old 的含义:老菜谱在全体潜在顾客中的满意度均值,是实验的基准线

μold\displaystyle \mu_{old}

2. μ_new 的含义:新菜谱在全体潜在顾客中的满意度均值,是想要验证的期望

μnew\displaystyle \mu_{new}

3. H0 原假设:默认新旧方案没有差异,实验前它“被保护”,需要数据来推翻

H0:μnew=μold\displaystyle H_0: \mu_{new} = \mu_{old}

4. H1 备择假设:声称新菜确实更好,只有证据足够充分时才能“转正”

H1:μnew>μold\displaystyle H_1: \mu_{new} > \mu_{old}

王姐最终写下了自己的假设:“川味做法能让满意度评分均值提高至少 10 分。”这句话像菜谱一样清晰,厨师知道做什么菜,服务员知道怎么介绍,数据部门也知道该统计什么。假设构建的本质,就是把“我觉得”变成“如果我……那么……”,把拍脑袋变成可验证的命题。后续所有设计——对照、控制、指标、样本量——都是围绕这个命题展开的。

对照组设计:给新菜找一个“参照物”

王姐的第二步是分桌。她决定让靠窗的客人吃新菜,靠墙的客人吃老菜。大厨提醒她:“这样不行,靠窗的客人本来就心情好、更容易给好评,你会把'窗外风景'的功劳算到新菜头上。”这就是对照组设计的第一要义:两组除了“吃的菜”不同,其他都要可比。靠窗与否、老客新客、饭点早晩,都必须被“随机分组”打散。

随机分组是 A/B 测试的黄金标准——每个用户以相同概率进入对照组或实验组,把已知和未知的混杂因素均匀地洒在两组里。同时要保证样本同质性:两组的用户画像、流量来源尽量一致,不要出现“实验组全是新用户、对照组全是老用户”的失衡。对照比策略则根据实验规模和成本权衡:常见的是 1:1 等量分流,也可以按 1:9 等做小流量实验,但要注意每组样本量都要足够。最后要避免交集:同一个用户绝对不能同时出现在两组,否则“你俩都吃了新菜”,结果就说不清了。

SE=sn\displaystyle SE = \frac{s}{\sqrt{n}}

1. s 样本标准差:单个顾客评价本身的离散程度,比如有人给 3 分、有人给 5 分

s\displaystyle s

2. n 样本量:组内有效参与试吃的人数

n\displaystyle n

3. SE 标准误:样本均值围绕总体均值的波动幅度,n 越大 SE 越小,说明分组统计越可信

SE=sn\displaystyle SE = \frac{s}{\sqrt{n}}

王姐后来把客人按会员号尾号随机分成了两组,窗边有两组的人、门口也有两组的人,两组画像几乎一样。这样再比较满意度,差别就只可能来自菜本身了——对照组就像物理实验里的“空白对照”,没有它,再漂亮的数据也只是一群人的自说自话。

变量控制:一次只动一道菜

试菜实验进行到第三天,王姐忽然发现实验组的满意度大幅上升。她正高兴,服务员跑来说:“店庆开始了,每桌都送了一份甜汤。”王姐傻眼——甜汤是给所有客人的,但店庆期间餐厅排队的节奏、服务员的热情、甚至连灯光都换了,这些“额外变量”全都混进了实验里,现在根本没法定论:顾客满意是因为川味红烧肉,还是因为领到了免费甜汤?这就是变量控制失控的典型场景。

A/B 测试必须坚持单变量原则:对照组和实验组之间只允许存在一个被研究的差异(也就是你要验证的那个改动),其他任何因素都要保持环境一致性。那些“本以为无关、实际会干扰结果”的因素,比如时间周期、页面加载速度、运营活动、新旧用户比例,统称为混淆变量。它们偷偷钻进实验,让因果归因变成一笔糊涂账。一个很实用的防线是盲法设计:让用户不知道自己被实验(单盲),甚至让数据分析师也不知道谁在实验组(双盲),从心理层面杜绝主观偏差。

t=xˉ1−xˉ2s12n1+s22n2\displaystyle t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}

1. 分子(均值差):对照组均值与实验组均值的差异,是我们关心的“信号”

xˉ1−xˉ2\displaystyle \bar{x}_1 - \bar{x}_2

2. 分母(标准误):两组各自波动叠加后的“噪声”估计,波动越大越难分清差异

s12n1+s22n2\displaystyle \sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}

3. t 统计量:信号与噪声的比值,t 越大,差异越不像巧合

t=xˉ1−xˉ2s12n1+s22n2\displaystyle t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}

王姐最后决定:先暂停实验,等店庆结束、环境恢复常态再重新跑一遍。这次她写了一张“变量清单”,把时间、人员、环境、活动全部钉死,只允许“菜的做法”这一个变量自由活动。变量控制做得好,实验结果才经得起追问——否则你以为在测新菜,其实是测了一锅“环境大杂烩”。

指标定义:别让“好吃”变成一笔糊涂账

实验重新启动前,王姐发现一个更棘手的问题:什么叫“好吃”?是客人说的“这菜挺好”,还是他们真的多夹了几筷子?她决定用“复购率”作为这次实验的主指标——吃完后一周内再次来店点这道菜的比例。同时她还设了一个“护栏指标”:新菜有没有让上菜时间变长、有没有导致差评增加。如果新菜虽然复购率高但把厨房拖垮了,那也不能上线,这就是 北极星指标 与 护栏指标 的分工。

北极星指标是对应实验目标的唯一核心指标,必须能真实反映业务价值且不易被操纵;护栏指标则用来监控“不要在优化 A 时搞垮 B”。确立指标后还要定清事件口径:“复购”是从点单时刻算,还是从吃完结账时刻算?统计窗口是一周还是两周?口径不一致,数据对不上,“吵架”就开始了。最后,指标还需要灵敏性:如果改动很小(比如转化率提升 0.1%),指标要能捕捉到微小的变化,否则实验做了等于白做。

p^=Xn\displaystyle \hat{p} = \frac{X}{n}

1. X 成功数:发生目标行为的用户数,比如一周内复购新菜的客人

X\displaystyle X

2. n 总用户数:该实验组内参与实验的用户总数

n\displaystyle n

3. p̂ 转化率:样本中目标行为的发生比例,是实验评判的核心指标的估计值

p^=Xn\displaystyle \hat{p} = \frac{X}{n}

王姐最后把主指标定为“七日复购率”,护栏指标定为“平均上菜时长”和“负面评价占比”,并让服务员用统一话术记录每位客人是否复购。指标定义是实验的“计分规则”:规则定得模糊,分数再高也说明不了问题;规则定得科学,实验从一开始就赢了一半。

样本量计算:多少人试吃才不算“运气好”

试吃两周后,王姐看着数据犯难:实验组好评率 61%,对照组 58%,差了 3 个百分点。这个差异是真的吗?她想起大厨的一句话:“别说 3%,就算差 10%,如果只有 5 个人试吃,也说明不了什么。”大厨说到了点子上——实验需要最小样本量,而计算样本量的前提是先想清楚效应量预估。

效应量是你认为该改动可能带来的最小有意义的差异。王姐觉得“复购率提升 2 个百分点就值得换菜”,那么 δ=0.02。效应量定得越小,需要的样本量就越大——想捕捉“0.1% 的提升”,几乎需要全城的人都来吃一遍。此外还要设定显著性水平 α(通常 0.05,即愿意承担 5% 的“假阳性”风险)和统计功效 1-β(通常 0.8,即若真实差异存在,有 80% 的把握检测到它)。这四个参数一起决定了 n 的大小。

n=(zα/2+zβ)2⋅2p(1−p)δ2\displaystyle n = \frac{(z_{\alpha/2} + z_\beta)^2 \cdot 2p(1-p)}{\delta^2}

1. z_α/2 临界值:由显著性水平 α 决定,α=0.05 时查正态分布表得 1.96

zα/2\displaystyle z_{\alpha/2}

2. z_β 临界值:由统计功效决定,功效=0.8 时对应 0.84

zβ\displaystyle z_\beta

3. p 基线率:合并两组的先验转化率估计,通常取两组转化率的平均

p=p1+p22\displaystyle p = \frac{p_1 + p_2}{2}

4. δ 效应量:期望检测到的最小真实差异,分母越大 n 越小

δ=p2−p1\displaystyle \delta = p_2 - p_1

5. n 样本量:实验组和对照组各自需要的最少用户数

n=(zα/2+zβ)2⋅2p(1−p)δ2\displaystyle n = \frac{(z_{\alpha/2} + z_\beta)^2 \cdot 2p(1-p)}{\delta^2}

王姐请店里的数据顾问按这个公式算了一遍:若想检测 2% 的复购率提升,每组需要约 3900 位客人;若只检测 0.5% 的提升,每组要 5.8 万人。她倒吸一口凉气:“难怪之前 200 人试吃看不出所以然——那不是运气问题,是数学上就不够!”样本量计算让实验从“撞大运”变成了“规划好的战役”。

显著性检验:别被随机波动的“假消息”骗了

实验终于跑满两周,凑够了每组 3900 人。数据显示:实验组复购率 12.3%,对照组 10.0%,差了 2.3 个百分点。王姐高兴得想立刻全店换菜,但数据顾问拦住她:“先做个显著性检验,看看这 2.3% 会不会只是随机波动捣的鬼。”p 值就是回答“如果新旧方案其实一样,出现当前这么大差异(甚至更大)的概率有多大”。

如果 p 值很小(比如小于 0.05),说明“在'无差异'的假设下,看到这么极端的数据”是小概率事件,于是我们有理由拒绝原假设,认为差异不是巧合。但 p 值并不能告诉我们“改动有效的概率是 95%”——那是一个流传甚广的误读。与 p 值互补的是置信区间:它给出真实差异的一个合理范围,比如“2.3% ± 1.2%“,若区间不包含 0,则差异显著;若区间很宽,说明估计还很不精确。这背后还牵扯两类错误:第一类错误(α) 是”本来没效果,却误判成有效“,第二类错误(β) 是”本来有效果,却误判成无效”。

CI=(p^1−p^2)±zα/2⋅SEdiff\displaystyle CI = (\hat{p}_1 - \hat{p}_2) \pm z_{\alpha/2} \cdot SE_{diff}

1. 点估计:两组样本转化率之差,差值越远离 0 越像有效果

p^1−p^2\displaystyle \hat{p}_1 - \hat{p}_2

2. SE_diff 差值标准误:差值估计本身也有波动,综合两组方差和样本量得到

SEdiff=p^1(1−p^1)n1+p^2(1−p^2)n2\displaystyle SE_{diff} = \sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1} + \frac{\hat{p}_2(1-\hat{p}_2)}{n_2}}

3. 临界值 z:基于置信水平(95%)查表得到的乘数,约为 1.96

zα/2\displaystyle z_{\alpha/2}

4. CI 置信区间:真实差异的合理范围,区间宽度体现估计精度

CI=(p^1−p^2)±zα/2⋅SEdiff\displaystyle CI = (\hat{p}_1 - \hat{p}_2) \pm z_{\alpha/2} \cdot SE_{diff}

结果出来了:p = 0.012,置信区间为 (0.5%, 4.1%),不包含 0。王姐松了口气——2.3% 的复购率提升“显著”存在,不是随机波动制造的幻觉。但她没忘了看区间下限:最低也可能只有 0.5%,值不值得全换还得算一笔经济账。显著性检验是实验的“验货环节”:它不能保证你一定对,但能帮你避开“把噪音当信号”的坑。

常见陷阱:王姐踩过的那些“数据坑”

就算前面的设计都做对了,实验过程中依然暗藏着各种“翻车点”。王姐这一路走来,就踩过不止一个坑。第一个是样本偏差:她最开始让服务员“挑满意的客人”填问卷,结果满意度近乎满分。这不是菜的功劳,是“幸存者偏差”——那些不满意的客人早就不来了。线上实验同样如此:只用活跃用户做实验,结论无法推广到沉默的大多数。

第二个是中途改版:实验跑了一周,王姐觉得新菜的摆盘不好看,临时换了个盘子。结果数据出现一个诡异的波动——到底应该归因于菜品还是盘子?实验一旦启动,绝不能动任何变量,这正是“变量控制”要求在时间维度的延伸。第三个是多重比较:数据出来后,王姐让店员把复购率按年龄、性别、职业、星座切了二十多种分维度比较,结果总有一两个维度碰巧“显著”。多次比较必然放大假阳性概率——就像抛二十次硬币,总有一次会连续三次正面。第四个是新奇效应:新菜刚上桌,客人图新鲜想尝尝,复购率虚高;等新鲜劲过去,数据就会回落。

α′=αm\displaystyle \alpha' = \frac{\alpha}{m}

1. α 原始水平:单次比较设定的显著性阈值,通常为 0.05

α=0.05\displaystyle \alpha = 0.05

2. m 比较次数:同时进行的独立假设检验个数,比如按 20 个维度切分就是 20 次

m\displaystyle m

3. α' 校正水平:每次比较实际采用的更严格阈值,保证整体错误率不失控

α′=αm\displaystyle \alpha' = \frac{\alpha}{m}

王姐把这次踩坑的经历写成了“试菜十诫”贴在后厨:随机分组、一次只改一菜、指标先定、样本算齐、不偷看数据、不中途换盘子、不切 20 个维度、等新奇效应消退再做结论……常见陷阱告诉我们:A/B 测试的科学性不是“用了分组就算科学”,而是每个细节都在对抗人性与随机性的双重干扰。守住这些原则,你的实验结论才配得上“数据驱动”四个字。

AI 应用场景

推荐系统新算法的 A/B 测试

阶段:模型评估与上线验证

解决的问题:新推荐算法直接全量上线,若效果不及预期,会大面积损伤用户体验;随意小流量验证又无法科学归因。用实验设计原则,可以隔离“算法变更”这一单一变量,在可控风险内验证新模型的效果。

具体案例:某短视频 App 要验证“兴趣召回改进”是否提升人均观看时长。算法团队按用户 ID 哈希随机分桶,10% 用户进实验组、10% 进对照组,实验前预先确定北极星指标“人均观看时长”、护栏指标“完播率不低于基线”,并依据历史数据算出每组至少需 20 万用户,实验跑满 14 天后用 z 检验判断显著性。最终 p < 0.01,且护栏指标无回落,新算法全量上线。

大模型 Prompt 的自动对比验证

阶段:Prompt 工程迭代与效果评估

解决的问题:靠“感觉某个 Prompt 回答更好”来迭代大模型应用,太主观、不可复现。把 Prompt 改动当成“新菜”,把用户请求当成“试吃客人”,用 A/B 测试客观评估生成质量。

具体案例:某电商客服机器人的 Prompt 从“直接回答”改为“先引导用户补充订单号再回答”。工程师将线上对话流量按 1:1 随机分流,主指标设为“一次解决率”,护栏指标设为“平均响应时长”,用假设检验比较两版 Prompt 的效果。结果显示新 Prompt 的一次解决率从 68% 提升到 74%,p < 0.05,正式全量切换。

Python 演示

python62 行
import mathimport random  def simulate_trial(p, n):    """模拟n个用户,每个用户以概率p完成转化,返回转化人数"""    x = 0    for _ in range(n):        if random.random() < p:            x += 1    return x  def z_score(x1, n1, x2, n2):    """计算两组转化率的z统计量"""    p1 = x1 / n1    p2 = x2 / n2    p_pool = (x1 + x2) / (n1 + n2)    se = math.sqrt(p_pool * (1 - p_pool) * (1 / n1 + 1 / n2))    if se == 0:        return 0.0    return (p1 - p2) / se  def normal_cdf(x):    """标准正态分布的累积分布函数"""    return 0.5 * (1 + math.erf(x / math.sqrt(2)))  def run_ab_test(ctrl_rate, test_rate, n, seed=42):    """模拟一次完整的A/B测试,返回各组转化数、z值、p值和结论"""    random.seed(seed)    x_ctrl = simulate_trial(ctrl_rate, n)    x_test = simulate_trial(test_rate, n)    z = z_score(x_ctrl, n, x_test, n)    p_value = 2 * (1 - normal_cdf(abs(z)))    significant = p_value < 0.05    return x_ctrl, x_test, z, p_value, significant  def min_sample_size(effect_size, alpha=0.05, power=0.8):    """计算每组最小样本量,基于两比例检验的近似公式"""    z_alpha = 1.96    z_beta = 0.84    p0, p1 = effect_size    p_avg = (p0 + p1) / 2    n = (z_alpha + z_beta) ** 2 * 2 * p_avg * (1 - p_avg) / (p1 - p0) ** 2    return int(math.ceil(n))  if __name__ == "__main__":    print("场景:新菜牌提升复购率实验")    print("对照组复购率 10%,实验组 12%,每组 5000 人")    x1, x2, z, p, sig = run_ab_test(0.10, 0.12, 5000)    print(f"对照组: {x1}/{5000} = {x1/5000:.2%}")    print(f"实验组: {x2}/{5000} = {x2/5000:.2%}")    print(f"z = {z:.2f}, p = {p:.4f}, 结论 = {'显著' if sig else '不显著'}")    print("---")    print("若希望检测 10% 到 12% 的提升,每组最少需要:")    print(min_sample_size((0.10, 0.12)), "人")    print("若只检测 10% 到 10.5% 的提升,每组最少需要:")    print(min_sample_size((0.10, 0.105)), "人")
目的:完整演示一个 A/B 测试的科学流程——用模拟数据跑出两组转化率,自动计算 z 统计量与 p 值,并依据样本量公式预估每一组至少需要多少用户,让实验在启动前就有数学保障。
  1. def simulate_trial(p, n):模拟一组用户的转化行为,p 是转化概率,n 是用户数,返回成功人数
  2. random.seed(seed)固定随机种子,保证实验在不同机器上可以复现
  3. p_pool = (x1 + x2) / (n1 + n2)合并两组转化率,用于更稳健地估计标准误
  4. significant = p_value < 0.05显著性判断,对应正文中的“p 值 < 0.05 拒绝原假设”
  5. min_sample_size(effect_size, alpha=0.05, power=0.8)实验开始前先算好样本量,避免“跑完了才发现人不够”

常见误区

误区跑完实验,看到 p 值是 0.03,觉得“这个改动有 97% 的概率有效”,而且效果一定很大,赶紧全量上线。

正解p < 0.05 只说明“在'没差异'的假设下,观察到当前数据的概率不足 5%”,它反驳的是“纯属巧合”,并不等于“改动有效的概率是 97%”,更不代表效应量大。可能实验组只比对照组高 0.01%,虽然显著,却没有业务价值。判定上线还要看效应量的置信区间下限、成本收益和护栏指标。就像王姐虽然复购率提升“显著”,但如果只提升 0.5%,是否值得换菜还得算账。

为何常见:显著性检验的“拒绝 / 不拒绝”二分结论,让人误把它当成“有效 / 无效”的标签,忽略了 p 值定义中的条件概率本质。

误区实验上线后不着急看结果,让它一直跑一个月,反正数据越多越准确。

正解样本量不是“无限增大”就好。实验时间过长会引入周期性干扰(工作日与周末用户结构不同)、用户学习效应(老用户逐渐习惯新功能)、版本演替(产品其他功能也在更新),都可能污染结论。正确的做法是实验前按公式算出最小样本量,达到后尽快出结论,并设置“最长运行时间”,到期未显著也需止损分析。

为何常见:直觉上“大数据 = 高可信”,但忽视了实验数据的产生背景并非一成不变,时间拉长反而让“其他变量”有机会混进来。

误区产品迭代紧,标题、按钮、价格一起改,上线后看哪个数据好用哪个,省时间。

正解同时改变多个变量,实验组与对照组的差异是多因素叠加的,你无法把效果的功劳(或锅)归因到具体哪一个因素上。“数据好”了不知道是谁的功劳,“数据差”了也无从优化。除非使用专门的多因素实验设计(如正交实验),否则必须坚持单变量原则——一桌菜只换一道,才能说清楚是那道菜的问题。

为何常见:业务方追求速度,容易把“验证”和“上线”混为一谈,忽视了归因才是实验的核心价值。

误区实验结果 p = 0.23,于是断定“新方案没有效果”,直接砍掉方案。

正解p > 0.05 只表示“证据不足以拒绝'无差异'的原假设”,并不等价于“证明了无差异”。它可能意味着效应量确实很小,也可能意味着样本量不足、功效不够。更合理的解读是:“当前数据无法确认新方案有效”,需要增大样本或重新设计实验再下结论。就像只有 5 个人试吃,没吃出差别,能说“新菜肯定不好吃”吗?

为何常见:人们习惯把“拒绝/不拒绝”理解为“真的/假的”,忽略了统计检验的证伪逻辑——它只能帮你在证据不足时保持审慎,不能帮你证明“没有”。

误区实验跑了三天,发现实验组指标领先,立刻宣布胜利、全量上线。

正解反复偷看并随时决定停止,会极大膨胀第一类错误率——数据天然有波动,总有一刻实验组“碰巧”领先,这未必是真效果。科学做法是实验前预先固定样本量与停止规则(如“达到最小样本量且 p < 0.05 才停止”),期间不要因为阶段性领先就提前终止。就像抛硬币,抛到第 3 次恰好连续正面,不能断言硬币有偏。

为何常见:人对自证有天然渴望,看到数据朝有利于自己的方向变化就想立刻行动,这是“赌徒谬误”在实验决策中的翻版。

面试题

Q1. A/B测试中,原假设(H0)通常表述为?

单选题 · easy

  • A.新方案效果显著优于旧方案
  • B.新旧方案效果没有差异← 正确答案
  • C.旧方案效果显著优于新方案
  • D.样本数据不符合正态分布

答案:B。原假设是实验默认保护的基准立场,A/B 测试中通常设定为“新旧方案无差异”。数据的作用是尝试推翻它,而不是努力证明它。就像王姐试菜前先默认“新菜和老菜一样好吃”,除非数据足够硬,否则不轻易改菜单。

Q2. 设置对照组的核心目的是什么?

单选题 · easy

  • A.扩大实验样本总量
  • B.为实验组提供比较基准← 正确答案
  • C.给用户更多选择权
  • D.降低实验运行成本

答案:B。对照组吃的是“老菜”,代表什么都不改时的基准表现。没有对照组,就不知道实验组的数据是改动的功劳还是自然波动。对照组是实验科学中最基础的参照系。

Q3. 在试菜实验中,p < 0.05 意味着?

单选题 · easy

  • A.新菜有九成五概率比老菜好吃
  • B.数据强力拒绝两菜一样的假设← 正确答案
  • C.有 5% 的客人不喜欢新菜
  • D.实验组人数占全部客人的 5%

答案:B。p < 0.05 是指在“两菜没有差别”的假设下,出现当前这么极端数据的概率低于 5%。它表示差异不太可能来自巧合,而不是“新菜更好吃的概率是 95%”,也不是“有 5% 的客人不满意”。

Q4. 下列哪项属于A/B测试中的混淆变量?

单选题 · mid

  • A.实验组用户恰好赶上周末流量高峰← 正确答案
  • B.用户被均匀随机分配到两组
  • C.两组使用相同的页面模板
  • D.实验期间未改变任何其他功能

答案:A。混淆变量是“除了目标变量之外、与结果相关的因素”。实验组撞上周末,流量类型变化会污染结论;B、C、D 都是控制变量的正确操作,是实验设计中应该做的。

Q5. 计算最小样本量时,不需要以下哪个参数?

单选题 · mid

  • A.显著性水平 α
  • B.统计功效 1-β
  • C.用户平均年龄← 正确答案
  • D.最小可检测效应量 δ

答案:C。样本量公式由 α、1-β、基线率 p 和效应量 δ 决定,用户年龄与样本量数学上无关。如果按年龄分组计算各自的样本量,那是分层设计的问题,不属于基本样本量公式的输入。

Q6. 以下哪些做法会破坏A/B测试的有效性?

多选题 · mid

  • A.实验到一半修改实验组页面← 正确答案
  • B.同一用户同时出现在两组← 正确答案
  • C.实验前预先确定主指标
  • D.对同一数据反复做多种切分← 正确答案

答案:ABD。中途改版引入了新的变量,破坏归因;同一用户同时出现在两组违背独立分组假设;多重切分比较放大假阳性。预先确定主指标是正确做法,保证实验“先射击后画靶”。

Q7. 在固定样本量下,把显著性水平 α 从 0.05 降到 0.01,最直接的变化是?

单选题 · hard

  • A.第二类错误 β 也随之增大← 正确答案
  • B.统计功效也随之增大
  • C.样本标准差也随之增大
  • D.效应量也随之增大

答案:A。降低 α 意味着更难拒绝原假设,“假阳性”少了,但把真实差异判为不显著的概率 β 会上升。α 与 β 在固定样本量下此消彼长,就像把“好吃”的门槛抬得很高,反而容易漏掉真正好吃的新菜。

Q8. 北极星指标的最佳特征是?

单选题 · mid

  • A.覆盖核心价值且不易被操纵← 正确答案
  • B.与业务目标无关但便于测量
  • C.最容易提升的指标优先
  • D.只关注短期收入增长

答案:A。北极星指标要真实反映产品为用户创造的核心价值,且不能因为小动作就能刷高。如果选一个“容易提升但与价值无关”的指标,实验再显著也没有业务意义。

Q9. 关于样本量 n 与实验参数的关系,下列说法正确的有?

多选题 · extreme

  • A.最小可检测效应量越小所需样本越大← 正确答案
  • B.显著性水平α取值越小所需样本越大← 正确答案
  • C.效应量越大所需样本越多
  • D.统计功效越高所需样本越多← 正确答案

答案:ABD。从公式 n ∝ (z_α+z_β)²·2p(1-p)/δ² 看:δ 在分母上,δ 越小 n 越大,故 A 对、C 反了;α 越小,z 临界值越大,n 越大,B 对;功效越高,β 越小,z_β 越大,n 越大,D 对。

Q10. 对 95% 置信区间的正确解读是?

单选题 · mid

  • A.有九成五概率真实差异落在区间内
  • B.重复实验约九成五的区间会覆盖真值← 正确答案
  • C.区间越宽说明差异越可信
  • D.区间不包含 0 即判定效果为零

答案:B。置信区间描述的是“随机区间覆盖真值”的频率性质:反复抽样构建区间,约 95% 的区间会套住真实差异。对单次实验只能说“以 95% 的置信水平相信该区间覆盖真值”。区间越宽说明估计越不精准;区间不含 0 表明差异显著,不代表效果大。