A/B 测试完全指南:实验设计、样本量、显著性检验
深入讲解 A/B 测试的统计学基础、实验假设、p 值、置信区间、样本量计算、Multi-arm bandit、贝叶斯方法、灰度发布与常见陷阱。
A/B 测试(也称 Split Testing 或随机对照试验)是互联网产品优化的黄金标准。从谷歌搜索结果的蓝色深浅,到电商 App 的「立即购买」按钮颜色,几乎所有数据驱动的决策背后都有 A/B 测试的身影。但许多团队把 A/B 测试做成了伪科学:看几天数据、看到涨幅就上线、中途改假设、忽视样本量——这些做法会导致虚假正率(发现其实不存在的效果)高达 70%,最终做出错误决策。本指南从统计学基础入手,讲清楚假设检验、p 值、样本量、以及实战中的 Multi-arm bandit、贝叶斯方法、灰度发布等高级话题,帮你设计靠谱的实验。
什么是 A/B 测试
A/B 测试的核心思想很简单:随机将用户分成两组(A 组和 B 组),A 组看到当前版本(对照组,Control),B 组看到新版本(实验组,Treatment),记录双方的行为(点击率、转化率、留存、收入等),通过统计检验判断两者是否有显著差异。
关键词是「随机」和「因果」。随机分配确保两组用户特征可比(年龄、地域、设备等分布一致),这样观察到的差异才能归因于版本差异而非用户特征。如果你手工选择用户、或按时间段分组(周一对比周二),就会混淆因果,结论不可信。
A/B 测试 vs 其他方法对比:
- 关键词搜索流量分析:看用户自然搜索了什么,你能发现需求但无法测试解决方案。
- 定性用户访谈:深入理解痛点,但样本量小、易受主观偏差。
- 灰度发布:逐步推送新版本,监控技术故障(崩溃、延迟),但不能衡量商业价值。
- A/B 测试:量化因果效应,给出置信区间,是决策的最强证据。
一个完整的 A/B 测试周期包括:(1) 定义假设和主指标,(2) 计算样本量,(3) 运行实验并收集数据,(4) 统计检验,(5) 得出结论并决策。跳过任何一步都会削弱结果的可信度。
实验假设:零假设 vs 备择假设
假设检验(Hypothesis Testing)是 A/B 测试的逻辑骨架。你需要事先陈述两个相反的假设,然后用数据推翻其中一个。
零假设 (H₀):假设新版本与旧版本没有差异,任何观察到的差异都是随机波动。例如:「按钮颜色不会影响点击率」。
备择假设 (H₁):假设新版本与旧版本有差异。例如:「按钮颜色会影响点击率」(双尾)或「新按钮颜色会提高点击率」(单尾)。
注意:零假设和备择假设之间没有对称性。统计检验的逻辑是「反证法」——我们试图推翻零假设(「没有效果」)以证明备择假设(「有效果」)。只有当数据充分「不符合」零假设时,我们才能拒绝它。
单尾 vs 双尾:
- 双尾:H₁ 为「有差异」,不区分方向。适合探索性实验,检验功效略低但更保守。
- 单尾:H₁ 为「新版本更好」或「新版本更差」,事先指定方向。适合有明确预期的改进实验,同样样本量下检验功效更高。但如果实验结果反向(新版本更差),单尾测试会忽视这个有害的信号。
建议:除非你非常确定新版本不可能更差(很少有这样的把握),否则用双尾测试。宁可保守一点,避免上线有害改动。
p 值与统计显著性 (p < 0.05)
p 值(p-value)是最常被误解的概念。它不是「结果为真的概率」,而是「假设零假设为真,观察到当前数据或更极端数据的概率」。
举例:你投掷一枚硬币 100 次,得到 60 次正面。计算出 p 值 = 0.08。这不是说「硬币有偏差的概率是 8%」,而是说「假如硬币是公平的,出现 60+ 次正面(或 40 次以下)的概率是 8%」。
α 值(显著性水平):通常设为 0.05,意味着我们愿意承受 5% 的第一类错误风险(虚假正率)。当 p < 0.05 时,我们说结果「统计显著」,拒绝零假设,认为新版本确实有效果。
为什么是 0.05?这是 Ronald Fisher 在 1920 年代定下的惯例,没有科学依据。现代统计学家经常争议这个阈值。
第一类错误 vs 第二类错误:
- 第一类错误 (α):错误地拒绝零假设,声称有效果其实没有。概率为 0.05。
- 第二类错误 (β):未能拒绝零假设,错过了真实的效果。概率为 β,通常设为 0.1-0.2(80-90% 的「检验功效」)。
这两个错误不能同时最小化:降低 α 会增大 β,反之亦然。样本量越大,两者都会减小。
置信区间的实战意义
p 值只回答是否显著的「是/否」问题。置信区间(Confidence Interval)则给出效应大小的范围估计,对决策更有用。
95% 置信区间:假设你测出转化率从 2% 提升到 2.4%,95% CI 为 [0.1%, 0.7%]。这意味着如果重复无限次相同规模的实验,约 95% 的置信区间会包含真实的转化率提升。
为什么置信区间比 p 值更有用:
- 它显示效应的大小。p < 0.05 可能是因为样本量巨大而效应微小。
- 它支持更灵活的决策。根据你的风险偏好,可能选择上线或继续迭代。
- 它自动提示假设检验的结果。若 95% CI 跨越零,说明在 α=0.05 水平下不显著。
实战建议:在报告实验结果时,同时给出点估计、置信区间和 p 值,让决策者全面理解风险与收益。
样本量计算公式与实例
样本量计算是 A/B 测试中最常出错的环节。很多产品经理根本不算,凭感觉运行一周或一个月就下结论——这样的结果大多是虚假的。
基本公式(两样本比例检验):
n = 2 * (z_α/2 + z_β)² * (p₀(1-p₀) + p₁(1-p₁)) / (p₁ - p₀)² 实例 1:电商转化率提升
- 基线转化率 p₀ = 2%(历史数据)
- 期望提升 20%,则 p₁ = 2% × 1.2 = 2.4%
- n ≈ 48,700 每组
- 结论:总共约 97,400 个事件。如果日均转化 500 次,需运行约 195 天。
实例 2:应用内点击率提升
- 基线点击率 p₀ = 10%
- 期望提升 5 个百分点,p₁ = 15%
- n ≈ 3,900 每组
- 结论:总 7,800 个。如果日均 1 万个访客,运行约 1 天即可。
关键参数的影响:期望提升越小,所需样本量越大;基线转化率越接近 50%,所需样本量最大;功效越高,样本量越大。
常见陷阱:很多人计算出 50,000 样本后,看到 5 天内各收到 50,000 访客,就停止实验。但这忽视了周期性、季节性、外部事件的影响。建议至少跑满 1-2 周,覆盖完整的周期。
Multi-arm Bandit 与流量分配
传统 A/B 测试采用「固定分配」:50% 流量给对照,50% 给实验。这有个缺点:如果实验版本糟糕,前一半样本量内仍有 50% 用户体验差版本,损失巨大。
Multi-arm Bandit(多臂老虎机)是一种动态分配策略。在探索(找出最好的机器)和利用(尽量使用最好的机器)之间平衡,最大化总收益。
常见算法:
- ε-贪心(Epsilon-Greedy):每次有 ε 概率随机选择(探索),1-ε 概率选表现最好的(利用)。
- Thompson Sampling(汤普森采样):根据每臂的贝叶斯后验分布采样,自动平衡探索与利用。Google、Netflix 等用这个。
- UCB(上置信界):每次选择「估计收益 + 不确定性」最大的臂,鼓励探索不足的臂。
Bandit vs A/B 测试:Bandit 流量动态倾斜向更好的版本,总体损失更少,适合快速迭代。但难以给出精确的因果效应估计。A/B 测试均匀分配确保精确性,但表现差的版本也要吃 50% 流量。很多企业分两阶段使用两者。
贝叶斯 A/B 测试与先验
频率派统计(传统 A/B 测试)将参数视为固定未知值。贝叶斯统计将参数视为随机变量,用先验分布表达事前信念,观察数据后更新为后验分布。
贝叶斯 A/B 测试的工作流:
- 1. 设定先验:基于历史数据或领域知识,假设转化率的分布。
- 2. 收集数据:运行实验,记录对照与实验组的转化次数。
- 3. 计算后验:用贝叶斯公式更新信念。
- 4. 计算获胜概率:直接回答「新版本比旧版本好的概率是多少」。
贝叶斯 vs 频率派:贝叶斯可直接得到「新版本好的概率」,支持连续监测,自然融合先验知识。频率派逻辑严谨,不依赖主观先验,但 p 值容易被误读。
何时用贝叶斯:你有充分的历史数据来设定合理的先验;你需要灵活的连续监测;你想直观地回答「新版本好的概率」。
灰度发布、工具与常见陷阱
灰度发布是将新版本逐步推给 1% → 10% → 50% → 100% 的用户,每步监控技术指标。它的目的是风险管理,不是因果推断。灰度通过技术检查后,还需 A/B 测试来衡量商业价值。
常见陷阱及解决方案:
- 中途「窥探」改规则:看到中间结果就修改假设。这会导致 p 值虚高。解决:提前注册假设,用序贯分析方法修正。
- 忽视新用户 vs 回访用户:新用户体验较差。解决:分层分析。
- 时间序列干扰:周末、季节性、外部事件都会影响指标。解决:至少运行完整周期。
- 复合指标问题:同时监测 10 个指标,其中至少 1 个会虚假显著。解决:指定主指标,或用 Bonferroni 修正。
- 样本不独立:同一用户被分到多个实验,某些实验会相互干扰。解决:用户级别的随机分配。
常用工具:Google Optimize(已下线 2023)、VWO、Optimizely、GrowingIO(国内)、开源方案(PlanOut、Statsig、LaunchDarkly)。
「实验不是 QA」:A/B 测试是业务决策工具,不是功能验证。测试前版本代码必须经过 Code Review 和 QA 测试。
常见问题
为什么 A/B 测试中 p < 0.05 而不是其他阈值?
0.05 是 Ronald Fisher 在 20 世纪 20 年代确立的约定俗成标准,表示 5% 的第一类错误风险(误判有效果)。这是统计学实践中的惯例,并非科学定律。部分研究者主张改为 0.01 或更严格的标准以提高可复现性。
样本量计算中的「期望提升」怎么定?
期望提升通常由业务需求和历史数据驱动。若转化率当前为 2%,预期提升 20%,则目标转化率为 2.4%。期望提升越小,所需样本量越大。建议从历史 A/A 测试中估算现实的最小可检测效应(MDE)。
灰度发布和 A/B 测试有什么区别?
灰度发布是风险管理手段,逐步将新版本推给百分比用户,监控技术指标(无崩溃、低延迟),不强求统计显著性。A/B 测试则严格设计对照,衡量业务指标的因果效应,需要显著性检验。两者可组合:灰度通过技术检验后,再用 A/B 测试衡量商业价值。
Multi-arm bandit 相比传统 A/B 测试的优势是什么?
Bandit 实时分配更多流量给表现较好的变体,探索与利用平衡,总体目标函数损失更少。但它不能像 A/B 测试那样给出因果效应的精确估计和置信区间,适合快速迭代而非严格决策。很多公司两者并用。
怎样避免「窥探」成见导致的假阳性?
设定提前停止规则并在试验前注册(pre-register)。若看到中间结果就调整假设或停止标准,p 值会虚高。贝叶斯框架通过连续监测修正更灵活,但仍需谨慎。最好用 mSPRT(多重序列概率比测试)等工序修正方法。
小流量企业做 A/B 测试有什么替代方案?
流量不足时:(1) 延长测试周期;(2) 用贝叶斯方法加入先验;(3) 用伪实验(synthetic control)从历史数据构造对照;(4) 改进指标敏感度(降低噪声);(5) 联合多个小指标做复合指标。