假设你是一名渔夫,接到一个任务:判断这片湖里到底有没有足够多的鱼,值不值得进货。你甩下第一竿,等了五分钟,浮漂没动。第二竿,依然没动。还要继续钓吗?钓多久才能下结论?聪明的渔夫不会凭“感觉”收竿,也不会机械地守着“必须钓满三天”的规矩。他会先估算湖的面积、鱼的密度、自己希望发现的鱼群大小、以及能承受误判的风险,再反推出应该甩多少竿、钓多少天。 A/B 测试中的实验时长计算,做的就是这件“渔夫算术”。工程师上线一个改版页面前,最常问的一句话是:这个实验要跑几天?答案不是 3 天或 7 天,而是由预期效果大小、当前转化率、显著性门槛和统计功效共同决定的样本量,再除以每日流量得出。用错了时长,结果要么是刚有风声就收竿,被随机波动骗得团团转;要么是钓了太久,季节一变,鱼群迁移,结论早已过时。这篇文章就用这套“渔夫算术”,带你弄懂实验时长的完整计算逻辑。

岗位关联

对 AI 从业者来说,实验时长计算是把 A/B 测试从“跑起来”推向“可信赖”的关键一步。掌握它,你就能科学规划模型迭代、功能上线的验证周期,避免用一次没有统计效力的实验做重大决策。

目录
  1. 可视化演示
  2. 时长决定因素
  3. 最小样本量
  4. 统计功效
  5. 周期效应处理
  6. 提前停止规则
  7. 时长计算实战
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

可视化两组分布的统计显著性检验过程,通过调节效应量和样本量观察p值变化,判断结果是否具有统计学意义。

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

分布对比与显著性检验 蓝色分布为对照组A,紫色/红色分布为实验组B,重叠区域反映效应量大小 p值低于0.05阈值时结果具有统计显著性,绿色仪表表示显著 p = P(|Z| ≥ z_obs | H₀) 统计显著性检验通过计算p值判断实验组与对照组差异是否非偶然。

时长决定因素

想象你受雇去判断一片湖里值不值得大批进货。出发前你不可能直接甩竿碰运气,而是要问自己四个问题:这湖多大?鱼群密度如何?我想发现的最小鱼群规模是多大?我能容忍'误报有鱼'和'漏掉鱼群'到什么程度?这四个答案决定你需要甩多少竿、钓多少天。A/B 测试的实验时长,也是由四个因素共同决定的:日流量、最小可检测效应、显著性水平和统计功效。

日流量对应湖面大小:每天能进入实验的用户越多,样本积累越快,实验天数越短。最小可检测效应(MDE)对应你想发现的最小鱼群:你想分辨出 1% 的提升,比分辨 2% 的提升难得多,所需样本量大约按平方关系增长。显著性水平 α 对应你对“误报有鱼”的容忍度:要求越严格,需要的证据越多。统计功效则对应你的捕捞技术:技术越好,同等条件下需要的时间越少。

这四个变量不是孤立起作用的,它们统一汇聚成一个方向性的关系:

所以渔夫出发前要做的第一件事,不是直接下竿,而是把湖面大小、目标鱼群、误判容忍度和捕捞把握这四件事想清楚。这四个变量定了,实验时长的骨架也就立起来了。

T∼1d,T∼1(p1−p0)2T \sim \frac{1}{d},\qquad T \sim \frac{1}{(p_1-p_0)^2}
时长与日流量成反比,与想检测的差异平方成反比。想发现越细微的提升,时间成本增长得越快。
  1. 成反比于日流量 d每天进实验的人越多,需要跑的天数越少。
    T∼1dT \sim \frac{1}{d}
  2. 成反比于效果平方MDE 从 2% 缩到 1%,其他条件不变,样本量需求约为原来的 4 倍。
    T∼1(p1−p0)2T \sim \frac{1}{(p_1-p_0)^2}

最小样本量

现在到了核心问题:到底要甩多少竿?假设湖里的真实“含鱼率”是 10%,你想以 80% 的把握发现哪怕 2% 的提升。统计学家给你一张“捕鱼量公式”——最小样本量公式。它把所有的主观要求(α、功效、MDE)和客观条件(基线转化率)换算成一个具体的竿数:每组需要多少用户。

在 A/B 测试中,转化率类指标的最小样本量公式如下。设 A 组基线转化率为 \(p_0\),B 组预期转化率为 \(p_1\),每组样本量相等:

这个公式的分子里,\(Z_{\alpha/2}\) 是显著性水平对应的临界值,\(Z_\beta\) 是功效对应的临界值;分母则是两组转化率差值的平方。分子的方差项刻画的是转化率波动的固有程度,分母刻画的是你希望捕捉的信号强度。信号越弱,要求的竿数就越多。

有了这张“竿数公式”,你就能算出要准备多少鱼饵、分几天抛完,而不是凭感觉说“钓三天就收工”。样本量不是拍脑袋的天数,它是一道有标准解的算术题。

n=(Zα/2+Zβ)2⋅(p0(1−p0)+p1(1−p1))(p1−p0)2n = \frac{(Z_{\alpha/2} + Z_\beta)^2 \cdot \left(p_0(1-p_0) + p_1(1-p_1)\right)}{(p_1-p_0)^2}
  1. 显著性临界值 Zα/2对应假阳性风险,α=0.05 时近似取 1.96,代表“证据要多硬才算显著”。
    Zα/2=1.96Z_{\alpha/2} = 1.96
  2. 功效临界值 Zβ对应假阴性风险,功效 80% 时近似取 0.84,代表“真正有效果时能发现它的把握”。
    Zβ≈0.84,1−β=0.8Z_\beta \approx 0.84,\quad 1-\beta = 0.8
  3. 合并方差项转化率越接近 0.5 波动越大,越接近 0 或 1 波动越小。它刻画了鱼群密度的固有波动。
    p0(1−p0)+p1(1−p1)p_0(1-p_0) + p_1(1-p_1)
  4. 效应平方 (p1-p0)²差值越小,分母越小,n 越大。这就是为什么想检测微小提升需要巨量样本。
    (p1−p0)2(p_1-p_0)^2

统计功效

功效可以理解成渔夫的“收竿技术”。同样是诱饵和湖水,高手能把咬钩的鱼稳稳拉上来,新手却频频脱竿。统计功效 \(1-\beta\) 衡量的就是:当真实效果确实存在时,你的实验能够“钓上来”(检测到)它的概率。如果一个有效果的改动上线,实验却有一半概率说“没效果”,那这个实验就像一只漏鱼的破网。

给定样本量 n,功效对应一个 \(Z_\beta\) 值:

计算出的 \(Z_\beta\) 再通过标准正态分布换算成功率 \(\Phi(Z_\beta)\)。公式直观地说明:真实差异越大、样本量越多,\(Z_\beta\) 越大,功效越高;显著性门槛越严格,功效越低。行业惯例把功效设为 80%,即真实效果存在时,实验有 80% 的概率给出“显著”结论。

如果功效只有 50%,相当于用抛硬币决定是否钓到鱼——效果明明存在,实验却有一半概率说“没效果”。所以在规划时长时,功效设定直接决定样本量大小:功效从 80% 提到 95%,所需样本量会显著上升,实验周期也随之拉长。

Zβ=∣p1−p0∣p0(1−p0)+p1(1−p1)n−Zα/2Z_\beta = \frac{|p_1-p_0|}{\sqrt{\frac{p_0(1-p_0)+p_1(1-p_1)}{n}}} - Z_{\alpha/2}
  1. 分子 |p1-p0|真实效果大小的绝对值,是你要从噪声中捞出的信号。
    ∣p1−p0∣|p_1-p_0|
  2. 分母标准误合并方差除以样本量再开方,度量转化率估计的随机波动幅度。
    p0(1−p0)+p1(1−p1)n\sqrt{\frac{p_0(1-p_0)+p_1(1-p_1)}{n}}
  3. 跨过显著性门槛信号强度除以噪声后,再减去显著性临界值,剩下的偏置量换算成功率。
    Zβ=信号噪声−Zα/2Z_\beta = \frac{\text{信号}}{\text{噪声}} - Z_{\alpha/2}

周期效应处理

钓鱼有个经验:清晨和傍晚鱼最活跃,正午和深夜几乎没口;春天鱼群靠近岸边,冬天就沉到深水。如果渔夫只挑清晨去钓三天,会觉得“这湖鱼真多”;只挑正午去,会觉得“这湖没鱼”。A/B 测试的流量同样带有周期性——工作日和周末的用户行为差异,有时比版本差异还大。

周期性效应指实验效果随星期、季节、促销活动周期发生波动。如果你只跑了周一到周三的数据,就算样本量够了,结论也只代表“工作日用户”,无法推广到周末场景。处理策略通常有四条:一是至少覆盖一个完整周,最好覆盖 2-3 个完整周;二是按日期分层,保证各组在工作日和周末的流量占比一致;三是警惕节假日和购物节,敏感时期让路或单独建实验;四是在排期时加入缓冲天数。

以下是考虑了周期与缓冲的时长公式:

聪明的渔夫会记录“几点鱼口好、什么季节鱼靠岸”,实验规划者也要把周期写进排期表,否则你拿到的“湖况报告”只属于某一个时辰,而不是一整片湖。

Tplan=7×⌈Tbase7⌉+tbufferT_{plan} = 7 \times \left\lceil \frac{T_{base}}{7} \right\rceil + t_{buffer}
纯样本量算出的天数,要向上取整到完整周,再叠加 1-3 天的缓冲,才能抵御周期性波动。
  1. 基础天数 T_base由每日流量和所需总样本量算出的纯积累天数。
    Tbase=NdT_{base} = \frac{N}{d}
  2. 向上取整到完整周期把 1.6 天变成 7 天,确保工作日与周末都被覆盖。
    7×⌈Tbase7⌉7 \times \left\lceil \frac{T_{base}}{7} \right\rceil
  3. 加缓冲 t_buffer留出应对突发流量波动和节日干扰的余量。
    tbuffer=1∼3t_{buffer} = 1 \sim 3

提前停止规则

河边最沉不住气的钓友,浮漂刚微微一动就猛提竿,结果十有八九是空竿,还吓跑了鱼。A/B 测试中的“偷看”是同一回事:实验跑了两天,瞄一眼 p 值,发现 0.03 < 0.05,兴奋地宣布“实验成功,上线新版本!”这种操作非常危险。

危险来自多次检验:统计检验的有效性依赖“预先设定的唯一一次判定”。每偷看一次 p 值,就等于多了一次隐性的假设检验,整体假阳性率随之膨胀。假设你每隔几天偷看一次,一共看了 k 次,那么整体 α 不再是 0.05,而是:

当 k=10 时,\(\alpha' \approx 0.40\)。也就是说,即使新版毫无效果,你也有约 40% 的概率在某次偷看时看到“显著”。这完全违背了实验设计的初衷。正确做法是:事前按样本量公式算好时长,在计划时间内不做中途决策;如果确实需要中间检查,使用序贯检验这类专为重复检验设计的框架;把最短实验时长设为硬门槛,未达标前不解读任何 p 值。

老钓手知道,提竿的时机不是看浮漂的每一次抖动,而是等浮漂给出“确实咬稳了”的信号——先按计划下竿,到了预定时间再收竿。实验也是如此:忍住偷看的冲动,才能在收竿时拿到可信的结论。

α′=1−(1−α)k\alpha' = 1 - (1-\alpha)^k
  1. 单次 α 设定一次检验的假阳性率控制值。
    α=0.05\alpha = 0.05
  2. k 次偷看后的整体假阳性率每多看一眼,整体门槛就被凿开一道口子。
    1−(0.95)10≈0.401-(0.95)^{10} \approx 0.40

时长计算实战

现在把所有装备整合成一张钓鱼计划表。已知每天的预计客流量、当前转化率、想验证的提升幅度,以及可接受的误判风险,如何算出实验要跑多少天?实战中通常分四步:确定 p0、MDE、α、功效;用最小样本量公式算出每组所需 n;用日流量估算总天数;最后向上取整到完整周期并加缓冲。

核心的时长换算公式:

其中 n 是最小样本量公式算出的每组样本量,2n 是两组总样本量,d 是每天可用于实验的总流量。举个具体例子:假设 p0=10%,想检测到 MDE=2%(即 p1=12%),α=0.05,功效=80%。代入公式得到每组约 3840 个样本,总样本约 7680。若每日总流量为 5000,则纯积累天数为 1.54 天。但考虑到周期效应,向上取整到 7 天,再留 2 天缓冲,最终计划定为 9 天。

钓鱼计划表最终呈现的不再是“钓到多少条就收竿”,而是“几号到几号、每天钓几小时、留几天余量应对风雨”。这样即便中间出现流量波动,计划依然可靠,结论依然立得住。

T=2ndT = \frac{2n}{d}
  1. 每组样本量 n把数值代入最小样本量公式。
    n=(1.96+0.84)2×(0.10×0.90+0.12×0.88)0.022≈3840n=\frac{(1.96+0.84)^2 \times (0.10 \times 0.90 + 0.12 \times 0.88)}{0.02^2}\approx 3840
  2. 总样本量 2nA、B 两组各 n,合计。
    2n≈76802n \approx 7680
  3. 除以日流量 d得到纯积累所需天数。
    T=76805000≈1.54 天T=\frac{7680}{5000}\approx 1.54\ \text{天}
  4. 周期取整 + 缓冲工程上最终计划天数。
    Tplan=7×⌈1.547⌉+2=9 天T_{plan}=7 \times \left\lceil \frac{1.54}{7} \right\rceil + 2 = 9\ \text{天}

AI 应用场景

增长团队的实验排期

阶段:实验规划与版本决策

解决的问题:功能上线前,团队常为“3 天冲刺”还是“跑两周”吵得不可开交。传统用固定天数拍板,上线后指标却经常反弹。用实验时长计算,以 p0、MDE、α、功效为统一语言,排期不再靠嘴争。

具体案例:某 App 改版登录页,日均流量 2 万,基线转化 8%,想验证提升到 9%。产品经理用样本量公式算出每组约 1.5 万样本,总样本 3 万,折合 1.5 天,但覆盖完整周后定为 7 天。第 7 天差异显著,安全上线。

广告素材智能优选

阶段:创意评估与投放优化

解决的问题:广告系统迭代素材时,如果只看前几小时点击率就加大预算,小样本下的随机波动会白白烧掉预算。用实验时长计算确定测试窗口,确保素材差异可信后再放量。

具体案例:某信息流广告平台测试两条 AI 生成的标题,基线 CTR 2%,目标检测到 0.3% 的差异,日流量 5 万。计算得出需要 6 天,覆盖工作日与周末。第 6 天确认新标题 CTR 显著更高,再全量切换。

推荐模型迭代评估

阶段:模型上线前验证

解决的问题:推荐系统新模型离线指标很好,在线 A/B 需要跑多少天?用户行为受星期影响大,直接用平均流量算天数会低估周期效应,需要把完整双周窗口纳入计划。

具体案例:某电商推荐模型,基线 GMV 转化率 3%,预期提升 0.15%。因目标很小,样本量需求极大。团队用功效分析和 14 天完整双周窗口跑实验,发现提升显著但周末效应明显,最终决定在大促后重复验证一次。

Python 演示

python28 行
import mathfrom scipy import stats  def min_sample_size(p0, p1, alpha=0.05, power=0.8):    z_alpha = stats.norm.ppf(1 - alpha / 2)    z_beta = stats.norm.ppf(power)    var = p0 * (1 - p0) + p1 * (1 - p1)    n = (z_alpha + z_beta) ** 2 * var / ((p1 - p0) ** 2)    return math.ceil(n)  def experiment_days(daily_traffic, p0, p1, alpha=0.05, power=0.8,                    cycle=7, buffer=2):    n = min_sample_size(p0, p1, alpha, power)    total = 2 * n    days = total / daily_traffic    days = math.ceil(days / cycle) * cycle + buffer    return n, total, days  if __name__ == "__main__":    p0, p1 = 0.10, 0.12    daily = 5000    n, total, days = experiment_days(daily, p0, p1)    print("每组样本量:", n)    print("总样本量:", total)    print("建议实验天数:", days)
目的:一行命令算出最小样本量和建议实验天数,直接为 A/B 测试排期提供依据。
  1. z_alpha = stats.norm.ppf(1 - alpha / 2)查标准正态分布表,得到双尾 α=0.05 对应的 1.96。
  2. z_beta = stats.norm.ppf(power)功效 80% 时对应的 z 值约 0.84。
  3. var = p0 * (1 - p0) + p1 * (1 - p1)两组转化率方差之和,即公式里的波动项。
  4. n = (z_alpha + z_beta) ** 2 * var / ((p1 - p0) ** 2)最小样本量公式的直接翻译。
  5. days = total / daily_traffic先用总样本量除以日流量,得到纯积累天数。
  6. days = math.ceil(days / cycle) * cycle + buffer向上取整到完整周期再叠加缓冲,覆盖工作日与周末。
  7. if __name__ == "__main__":命令行直接运行,输出可复制的排期结论。

常见误区

误区我经常听到“实验至少要跑 7 天,跑够 7 天结果就靠谱”。

正解7 天只是覆盖完整周的常见经验值,不是统计保证。如果日流量很小,7 天样本量不足,结果照样不显著;如果日流量巨大,1 天就能达到样本量,硬跑 7 天反而引入更多周期干扰。正确的时长来自样本量公式与周期覆盖的交叉判断,而不是一个固定数字。

为何常见:“7 天”直观、好记,很多实验工具也默认按周对齐,人容易把约定俗成当成原理。

误区每天盯着 p 值看,一旦小于 0.05 就停下来宣布胜利。

正解p 值本身是随机变量,样本量不足时的“显著”像浮漂被小鱼碰了一下,不代表真咬钩。更严重的是,多次偷看会让整体假阳性率大幅膨胀,可能达到 30% 甚至 40%。正确做法是提前算好时长,必要时用序贯检验框架。

为何常见:人天生厌恶等待,看到“显著”两个字就急于行动,忽略了“显著”前提是样本量达标。

误区既然怕漏掉真实效果,那就把功效设成 95%,反正公式代一下就行。

正解功效提高会显著增加所需样本量。从 80% 提到 95%,样本量可能增加近一倍,实验时长和流量成本都翻倍。0.8 是行业常见的平衡点,工程上要在灵敏度与速度之间做取舍,而不是一味追求参数好看。

为何常见:以为统计参数越大越可靠,忽略了统计功效背后有真实的流量和时间成本。

误区先把实验跑起来,如果样本不够,延长几天补上就好。

正解样本量是预先设计的,因流量不足而临时延长,会改变数据收集的时间窗口,引入额外的周期效应和背景变化。这就像钓到一半换鱼饵,数据收集方式变了,结果的可比性就受损。最好重新评估并规划新实验。

为何常见:小流量团队常想“多跑几天总能攒够”,忽略了数据一致性和提前停止对结论的污染。

面试题

Q1. 实验时长本质上由什么决定?

单选题 · easy

  • A.日历上安排的天数
  • B.样本量与每日流量的比值← 正确答案
  • C.功能上线的时间节点
  • D.团队人数的多少

答案:B。实验时长不是拍脑袋定的天数,而是所需样本量除以每日可用的流量。样本量越大、日流量越小,实验就跑得越久。B 正确,A/C/D 都与统计逻辑无关。

Q2. 想检测的 MDE 从 2% 降到 1%,其他条件不变,样本量大致变为原来的多少倍?

单选题 · easy

  • A.变为原来的 2 倍
  • B.变为原来的 4 倍← 正确答案
  • C.变为原来的 0.5 倍
  • D.保持不变

答案:B。最小样本量公式的分母是效应平方 \((p_1-p_0)^2\)。效应缩小一半,分母变为原来的 1/4,样本量因此约为原来的 4 倍。这和“鱼变小了要多甩竿才能发现”是同一个道理。

Q3. 统计功效 0.8 的正确含义是?

单选题 · mid

  • A.有 80% 概率不犯假阳性错误
  • B.有 80% 概率发现真实存在的效果← 正确答案
  • C.有 80% 用户会选择实验组
  • D.置信区间覆盖真实值的概率是 80%

答案:B。功效 \(1-\beta\) 是指在真实效果确实存在时,实验能检测到它的概率。80% 意味着真有效果时,只有 80% 的把握能看出显著。A 是特异性概念,C/D 是常见混淆项。

Q4. 实验日流量为 10000,每组最少需要 5000 个样本,不考虑周期效应,需要跑几天?

单选题 · mid

  • A.0.5 天
  • B.1 天← 正确答案
  • C.2 天
  • D.5 天

答案:B。两组总样本量为 10000,除以每日流量 10000,得到 1 天。注意是两组总样本量除以总日流量,而不是单组样本量除以总流量。这就像总共有 10000 条鱼需要捞,每天能捞 10000 次,一天就能完成。

Q5. 实验过程中偷看了 8 次 p 值,整体假阳性率最接近多少?

单选题 · hard

  • A.约 0.05
  • B.约 0.10
  • C.约 0.34← 正确答案
  • D.约 0.66

答案:C。整体假阳性率 \(\alpha'=1-(1-0.05)^8\approx0.337\),约 0.34。多次偷看让原本 5% 的错误率膨胀到三成以上,这正是提前停止规则要防范的核心风险。

Q6. 以下哪些做法可以缩短实验所需天数?

多选题 · mid

  • A.提高每日参与实验的用户流量← 正确答案
  • B.适当放宽最小可检测效应← 正确答案
  • C.将统计功效从 80% 提高到 95%
  • D.随机将部分用户排除在实验外

答案:AB。提高日流量能更快积累样本,放宽 MDE 能降低所需样本量,两者都缩短时长。提高功效反而需要更多样本,排除用户则减少可用流量,都会延长实验。

Q7. 处理周期效应时,以下哪些策略是合理的?

多选题 · mid

  • A.实验至少覆盖一个完整星期← 正确答案
  • B.保证工作日与周末的样本比例一致← 正确答案
  • C.只在工作日跑实验更准确
  • D.只在周末跑实验更准确

答案:AB。覆盖完整周并保证各天样本比例一致,才能让结论代表真实流量分布。只在工作日或只在周末跑,相当于只挑清晨钓鱼,结论天然有偏。

Q8. α=0.05 的统计意义是?

单选题 · easy

  • A.有 5% 概率得出“有效果”而实际无效← 正确答案
  • B.实验有 95% 概率成功
  • C.有 5% 概率漏掉真实效果
  • D.实验误差恰好是 5%

答案:A。α 是假阳性率,即版本实际上没有效果,却被判为显著的概率。5% 是单次检验的误差上限。漏掉真实效果对应的是 β,而不是 α。

Q9. 关于实验提前停止,下列说法正确的有?

多选题 · hard

  • A.看到 p 值小于 0.05 就可以立即停止
  • B.多次偷看会放大假阳性概率← 正确答案
  • C.序贯检验可以控制错误率并提前停止← 正确答案
  • D.未达到最小样本量前不应查看 p 值← 正确答案

答案:BCD。提前偷看会让整体误差率膨胀,因此 A 错。B 正确描述了 peeking 的危害。C 正确,序贯检验专门处理重复检验场景。D 是工程上的安全做法:样本量未达标前不解读 p 值,避免被噪声误导。

Q10. 想检测的 MDE 越小,意味着什么?

单选题 · mid

  • A.实验更容易得到显著结果
  • B.所需样本量会变得更大← 正确答案
  • C.实验周期会自动缩短
  • D.显著性水平需要调高

答案:B。MDE 越小,相当于想从噪声中捞出的信号越弱,需要积累更多样本才能可靠识别。样本量变大后,在日流量不变的情况下实验周期会变长,而不是缩短。