数据思维 · 第 4 篇

A/B 测试方法论

A/B 测试是数据驱动决策的”黄金标准”。它不是让你预测未来,而是让你在不确定性中做出更好的决策。

在前几篇中,我们学习了假设驱动分析、指标体系和漏斗分析。但这些方法都有一个共同的局限:它们只能发现相关性,不能证明因果性。要真正回答”这个改动是否有效”,你需要 A/B 测试。


什么是 A/B 测试

A/B 测试(也叫分流实验、对照实验)是一种随机对照实验方法,核心思路是:

  1. 把用户随机分成两组(或多组)
  2. 一组看到原始版本(对照组/Control),另一组看到新版本(实验组/Treatment)
  3. 对比两组在核心指标上的差异
  4. 用统计方法判断差异是否显著

关键词是随机分组——只有随机分组才能排除其他混淆因素,建立因果关系。

为什么不能直接”上线看效果”

假设你把商品详情页的”立即购买”按钮从蓝色改成红色,然后直接上线。结果发现本周转化率比上周高了 2%。

能说明红色按钮更好吗?不一定。因为:

  • 本周是周末,流量结构不同
  • 本周有促销活动,用户购买意愿更强
  • 上周有竞品在做大促,分流了用户
  • 自然增长的趋势也在提升转化

这些都是混淆变量。只有 A/B 测试的随机分组,才能把这些因素”控制住”。


A/B 测试的完整流程

第一步:明确实验目标

在开始测试之前,必须回答以下问题:

问题 示例回答
要验证什么假设? “红色按钮比蓝色按钮转化率更高”
核心指标是什么? 按钮点击率(CTR)
辅助观察指标有哪些? 页面停留时间、最终支付率
护栏指标是什么? 客诉率不能上升、退款率不能上升
预期提升幅度是多少? CTR 提升 5% 以上就有业务价值

护栏指标(Guardrail Metrics) 是”不能变差的指标”。比如你优化了转化率,但如果客诉率飙升,说明用户被误导了,这个实验应该叫停。

第二步:确定样本量

样本量太小,即使存在真实差异也检测不出来(统计功效不够);样本量太大,浪费时间和流量。

样本量的计算需要四个参数:

参数 含义 通常取值
基线转化率(p) 当前版本的转化率 实际数据
最小可检测效应(MDE) 你关心的最小提升幅度 取决于业务判断
显著性水平(alpha) 犯第一类错误的概率 0.05(即 95% 置信度)
统计功效(1-beta) 检测到真实差异的概率 0.80(即 80% 功效)

简化公式(单侧检验,近似计算):

每组样本量 n ≈ 16 x p x (1-p) / (MDE x p)^2

实际案例

  • 当前转化率 p = 5%
  • 希望检测到 10% 的相对提升(即绝对值从 5% 到 5.5%)
  • alpha = 0.05, power = 0.80
n ≈ 16 x 0.05 x 0.95 / (0.005)^2 = 16 x 0.0475 / 0.000025 = 30,400

每组需要约 30,400 个样本。如果日均流量是 10,000,实验组和对照组各分 50%,则需要运行约 6 天

第三步:设计分流方案

分流方案的核心原则:

原则一:随机且均匀

每个用户被分到实验组或对照组的概率必须相等。通常用 user_id % 100 的方式分桶。

原则二:用户级别分流,不是请求级别

同一个用户每次访问都应该看到同一个版本,否则体验不一致、数据也没法分析。

原则三:先做 AA 测试

在正式实验之前,先让两组都看原始版本,验证分流是否真的随机。如果 AA 测试中两组指标有显著差异,说明分流有问题。

AA 测试验证项 方法
用户量是否均匀 两组样本量差异不超过 1%
关键指标是否一致 转化率、ARPU 等在两组间无显著差异
用户属性是否均匀 新老用户比例、地区分布等是否一致

第四步:运行实验

实验期间的注意事项:

  • 不要中途偷看结果:如果看到 p 值低于 0.05 就停止,会大幅增加假阳性率(这叫”偷看问题”/Peeking Problem)
  • 不要在实验期间改方案:改了就不是同一个实验了
  • 注意外部事件影响:大促期间、节假日期间的数据可能不具代表性
  • 记录实验日志:谁在什么时间做了什么操作

第五步:分析结果

实验结束后,按以下步骤分析:

1. 检查数据质量

-- 检查两组样本量
SELECT experiment_group,
       COUNT(DISTINCT user_id) AS users,
       COUNT(*) AS events
FROM   experiment_log
WHERE  experiment_id = 'exp_001'
GROUP  BY experiment_group;

2. 计算核心指标

SELECT experiment_group,
       COUNT(DISTINCT user_id) AS users,
       SUM(is_converted) AS conversions,
       ROUND(SUM(is_converted) * 1.0 / COUNT(DISTINCT user_id), 4) AS cvr
FROM   experiment_results
WHERE  experiment_id = 'exp_001'
GROUP  BY experiment_group;

3. 进行统计检验

对于转化率这类比例指标,通常用 Z 检验卡方检验

指标 对照组 实验组
样本量 31,200 30,800
转化数 1,560 1,694
转化率 5.00% 5.50%
提升幅度 +10.0%
p 值 0.012
置信区间 [+3.2%, +16.8%]

p 值 = 0.012 < 0.05,结果统计显著。可以认为红色按钮确实提升了转化率。

4. 检查护栏指标

护栏指标 对照组 实验组 是否安全
客诉率 0.12% 0.13% 安全(差异不显著)
退款率 2.1% 2.0% 安全
页面加载时间 1.2s 1.2s 安全

第六步:做出决策

根据实验结果,可能的决策:

结果 决策
核心指标显著提升,护栏安全 全量上线
核心指标显著提升,但护栏指标变差 需要权衡,可能需要调整方案
核心指标无显著差异 实验无效,保持原方案或设计新实验
核心指标显著下降 实验失败,保持原方案

A/B 测试的常见陷阱

陷阱一:偷看问题(Peeking Problem)

每天查看 p 值,一旦达到 0.05 就停止实验。这会让实际假阳性率从 5% 飙升到 20%-30%。

解决方案

  • 预先确定实验持续时间和样本量,到期后再看结果
  • 或者使用序贯检验(Sequential Testing),每次查看时调整显著性阈值

陷阱二:多重比较问题

同时测试 10 个变体,其中有一个 p < 0.05。这可能只是随机波动。

解决方案

  • 使用 Bonferroni 校正:将 alpha 除以比较次数(如 10 个变体,alpha = 0.05/10 = 0.005)
  • 或使用 FDR(错误发现率)控制

陷阱三:新奇效应(Novelty Effect)

新版本刚上线时,用户因为好奇而多点击。过一段时间后效果会衰减。

解决方案

  • 实验至少运行 2 个完整的业务周期(如 2 周)
  • 分析效果是否随时间衰减

陷阱四:辛普森悖论

整体看实验组更好,但分每个子群看,对照组都更好。

用户群 对照组转化率 实验组转化率
新用户(占比 30%) 3.0% 2.5%
老用户(占比 70%) 8.0% 7.5%
整体 6.5% 6.8%

整体看实验组更好(6.8% > 6.5%),但分群后每个群体都是对照组更好。原因是实验组中老用户占比更高(分流不均匀)。

解决方案:检查分流均匀性,分群查看结果。

陷阱五:忽略实际业务意义

统计显著 ≠ 有业务价值。如果实验显著提升了 0.01% 的转化率,但改动需要投入 3 个工程师开发 2 周,可能不值得。

解决方案:提前定义 MDE(最小可检测效应),只关注有业务价值的提升。


不适合做 A/B 测试的场景

场景 原因 替代方案
流量太小 需要几个月才能达到样本量 前后对比 + 定性分析
网络效应产品(社交) A 组用户的行为会影响 B 组 按地区/城市分组实验
不可逆操作(定价) 用户看到不同价格会感知不公平 分地区测试或限时测试
重大战略决策 A/B 测试只能验证增量改进 用户调研 + 商业判断

实战案例:某新闻 App 优化推送策略

背景

某新闻 App 日活 200 万,每天下发 2 次 Push 推送。产品经理认为增加到 3 次可以提升 DAU,但运营担心会增加卸载率。

实验设计

项目 内容
假设 每天 3 次 Push 比 2 次能提升 DAU
核心指标 7 日平均 DAU
护栏指标 7 日卸载率、Push 关闭率
分流方式 user_id 尾号 0-4 对照组(2 次),5-9 实验组(3 次)
样本量 每组约 100 万,实验持续 14 天

实验结果

指标 对照组(2次) 实验组(3次) p 值
7日平均DAU 198万 202万 0.03
DAU 提升 +2.0% 显著
7日卸载率 0.8% 1.5% 0.001
Push关闭率 12% 18% <0.001

决策

虽然 DAU 显著提升了 2%,但卸载率几乎翻倍(0.8%→1.5%),Push 关闭率也大幅上升。长期来看,被卸载和关闭推送的用户无法再触达,得不偿失。

最终决策:不全量上线 3 次推送,而是针对高活跃用户增加到 3 次,低活跃用户保持 2 次。后续实验验证了这个分层策略既提升了 DAU 又控制了卸载率。


练习题

  1. 你想测试将商品列表从”每页 20 个”改为”无限滚动”是否能提升加购率。当前加购率为 8%,希望检测到 5% 的相对提升。日均商品列表 UV 为 50,000。请计算所需样本量和实验时长。

  2. 一个实验运行了 7 天后,产品经理过来说”我看了一下,实验组转化率已经高了 3%,p 值是 0.04,可以全量上线了”。你应该怎么回应?

  3. 你同时测试了 5 种不同的按钮颜色(红、蓝、绿、橙、紫),其中橙色的 p 值是 0.03。能直接说橙色最好吗?为什么?


小结

要点 说明
A/B 测试核心 随机分组 + 对照实验,建立因果关系
完整流程 目标→样本量→分流→运行→分析→决策
统计要素 alpha、power、MDE、样本量四要素
常见陷阱 偷看、多重比较、新奇效应、辛普森悖论
关键原则 预先定义目标、不中途改方案、关注护栏指标

下一篇我们将学习 数据驱动决策——从分析结论到推动业务行动,让数据真正发挥价值。