A/B Test
解决什么问题:在不确定哪个方案更好时,用实验代替争论—— 没有 A/B 测试 = 凭经验 / 谁嗓门大谁说了算; 有了 A/B 测试 = 用数据回答"哪个更好"。
它是什么
A/B Test(A/B 实验) 是一种对照实验方法—— 把用户随机分到两个(或多个)组,每组看到不同方案, 通过比较业务指标(转化率、留存、点击)来判定哪个方案更好。
用户随机分流
│
┌────────┴────────┐
↓ ↓
方案 A 方案 B
(现状) (新方案)
│ │
↓ ↓
指标 A 指标 B
│ │
└────────┬────────┘
↓
显著性检验
↓
A 更好? B 更好? 无显著差异?控制论 Ch 16 自寻最优: "扰动 + 测量 = 在未知目标函数的情况下找到最优点" ——A/B 测试就是这个原理的工程化:扰动 = 不同方案,测量 = 业务指标。
V2 视角(V2 B5 + B6):A/B 测试是"用反馈回答权衡"的工程机制—— V2 B6 说"没有完美解",A/B 测试就是"在多个次优解中找出当前最优"的工具。
关键属性
| 属性 | 值/含义 |
|---|---|
| 随机分组 | 用户分流必须随机,否则结论不可信 |
| 同时进行 | A/B 必须同期,避免时间偏差 |
| 单变量 | 一次只改一个变量,多变量要正交设计 |
| 样本量 | 事先计算(与效应量、显著性、检验力有关) |
| 业务指标 | 必须可量化、可归因、可观测 |
| 显著性 | p 值 < 0.05 才算"真差异" |
| 可回滚 | 实验必须能秒级关闭 / 回滚 |
| 不污染 | 实验流量不能影响主链路 |
怎么用
场景 1:UI 文案微调(小改动小流量)
假设:新按钮文案"立即购买"比"加入购物车"转化率高
设计:
- 流量:5% 用户参与实验
- 分组:50/50 随机
- 指标:点击率 / 转化率 / GMV
- 时长:7 天(覆盖工作日 + 周末)
分析:
- 样本量:每组至少 1 万 UV
- 显著性:p < 0.05
- 效应量:相对提升 ≥ 5%场景 2:算法/推荐大改(大改动小流量灰度)
假设:新推荐算法点击率提升 10%,但担心性能
设计:
- 流量:1% 灰度,逐步放大到 5% / 10% / 50%
- 分组:实验组(新算法)vs 对照组(旧算法)
- 指标:CTR / 转化 / 延迟 / 错误率
- 守门指标:延迟 P99 不能劣化 > 5%
护栏:
- 延迟劣化 → 自动暂停实验
- 错误率上升 → 自动回滚
- 业务指标负向 → 立即关闭场景 3:不可逆改动的"A/B 替代"
有些改动不可逆(如价格调整),不能直接 A/B—— 改用自然实验:区域差异、时间窗口差异、用户分层差异。
例:某地区调价
- 处理:把调价当作"实验"分析,比较该地区 vs 其他地区
- 风险:选择偏差(地区本身可能不同质)
- 补救:双重差分(DID)/ 倾向得分匹配(PSM)场景 4:A/B 测试的工程实现要点
1. 分流服务:稳定的 user_id → bucket_id → experiment_id → variant
2. 配置中心:实验配置可秒级下发
3. 埋点:实验曝光 / 转化必须可关联
4. 实时监控:实验期间指标必须实时可见
5. 自动关停:负向指标超阈值自动停实验IDDD Ch 8 + EDM Ch 2:事件流 = 实验数据的载体—— 用户行为事件必须先经过稳定的 domain event 框架, A/B 测试才能正确归因。
常见误区
- "分组不随机"——错。随机是 A/B 的灵魂,不随机 = 偏倚 = 结论无效
- "样本量越小越好"——错。样本量 = 显著性 + 效应量的函数,先算再跑
- "跑完不看显著性"——错。差异可能由噪声造成——必须 p < 0.05 才算
- "赢了一次就全量"——错。需要复现(不同时间段、不同人群)确认稳健
- "A/B 测试 = 万能决策器"——错。长期效果、用户情感、品牌影响无法用短期 A/B 捕捉
关键洞察
A/B 测试是"用实验回答不确定"的工程化机制——
把"老板拍脑袋 / 工程师凭直觉 / PM 看感觉" 转化为"让数据说话"。 但 A/B 测试不是万能:它只能回答"在统计意义上哪个更好", 不能回答"我们应不应该做这件事"——那需要价值判断。
相关链接
- 闭环反馈——A/B 测试是闭环的一种
- 用户反馈——更宽口径的反馈
- 数据驱动——A/B 是数据驱动的一种
- 发布——A/B 与灰度发布配合
- [V3 涌现作为] · 权衡——A/B 是权衡的工具
- [V3 涌现作为] · 反馈——A/B 是反馈的一种