73 KiB
A/B 测试:用数据"做决策"
::: tip 🎯 核心问题 如何科学地验证产品改动的效果? 这就像问:新按钮真的更好用吗?还是用户只是因为新鲜感多点了一下?A/B 测试解决的就是"用数据说话"的问题——不是我觉得好,而是数据证明真的好。 :::
0. 先问一个问题:你有没有经历过这些"伪成功"?
但在讨论这些问题之前,让我们先理解一些基础概念...
0.1 什么是"实验"?
想象你在超市买牙膏,货架上摆着两个品牌:
- 品牌 A:你用了 5 年,很熟悉
- 品牌 B:新产品,说"美白效果更好"
你会怎么选?
大多数人会这样做:
- 看价格
- 看包装
- 看广告
- 问朋友推荐
- 或者...两个都买,自己试试哪个更好
最后一种就是"实验"——通过实际使用来比较哪个更好。
::: tip 💡 实验的本质 实验 = 对比 + 观察
- 对比:至少要有两个选项(A 和 B)
- 观察:在相同条件下,测量它们的表现 :::
0.2 为什么要做"对比实验"?
场景:你的老板说
"我看了竞品,他们的按钮是红色的,很醒目!我们也把按钮改成红色吧,这样点击率肯定会提升!"
看起来很合理,对吧?
但是...
问题 1:竞品的产品和你一样吗?
- 竞品的用户可能是年轻人(喜欢鲜艳颜色)
- 你的用户可能是商务人士(偏好专业感)
- 竞品的页面风格是暗色(红色更突出)
- 你的页面风格是亮色(红色可能太刺眼)
问题 2:你怎么知道"醒目"就一定好?
- 也许红色太刺眼,用户反而觉得不安全
- 也许用户习惯了蓝色,改成红色会困惑
- 也许点击率提升了,但转化率下降了(点进去的人不买了)
问题 3:即使看起来"更好",这是巧合吗?
- 也许你改按钮的那一周,刚好赶上促销活动
- 也许那一周是节假日,用户本身就比较活跃
- 也许竞争对手刚好那周服务器崩溃,用户都跑到你这里了
::: warning ⚠️ 生活中的"伪因果关系" "我穿上这件球衣后,球队就赢了!"
真的是球衣的功劳吗?也许:
- 球队最近状态本来就很好
- 这场比赛对手较弱
- 其他队员发挥超常
单次观察无法确定因果关系,需要对比实验。 :::
0.3 为什么不能"简单对比"?
错误的对比方式一:时间先后对比
第一周:蓝色按钮,点击率 5%
第二周:改成红色按钮,点击率 7%
结论:红色按钮更好!
问题:这两周的其他条件可能完全不同
- 第一周可能是工作日,第二周是周末
- 第一周可能下雨,第二周晴天
- 第一周可能刚开学,第二周是假期
错误的对比方式二:不同用户群对比
移动端用户:使用蓝色按钮,点击率 8%
桌面端用户:使用红色按钮,点击率 5%
结论:蓝色按钮更好!
问题:移动端和桌面端用户本身的行为就不同
- 移动端用户可能更年轻、更爱点击
- 桌面端用户可能更谨慎、更有目的性
- 设备屏幕大小不同,本身就影响点击行为
::: tip 💡 正确的对比实验 同时、随机、相同条件
- 同时:两个版本在相同时间段运行
- 随机:用户随机分配到不同版本
- 相同条件:除了版本不同,其他所有条件都一样
这样,任何差异只能归因于"版本不同"。 :::
0.4 一个完整实验的基本步骤
让我们用一个完整的例子来说明:
场景:你想知道"免费试用 7 天"和"首次购买打 8 折"哪个更能吸引用户
步骤 1:明确问题
- 比较对象:免费试用 vs 折扣
- 成功标准:用户付费率
步骤 2:设计对比
- A 组:看到"免费试用 7 天"
- B 组:看到"首次购买 8 折"
- 其他条件完全相同
步骤 3:随机分配
- 来到网站的用户,随机进入 A 组或 B 组
- 每个人 50% 概率
步骤 4:收集数据
- 记录每组有多少人看到优惠
- 记录每组有多少人最终付费
步骤 5:分析结果
- A 组:1000 人看到,80 人付费(8%)
- B 组:1000 人看到,120 人付费(12%)
- B 组比 A 组高 50%
步骤 6:得出结论
- 折扣比免费试用更有效
- 以后全部使用折扣策略
这就是 A/B 测试的完整思路!
现在,让我们回到开头的问题...
0.5 你有没有经历过这些"伪成功"?
场景一:被数据骗了
你改了购物车的结算按钮颜色,从蓝变红。一周后一看数据:点击率提升了 30%!
你很高兴,宣布大获成功。但三周后,点击率悄悄回到了原水平,甚至还不如之前。
真相:这是"新奇效应"——用户因为好奇多点了几次,新鲜劲过后就恢复了。
场景二:假阳性陷阱
你同时测试了 20 个不同的改进方案。有一个方案显示"统计显著"(p < 0.05),你立即全量上线。
一个月后,用户满意度下降了。
真相:同时测试 20 个方案,即使全部无效,也有 64% 的概率至少有一个"显著"(1 - 0.95^20)。你看到的"显著"只是随机波动。
场景三:辛普森悖论
你的数据显示:B 版本的转化率(7.3%)高于 A 版本(5.6%)。但拆分数据后却发现:
- 移动端:A 8% > B 6%
- 桌面端:A 4% > B 3%
每个渠道 A 都更好,但合并后 B 反而赢了!
真相:流量分配不均(移动端占 80% 流量,且更多分配给了 B),导致加权平均后 B 看起来更好。
好的 A/B 测试就像科学的临床试验——严谨设计、足够样本、长期观察,才能得出可信结论。
1. 什么是 A/B 测试?
1.1 最简单的定义
A/B 测试就是把用户随机分成两组:
- A 组:看到旧版本
- B 组:看到新版本
然后比较两组的关键指标(比如点击率、转化率),看看哪个版本更好。
用一句话总结:让数据告诉我们哪个版本更有效,而不是靠猜测。
1.2 A/B 测试的核心要素
要做一个合格的 A/B 测试,需要满足以下几个条件:
条件 1:随机分配
- 每个用户被分配到 A 组或 B 组的概率是相等的
- 就像抛硬币,正面朝上进 A 组,反面朝上进 B 组
- 用户自己不能选择,你也"不能挑选"
为什么随机? 假设你想测试新首页设计:
❌ 错误做法:把新首页给"新用户",旧首页给"老用户"
- 问题:新老用户的行为本身就不一样
- 新用户可能更愿意探索(点击率高)
- 老用户更习惯旧设计(不愿改变)
- 你不知道是"首页设计"的差异,还是"用户类型"的差异
✅ 正确做法:新老用户都随机分配到新旧首页
- 新用户:一半看新首页,一半看旧首页
- 老用户:一半看新首页,一半看旧首页
- 这样才能公平比较
条件 2:同时运行
- A 组和 B 组在相同时间段运行
- 不能今天跑 A,明天跑 B
为什么同时? 假设你今天测试蓝色按钮,明天测试红色按钮:
❌ 问题:
- 今天可能是周一(工作日,用户少)
- 明天可能是周六(周末,用户多)
- 今天可能下雨,明天可能晴天
- 这些"时间因素"会影响结果,和按钮颜色无关
✅ 正确做法:蓝色和红色按钮在同一天、同一时间测试
条件 3:只改变一个变量
- 除了你要测试的东西(比如按钮颜色),其他所有条件都保持相同
- 页面布局、文案、位置、功能...都一样
为什么只改变一个?
假设你同时改了:
- 按钮颜色:蓝 → 红
- 按钮文案:"立即购买" → "马上抢购"
- 按钮大小:小 → 大
如果结果变好了,你不知道是哪个改动起了作用。如果变差了,你也不知道哪个改坏了。
✅ 正确做法:一次只测试一个变化
条件 4:定义清晰的指标
- 实验前明确要测量什么
- 不能"到时候看情况"
常见的指标类型:
- 转化率:完成购买的比例
- 点击率:点击按钮的比例
- 注册率:完成注册的比例
- 留存率:第二天还回来的比例
1.3 A/B 测试不是万能的
A/B 测试适合的场景:
- ✅ 测试页面设计(颜色、布局、文案)
- ✅ 测试功能流程(注册步骤、结算流程)
- ✅ 测试推荐算法(商品推荐、内容推荐)
- ✅ 测试价格策略(折扣、促销)
A/B 测试不适合的场景:
- ❌ 长期战略调整(品牌定位、市场方向)
- ❌ 重大产品创新(全新功能、全新业务)
- ❌ 需要很长时间才能看到效果的改变(SEO、品牌认知)
::: tip 💡 判断是否需要 A/B 测试 问自己三个问题:
- 能快速看到结果吗?(几周内,不是几个月)
- 能随机分配用户吗?(不会严重影响用户体验)
- 能量化指标吗?(有明确的数字可以比较)
如果三个答案都是"是",那就可以考虑 A/B 测试。 :::
1.4 A/B 测试 vs 其他"对比方法"
| 对比方法 | 做法描述 | 问题 |
|---|---|---|
| 直觉判断 | "我觉得红色更好" | 你的直觉不代表用户想法 |
| 竞品模仿 | "竞品这么做,我们也这么做" | 产品不同,用户不同,结果可能不同 |
| 时间先后对比 | "改完后,数据变好了" | 可能是其他因素(促销、季节)导致的 |
| 部分用户对比 | "移动端用新设计,桌面端用旧设计" | 移动端和桌面端用户本身行为就不同 |
| A/B 测试 | "同时、随机、相同条件对比" | 排除其他因素,结果是可靠的 |
1.5 用医学试验来类比
1.6 用医学试验来类比
| 医学试验 | A/B 测试 | 说明 |
|---|---|---|
| 对照组(安慰剂) | A组(对照组) | 使用当前版本,作为基准 |
| 实验组(新药) | B组(实验组) | 使用新版本,验证效果 |
| 治愈率 | 转化率 | 衡量是否"成功"的指标 |
| 统计显著性 | 统计显著性 | 结果是否可信 |
关键原则:除了版本不同,其他所有条件必须相同(随机分配、同时运行、相同用户群)。
1.7 A/B 测试的完整流程
1. 提出假设
↓
2. 设计实验(确定指标、样本量)
↓
3. 开发并部署实验
↓
4. 运行实验(收集数据)
↓
5. 分析结果(统计检验)
↓
6. 做出决策(全量/放弃/迭代)
2. A/B 测试的核心价值
2.1 避免"拍脑袋决策"
没有 A/B 测试时,决策往往依赖:
- HiPPO(Highest Paid Person's Opinion):最高领导说了算
- 设计直觉:设计师觉得这样更好看
- 模仿竞品:竞争对手这么做,我们也这么做
问题:这些方法都忽略了真实的用户行为。
2.2 降低风险
上线前不知道用户会不会买账?先小范围测试,用 1% 流量验证,避免全量上线后造成损失。
2.3 持续优化
通过不断的小实验,积累小的提升,最终实现显著增长。这就是"增长黑客"的核心方法。
3. 实验设计:对照组与实验组
3.0 从一个完整的例子开始
场景:你的公司要测试一个新的"购物车按钮"
当前情况:
- 购物车按钮是蓝色的,文案是"立即购买"
- 放置在页面右下角
- 当前转化率是 5%(100 个访客,5 个购买)
你的想法:
- 如果把按钮改成红色,更醒目,转化率可能会提升
- 如果把按钮放得更大,更容易点击,转化率可能会提升
问题:怎么知道这些想法是否有效?
步骤 1:明确你要测试什么
你需要先明确:
- 测试变量:你要改变什么?
- 选项 A:按钮颜色(蓝 → 红)
- 选项 B:按钮大小(小 → 大)
- 选项 C:按钮位置(右下 → 左下)
重要:一次只测试一个变量!
假设你决定测试按钮颜色。
步骤 2:明确成功指标
你怎么知道"红色更好"?
- 指标 1:点击率(点击按钮的人数 / 访问人数)
- 指标 2:转化率(购买人数 / 访问人数)
- 指标 3:收入(总销售额)
建议:选择最能反映业务目标的指标。
对于购物车按钮,转化率是最直接的指标。
步骤 3:设计实验版本
A 组(对照组):
- 蓝色按钮
- 文案"立即购买"
- 位置右下角
- 大小正常
B 组(实验组):
- 红色按钮(这是唯一的变化!)
- 文案"立即购买"(相同)
- 位置右下角(相同)
- 大小正常(相同)
关键原则:只有按钮颜色不同,其他所有条件都相同。
步骤 4:确定流量分配
选项 1:50/50 分配
- 50% 用户看到 A 组
- 50% 用户看到 B 组
选项 2:90/10 分配
- 90% 用户看到 A 组(安全版本)
- 10% 用户看到 B 组(实验版本)
建议:
- 如果对新版本有信心,用 50/50(最快得到结果)
- 如果担心新版本有风险,用 90/10(更保守)
假设你选择 50/50 分配。
步骤 5:计算所需样本量
你需要回答几个问题:
- 当前转化率:5%
- 期望检测的提升:20%(从 5% 提升到 6%)
- 显著性水平:0.05(95% 置信度)
- 统计功效:80%
使用在线计算器,得出:
- 每组需要约 6,000 个样本
- 两组共需要 12,000 个样本
如果你的网站每天有 3,000 个访客,大约需要 4 天。
步骤 6:确定运行时长
最少运行时间:达到样本量所需时间(4 天)
建议运行时间:至少 2 个完整业务周期(通常 2 周)
为什么?
- 覆盖工作日和周末(用户行为不同)
- 覆盖月初和月末(消费习惯不同)
- 避免"新奇效应"(用户因好奇产生的短期行为)
假设你决定运行 2 周。
步骤 7:制定决策规则
在实验开始前,明确决策规则:
如果 B 组显著更好(提升 > 20%,p < 0.05):
- 全量上线红色按钮
如果 B 组显著更差(降低 > 10%,p < 0.05):
- 放弃红色按钮,保持蓝色按钮
如果结果不显著(p ≥ 0.05):
- 转化率差异不大(在 ±10% 以内)
- 保持蓝色按钮,尝试其他优化方向
步骤 8:准备监控和回滚
监控指标:
- 每天检查转化率
- 检查是否有异常(如转化率暴跌)
- 检查用户投诉
回滚计划:
- 如果发现严重问题,立即停止实验
- 准备快速切换回蓝色按钮
步骤 9:运行实验
- 开发并部署实验代码
- 确保随机分配正常工作
- 开始收集数据
- 不要中途停止(除非有严重问题)
步骤 10:分析结果
2 周后:
- A 组:6,000 人,300 人购买(5.0%)
- B 组:6,000 人,330 人购买(5.5%)
- 相对提升:+10%
- P 值:0.12(不显著)
- 95% CI:[-2%, +22%]
决策:结果不显著,置信区间包含 0。保持蓝色按钮。
这就是完整的实验设计流程!
现在,让我们深入了解每个环节...
3.1 随机分配的重要性
正确的做法:每个用户有 50% 概率进入 A 组,50% 概率进入 B 组
错误的做法:
- 前半天所有用户进 A 组,后半天进 B 组(时间差异)
- 移动端用户进 A 组,桌面端进 B 组(设备差异)
- 新用户进 A 组,老用户进 B 组(用户类型差异)
为什么随机很重要?
只有随机分配,才能保证两组用户在其他所有方面都相似(年龄、设备、使用习惯等),这样才能公平比较。
3.2 流量分配演示
👇 动手试试看:点击下方按钮,观察流量如何随机分配到两组:
::: tip 💡 50/50 分配是最优的 虽然有 30/70 或 20/80 的分配策略,但 50/50 能最快检测出差异。除非你对新版本极度不放心,否则不推荐使用非对称分配。 :::
4. 样本量计算:需要多少用户才够?
4.1 为什么不能"看着办"?
问题:样本量太小时会发生什么?
假设你想测试新按钮是否能提升转化率,真实情况是新按钮确实能提升 5%。
但你只测试了 100 个用户:
- A 组:100 人,5 人点击(5%)
- B 组:100 人,6 人点击(6%)
- P 值:0.75(不显著)
你会得出错误结论:"新按钮没有效果"
真相:新按钮确实有效,但因为样本量太小,统计功效不足,无法检测出这个差异。
这就是假阴性(第二类错误)。
问题:样本量太大时会有什么问题?
如果你测试了 100 万个用户:
- 花费 3 个月时间才收集够数据
- 占用了大量服务器资源
- 延迟了其他实验的进度
而且,你检测到的是 0.01% 的微小提升,即使真实存在,也没有业务价值。
样本量太小的风险:浪费机会(错过真实改进) 样本量太大的风险:浪费时间(运行太久,资源浪费)
正确做法:实验前计算所需样本量,在"能够检测到有意义的提升"和"合理的实验时间"之间取得平衡。
4.2 用投票来理解样本量
场景:你想预测选举结果
假设有 1000 万选民,你想预测候选人 A 和 B 谁会赢。
问题:你需要调查多少人?
- 调查 10 个人?太少,不靠谱
- 调查 100 个人?还是太少
- 调查 1,000 个人?可以,误差约 ±3%
- 调查 10,000 个人?更好,误差约 ±1%
- 调查 1,000,000 个人?没必要,误差只比 1,000 人好一点点
关键发现:
- 样本量从 10 增加到 1,000 → 准确度大幅提升
- 样本量从 1,000 增加到 1,000,000 → 准确度提升很小
A/B 测试也是一样的道理:
- 不是样本越多越好
- 而是"足够"就好
- "足够"取决于你想检测多小的差异
4.3 影响样本量的四个因素
| 因素 | 影响 | 典型值 |
|---|---|---|
| 基准转化率 | 越高,所需样本越少 | 2% - 10% |
| 最小检测提升 | 越小,所需样本越多 | 相对提升 5% - 20% |
| 显著性水平 (α) | 越小,所需样本越多 | 0.05 (95%置信度) |
| 统计功效 (1-β) | 越大,所需样本越多 | 0.8 (80%功效) |
直觉理解:
- 你想检测的差异越小(比如只提升 5%),就需要更多样本才能"看清"
- 你想要的结果越确定(比如 99% 置信度 vs 95%),就需要更多证据
因素 1:基准转化率
问题:为什么基准转化率越高,需要的样本越少?
想象两个场景:
- 场景 A:基准转化率 50%(掷硬币,50% 正面)
- 场景 B:基准转化率 1%(罕见事件,只有 1% 的人会购买)
在场景 A:
- 你掷 100 次硬币,正面会出现 50 次左右
- 即使有波动,也在 40-60 次之间
- 你不需要太多样本就能"确定"正面率
在场景 B:
- 你测试 100 个用户,可能只有 1 个人购买
- 如果运气好,可能 3 个人购买(3 倍差异!)
- 如果运气不好,可能 0 个人购买
- 你需要大量样本才能"确定"真实转化率
结论:转化率越低,随机波动越大,需要更多样本来"降噪"。
因素 2:最小检测提升
这是最重要的因素!
问题:你想检测多小的差异?
- 检测 20% 的提升(从 5% 到 6%):需要约 6,000 样本/组
- 检测 5% 的提升(从 5% 到 5.25%):需要约 100,000 样本/组
差距巨大!
为什么?
想象你在测量两根头发的长度差异:
- 差异 1 毫米:用普通尺子就能看出来
- 差异 0.001 毫米:需要显微镜才能看出来
统计检验也是一样:
- 大差异(提升 20%):"普通尺子"(小样本)就能看出来
- 小差异(提升 5%):"显微镜"(大样本)才能看出来
::: tip 💡 如何选择"最小检测提升"? 问自己三个问题:
-
业务上什么提升是有意义的?
- 提升 1%:太小,没意义
- 提升 5%:还行,可以接受
- 提升 20%:很好,值得做
-
你能等待多久?
- 检测 5% 提升 → 需要 1 个月
- 检测 20% 提升 → 只需要 1 周
- 时间紧迫?选择较大的提升目标
-
有多少流量?
- 日活 1,000 → 无法检测小提升
- 日活 100,000 → 可以检测小提升
建议:选择"最小有意义的提升"作为目标,不要贪心求小。 :::
因素 3:显著性水平 (α)
什么是显著性水平?
显著性水平(α)是你能容忍的"假阳性"概率。
- α = 0.05:容忍 5% 的假阳性(95% 置信度)
- α = 0.01:容忍 1% 的假阳性(99% 置信度)
假阳性是什么?
假阳性 = "说有效,实际无效"
例子:
- 新按钮其实没有效果(真实转化率都是 5%)
- 但因为随机波动,B 组恰好表现更好(5% vs 6%)
- 你错误地认为"新按钮有效",并全量上线
- 上线后,发现转化率并没有提升
这就是假阳性!
为什么 α 越小,样本量越大?
想象你在做"无罪推定":
- α = 0.05:需要"比较确凿的证据"才能定罪
- α = 0.01:需要"非常确凿的证据"才能定罪
"非常确凿"需要更多证据(更大样本量)。
建议:
- 大多数情况用 α = 0.05(行业标准)
- 如果是高风险决策(如价格策略),可以用 α = 0.01
因素 4:统计功效 (1-β)
什么是统计功效?
统计功效(1-β)是检测到真实效应的概率。
- 功效 = 80%:如果有真实差异,有 80% 的概率能检测出来
- 功效 = 90%:如果有真实差异,有 90% 的概率能检测出来
假阴性是什么?
假阴性 = "说无效,实际有效"
例子:
- 新按钮确实有效(真实转化率从 5% 提升到 6%)
- 但因为样本量太小,检验结果显示"不显著"(p = 0.15)
- 你错误地认为"新按钮无效",放弃了它
- 你错过了一个提升 20% 的机会!
这就是假阴性!
为什么功效越大,样本量越大?
想象你在安检:
- 功效 80%:能检测出 80% 的危险品(漏掉 20%)
- 功效 90%:能检测出 90% 的危险品(漏掉 10%)
检测率越高,需要更灵敏的设备(更大样本量)。
建议:
- 大多数情况用功效 80%(行业标准)
- 如果样本量充足,可以用 90%(更保险)
4.4 样本量计算公式
对于比例指标(转化率),简化的样本量公式为:
n = (Zα + Zβ)² × [p1(1-p1) + p2(1-p2)] / (p2 - p1)²
其中:
n= 每组所需样本量Zα= 显著性水平对应的 Z 值(α=0.05 时,Zα=1.96)Zβ= 统计功效对应的 Z 值(80%功效时,Zβ=0.84)p1= 基准转化率p2= 目标转化率 = p1 × (1 + 相对提升)
4.4 样本量计算示例
场景:购物车结算按钮,当前转化率 5%,希望检测 20% 的相对提升(即 6%)。
p1= 5% = 0.05p2= 6% = 0.06Zα= 1.96 (α=0.05)Zβ= 0.84 (80%功效)
n = (1.96 + 0.84)² × [0.05×0.95 + 0.06×0.94] / (0.06 - 0.05)²
n ≈ 6,932
每组需要 6,932 个样本,两组共需 13,864 个样本。
如果每天有 5,000 个访客,大约需要 3 天才能达到足够样本量。
::: tip 💡 在线计算工具
- Evan Miller 的样本量计算器 - 业界标准
- Optimizely 的样本量计算器 :::
5. 统计显著性:如何判断结果"可信"?
5.0 为什么需要"统计显著性"?
场景:你做了一个 A/B 测试
A 组(蓝色按钮):1000 个用户,50 个点击 → 点击率 5%
B 组(红色按钮):1000 个用户,60 个点击 → 点击率 6%
看起来 B 更好,对吧?
但是...
问题:这 10 个点击的差异,是真实的,还是巧合?
想象一下:
- 也许分配到 B 组的用户,今天心情特别好,更爱点击
- 也许 B 组恰好多了几个"重度点击用户"
- 也许这只是随机波动,下次再测试 A 组反而更好
这就是"统计显著性"要解决的问题:
- 如何判断这个差异是"真实的",而不是"随机的"?
- 多大的差异才能相信是真实的?
::: tip 💡 统计显著性的本质 统计显著性 = 差异不太可能是随机产生的
就像抛硬币:
- 抛 10 次,出现 7 次正面 → 可能是巧合
- 抛 100 次,出现 70 次正面 → 这枚硬币可能有问题
差异越大、样本越多,越不可能是巧合。 :::
5.1 P 值是什么?
5.1.1 用抛硬币来理解 P 值
问题:这枚硬币是公平的吗?
假设你有一枚硬币,你想知道它是不是公平的(正面和反面的概率各 50%)。
实验 1:抛 10 次
- 结果:7 次正面,3 次反面(正面率 70%)
你会想:"这枚硬币可能偏向正面?"
但是,即使硬币是公平的,抛 10 次出现 7 次或更多正面的概率大约是 17%。
P 值 = 17%
意思是:如果硬币是公平的,有 17% 的概率会看到这种结果(或更极端)。
结论:P 值太大,无法确定硬币不公平。7 次正面可能是随机波动。
实验 2:抛 100 次
- 结果:70 次正面,30 次反面(正面率 70%)
现在的差异还是 70%,但样本量大多了!
如果硬币是公平的,抛 100 次出现 70 次或更多正面的概率大约是 0.00004%。
P 值 < 0.0001%
意思是:如果硬币是公平的,几乎不可能看到这种结果。
结论:P 值非常小,我们可以很有信心地说:这枚硬币确实不公平!
5.1.2 P 值的正式定义
P 值:如果零假设(两组没有差异)为真,观察到当前数据(或更极端数据)的概率。
用通俗语言说:
- P 值 = "纯属巧合"的概率
- P 值 = "随机波动"的可能性
- P 值 = "即使版本没有差异,也会看到这种结果"的概率
5.1.3 P 值的判断标准
常用阈值:
| P 值范围 | 结论 | 解释 |
|---|---|---|
| p < 0.01 | 高度显著 | 只有 1% 的概率是巧合(99% 信心) |
| p < 0.05 | 统计显著 | 只有 5% 的概率是巧合(95% 信心) |
| p ≥ 0.05 | 不显著 | 可能是随机波动,无法确定差异真实 |
为什么是 0.05?
这是科学界的"传统标准"(可以理解为行业约定俗成):
- 意思是:我们容忍 5% 的"假阳性"风险
- 也就是说,即使两个版本真的没有差异,我们也有 5% 的概率错误地认为"有差异"
::: tip 💡 如何记忆 P 值 P 值越小,越可信
- p = 0.30 → 有 30% 概率是巧合 → 不可信
- p = 0.10 → 有 10% 概率是巧合 → 不太可信
- p = 0.05 → 只有 5% 概率是巧合 → 勉强可信
- p = 0.01 → 只有 1% 概率是巧合 → 很可信
- p < 0.001 → 几乎不可能是巧合 → 非常可信 :::
5.1.4 P 值不是什么?
::: warning ⚠️ 常见的 P 值误解
误解 1:"P 值越小,差异越大"
错误!P 值只告诉你"差异是否真实",不告诉你"差异有多大"。
例子:
- 差异 0.1%,样本 100 万 → p < 0.001(显著,但差异很小)
- 差异 50%,样本 10 → p = 0.15(不显著,但差异很大)
正确理解:P 值衡量的是"信心",不是"效果大小"。
误解 2:"P < 0.05 就是正确的,P ≥ 0.05 就是错误的"
错误!0.05 只是一个人为设定的阈值,不是魔法分界线。
- p = 0.049 和 p = 0.051 几乎没有区别
- 但一个是"显著",一个是"不显著"
正确理解:P 值是一个连续的"信心程度",不要过度依赖 0.05 这个分界线。
误解 3:"P < 0.05 意味着有 95% 的概率 B 版本更好"
错误!P 值不是"B 版本更好的概率"。
P 值说的是:如果两个版本真的没有差异,看到这种结果的概率。
正确理解:P 值是对"零假设"的检验,不是直接给出"B 更好的概率"。
误解 4:"P ≥ 0.05 就证明两个版本没有差异"
错误!"不显著"只意味着"无法确定差异存在",不等于"证明差异不存在"。
可能的原因:
- 样本量太小(没收集足够数据)
- 差异太小(需要更多样本才能检测到)
- 确实没有差异
正确理解:"不显著" = "证据不足",不是"证明无效"。 :::
5.1.5 P 值是如何计算的?
不需要记住公式,但要理解思路
假设 A/B 测试的结果:
- A 组:1000 人,50 人点击(5%)
- B 组:1000 人,60 人点击(6%)
P 值的计算思路:
- 假设零假设成立:A 和 B 真的没有差异(真实转化率都是 5%)
- 计算"标准误":在 1000 个样本下,转化率会自然波动多少
- 计算 Z 值:观察到的差异(1%)是标准误的多少倍
- 查表得出 P 值:这个 Z 值对应的概率
简化版计算(不严谨,但帮助理解):
标准误 ≈ √[p×(1-p)/n] = √[0.05×0.95/1000] ≈ 0.7%
观察差异 = 6% - 5% = 1%
Z 值 = 观察差异 / 标准误 = 1% / 0.7% ≈ 1.43
查表:Z = 1.43 → P ≈ 0.15
结论:P = 0.15 > 0.05,不显著,这个 1% 的差异可能是随机波动。
::: tip 💡 实际应用 你不需要手动计算 P 值!
使用在线工具:
你需要做的是:
- 输入 A 组和 B 组的样本量、转化数
- 工具自动计算 P 值
- 根据 P 值判断是否显著 :::
5.2 置信区间:估计真实的提升范围
5.2.1 为什么要用"区间"而不是"点估计"?
场景:你做了一次 A/B 测试
结果:
- B 版本比 A 版本提升了 10%
问题:这个 10% 是"准确的"吗?
答案是:不准确
为什么?因为你只测试了一部分用户,不是全部用户。如果你:
- 换一批用户再测试一次 → 可能是 8%
- 下个月再测试一次 → 可能是 12%
- 明年再测试一次 → 可能是 5%
每次测试的结果都会略有不同(这就是"抽样波动")
所以,我们不应该给出一个精确的数字(点估计),而应该给出一个范围(区间估计)。
::: tip 💡 区间估计 vs 点估计 点估计:"提升 10%"(太精确,不可信)
区间估计:"提升在 5% 到 15% 之间"(更诚实,更符合实际)
就像你问朋友"从你家到公司要多久?"
不精确但诚实:"大概 30 到 40 分钟吧,看路况" 精确但不现实:"准确需要 34 分 27 秒" :::
5.2.2 置信区间是什么?
置信区间:真实值可能落入的范围。
示例:
- 你观察到 B 版本比 A 版本提升了 10%
- 95% 置信区间:[+5%, +15%]
意思是:
- 我们有 95% 的信心,真实提升在 5% 到 15% 之间
- 真实提升低于 5% 或高于 15% 的概率,只有 5%
5.2.3 理解"95% 置信"
::: warning ⚠️ 常见误解 错误理解:"真实值有 95% 的概率在区间内"
正确理解:"如果我们重复实验 100 次,95 次的区间会包含真实值"
对于单次实验:
- 真实值要么在区间内,要么不在
- 我们不知道是哪种情况
- 但我们有 95% 的信心,这个方法是可靠的 :::
用类比来理解:
想象你是一个射击运动员,你射了 100 枪:
- 95 枪都打在靶子上("置信区间"覆盖了"真实目标")
- 5 枪脱靶了("置信区间"没有覆盖"真实目标")
每次射击前,你都有 95% 的信心会打中靶子。
但你射出一枪后,这一枪要么中,要么不中。你不能说"这一枪有 95% 的概率中靶"。
置信区间也是一样:每次实验都有 95% 的可靠性,但对于单次实验,真实值要么在区间内,要么不在。
5.2.4 置信区间的可视化
场景 1:结果显著
A 组:5%
B 组:6%
相对提升:+20%
95% CI:[+10%, +30%]
0% ─────┼──────────────────┼──── 40%
↑ ↑
下限(+10%) 上限(+30%)
✅ 整个区间都 > 0,结果显著
解读:我们有 95% 的信心,真实提升在 10% 到 30% 之间。即使是最保守估计(10%),也是正提升。
场景 2:结果不显著
A 组:5%
B 组:5.5%
相对提升:+10%
95% CI:[-5%, +25%]
-5% ─┼────┼──────────────────┼──── 30%
↑ ↑
0% 上限(+25%)
⚠️ 区间包含 0,结果不显著
解读:我们有 95% 的信心,真实提升在 -5% 到 +25% 之间。
- 可能是正提升(最高 +25%)
- 可能是负提升(最低 -5%,即 B 更差)
- 无法确定方向,所以"不显著"
5.2.5 置信区间与 P 值的关系
重要结论:
- 如果 95% 置信区间不包含 0 → P < 0.05(显著)
- 如果 95% 置信区间包含 0 → P ≥ 0.05(不显著)
记忆技巧:
- 区间完全在 0 的右边(都是正数)→ B 更好
- 区间完全在 0 的左边(都是负数)→ A 更好
- 区间跨越 0(有正有负)→ 不确定
5.2.6 置信区间的宽度:什么决定了宽度?
观察:
- 样本量越大 → 区间越窄(越精确)
- 转化率越高 → 区间越窄(越精确)
- 置信度越高 → 区间越宽(更保守)
例子:
场景 1:样本小,区间宽
A 组:100 人,5 人点击(5%)
B 组:100 人,6 人点击(6%)
95% CI:[-8%, +28%](很宽,不确定)
场景 2:样本大,区间窄
A 组:10,000 人,500 人点击(5%)
B 组:10,000 人,600 人点击(6%)
95% CI:[+10%, +30%](较窄,较确定)
::: tip 💡 置信区间的实际应用 看到置信区间后,你应该想:
-
区间是否包含 0?
- 不包含 → 结果显著,可以做决策
- 包含 → 结果不显著,需要更多数据
-
区间有多宽?
- 很宽 → 不确定,需要更多样本
- 很窄 → 很确定,可以信任结果
-
下限是多少?
- 即使是最保守估计,效果如何?
- 如果下限已经满足业务需求,可以上线
-
上限是多少?
- 最好的情况下能提升多少?
- 帮助评估"潜在收益" :::
5.3 A/B 组结果对比演示
👇 动手试试看:调整转化率和样本量,观察统计显著性的变化:
关键观察:
- 相对提升越大,P 值越小(越容易显著)
- 样本量越大,P 值越小(越容易显著)
- 转化率越低,需要更大样本量才能达到相同显著性
6. A/B 测试的常见误区
6.1 过早停止实验(Peeking 问题)
6.1.1 一个真实的故事
场景:你的老板急于看到结果
你设计了一个 A/B 测试,测试新的首页设计:
实验计划:
- 需要运行 2 周
- 每组需要 10,000 个样本
- 目标:检测 10% 的提升
第 3 天(早上):
- A 组:1,000 人,50 人点击(5%)
- B 组:1,000 人,70 人点击(7%)
- P 值:0.04(显著!)
你的老板看到数据,兴奋地说:"B 版本领先了 40%!而且已经显著了!我们不用等 2 周了,今天就全量上线 B 版本吧!"
你犹豫了一下...但还是上线了。
第 7 天:
- A 组:3,000 人,150 人点击(5%)
- B 组:3,000 人,170 人点击(5.67%)
- P 值:0.35(不显著了)
老板:"没关系,还是 B 更好,只是统计波动。"
第 14 天(原计划结束):
- A 组:10,000 人,500 人点击(5%)
- B 组:10,000 人,510 人点击(5.1%)
- P 值:0.80(完全不显著)
- 95% CI:[-6%, +8%]
真相揭晓:两个版本几乎没有任何差异!
如果你第 3 天就停止实验,你会错误地认为"B 版本提升 40%",并全量上线一个实际上没有效果的版本。
6.1.2 为什么会发生这种情况?
P 值的波动性
想象你在抛硬币,判断它是否公平:
- 前 10 次:7 次正面(p = 0.17,看似不公平)
- 前 50 次:30 次正面(p = 0.20,看似不公平)
- 前 100 次:55 次正面(p = 0.37,看起来公平)
如果你只抛 10 次就下结论,你会错误地认为"硬币不公平"。
A/B 测试也是一样:
- 数据少的时候,随机波动大,P 值不稳定
- 数据多的时候,随机波动小,P 值才稳定
过早停止 = 在随机波动中做决策
6.1.3 正确的做法
方案 1:预先设定样本量,严格达到后才分析
步骤:
1. 实验前计算所需样本量(如 10,000 人/组)
2. 设置"检查点":只在第 14 天检查一次
3. 达到样本量之前,不看数据,不做决策
4. 第 14 天分析结果,做决策
优点:简单、可靠、不会出错 缺点:如果版本有严重问题,要等很久才能发现
方案 2:序贯检验(Sequential Testing)
步骤:
1. 预设多个"检查点"(如第 3、7、14 天)
2. 每个检查点使用"更严格"的显著性阈值
3. 第 3 天:p < 0.01 才停止(更严格)
4. 第 7 天:p < 0.025 才停止
5. 第 14 天:p < 0.05 才停止(正常)
优点:可以提前发现极端情况(好的或坏的) 缺点:计算复杂,需要专门工具
::: tip 💡 实践建议 如果你是初学者:使用方案 1(简单可靠) 如果你有经验:使用方案 2(更灵活)
无论用哪种方案,都不要"每天看数据,觉得好就停止"。 :::
6.2 辛普森悖论
6.2.1 一个令人困惑的故事
场景:你的数据分析结果互相矛盾
你的电商网站测试了一个新的"推荐算法":
整体数据:
- A 组(旧算法):转化率 5.6%
- B 组(新算法):转化率 7.3%
- 结论:B 版本更好!提升 30%!
你很高兴,准备全量上线新算法。
但是,你的同事提出了一个问题:"我们能不能按设备类型分别看看数据?"
分开后的数据:
移动端:
- A 组:转化率 8%
- B 组:转化率 6%
- 结论:A 版本更好!
桌面端:
- A 组:转化率 4%
- B 组:转化率 3%
- 结论:A 版本更好!
等等,发生了什么?
- 移动端:A 更好(8% > 6%)
- 桌面端:A 更好(4% > 3%)
- 合并后:B 更好(7.3% > 5.6%)
每个分组的赢家都是 A,但合并后赢家却是 B!
这就是辛普森悖论。
6.2.2 为什么会发生这种情况?
问题出在"样本分布不均"
让我们看看真实的样本分布:
移动端(80% 的流量):
- A 组:40% 流量(4,000 人,320 人购买 → 8%)
- B 组:40% 流量(4,000 人,240 人购买 → 6%)
桌面端(20% 的流量):
- A 组:0% 流量(没有人!)
- B 组:20% 流量(1,000 人,30 人购买 → 3%)
合并后的数据(错误计算):
- A 组:320 / 4,000 = 8%
- B 组:(240 + 30) / 5,000 = 5.4%
但如果你直接平均(错误的做法):
- A 组:只有移动端数据,8%
- B 组:(6% + 3%) / 2 = 4.5%?
不对,让我们重新计算正确的加权平均:
正确的加权平均:
- A 组:8%(因为只有移动端)
- B 组:6% × 80% + 3% × 20% = 5.4%
等等,A 更好才对(8% > 5.4%)!
那为什么你之前看到 B 更好(7.3% > 5.6%)?
真相:流量分配完全混乱了!
实际上,如果随机分配正确,移动端和桌面端应该各有 50% 流量进入 A/B 组。
6.2.3 正确的随机化应该是这样的
移动端(假设 8,000 人):
- A 组:4,000 人(50%),320 人购买(8%)
- B 组:4,000 人(50%),240 人购买(6%)
桌面端(假设 2,000 人):
- A 组:1,000 人(50%),40 人购买(4%)
- B 组:1,000 人(50%),30 人购买(3%)
合并后的数据(正确的加权平均):
- A 组:(320 + 40) / 5,000 = 7.2%
- B 组:(240 + 30) / 5,000 = 5.4%
结论:A 更好(7.2% > 5.4%)
移动端和桌面端的结论一致!
6.2.4 如何避免辛普森悖论?
方法 1:确保随机化正确
- 每个子群体(移动端、桌面端)内部,流量必须是 50/50
- 不能出现"移动端全是 A 组,桌面端全是 B 组"的情况
方法 2:按关键维度分别分析
- 不要只看整体数据
- 分别看移动端、桌面端、新用户、老用户、不同地区...
- 确保每个分组的结论是一致的
方法 3:使用 A/A 测试验证随机化
A/A 测试:两个组使用完全相同的版本,看是否有差异
如果 A/A 测试显示"显著差异" → 说明随机化有问题 如果 A/A 测试显示"无显著差异" → 说明随机化正常
::: tip 💡 实践建议 每次 A/B 测试前,先问自己:
- 我的关键维度是什么?(移动端/桌面端?新用户/老用户?)
- 每个维度内部的流量分配是否均匀?
- 如果按维度分组,结论是否一致?
如果答案不确定,先做 A/A 测试验证随机化。 :::
6.3 P-hacking(P 值操纵)
6.3.1 一个"只要我想,就能显著"的故事
场景:你想发表一个"成功"的实验结果
你的公司鼓励"数据驱动决策",但你的实验结果总是"不显著"。
压力之下,你想:"有没有办法让结果变显著?"
尝试 1:主指标不显著,那就换个指标
原始计划:
- 主指标:购买转化率
- 结果:A 组 5%,B 组 5.1%,p = 0.60(不显著)
你试了其他指标:
- 点击率:A 组 10%,B 组 11%,p = 0.15(还是不显著)
- 注册率:A 组 8%,B 组 9%,p = 0.20(不显著)
- 页面停留时间:A 组 30 秒,B 组 32 秒,p = 0.08(接近了!)
- 添加购物车率:A 组 15%,B 组 17%,p = 0.03(显著了!)
你报告说:"新版本提升了添加购物车率,我们应该上线!"
问题:你测了 5 个指标,即使全部无效,也有 1 - 0.95^5 = 23% 的概率至少有一个"假阳性"。
尝试 2:主指标不显著,那就细分用户群
原始数据(整体):
- A 组:5%
- B 组:5.1%
- p = 0.60(不显著)
你开始细分:
- 新用户:A 组 4%,B 组 4.5%,p = 0.25
- 老用户:A 组 6%,B 组 6.2%,p = 0.40
- 移动端:A 组 5%,B 组 5.3%,p = 0.30
- 桌面端:A 组 5%,B 组 5.1%,p = 0.50
- 18-25 岁:A 组 4.5%,B 组 5.5%,p = 0.04(显著了!)
你报告说:"虽然整体不显著,但对年轻用户效果显著,我们应该针对这个人群上线!"
问题:你测了 10 个子群体,即使全部无效,也有 40% 的概率至少有一个"假阳性"。
尝试 3:P 值接近 0.05,那就再跑几天
第 14 天:
- A 组:5%
- B 组:5.2%
- p = 0.08(接近显著了!)
你:"再跑几天,看看能不能降到 0.05 以下。"
第 16 天:
- A 组:5%
- B 组:5.25%
- p = 0.06(更接近了!)
你:"再跑一天!"
第 17 天:
- A 组:5%
- B 组:5.3%
- p = 0.048(终于显著了!)
你:"成功了!我们可以上线了!"
问题:如果你一直跑下去,P 值迟早会低于 0.05(纯随机波动),但这不代表真实差异。
6.3.2 为什么 P-hacking 是危险的?
故事结局:
你的"成功"实验上线了。一个月后:
- 转化率没有提升(因为本来就没有真实效果)
- 开发团队浪费了一个月时间
- 其他更有价值的实验被延迟
你失去了团队的信任,以后再也没有人相信你的"数据驱动决策"。
6.3.3 如何避免 P-hacking?
原则 1:预先注册假设和指标
实验开始前,写下:
- 主指标是什么?(只能有 1-2 个)
- 预期结果是什么?(提升多少?)
- 如果不显著,怎么办?(放弃、迭代、还是延长?)
实验过程中,不允许改变!
原则 2:控制多重检验
如果你必须测多个指标或子群体,使用更严格的阈值:
-
Bonferroni 校正:α = 0.05 / 指标数量
- 测 5 个指标 → α = 0.01
- 测 10 个指标 → α = 0.005
- 只有 p < 0.005 才算显著
-
FDR 控制:允许一定比例的假阳性,但总体控制误报率
原则 3:诚实报告所有结果
不要只报告显著的指标!
诚实报告示例:
我们测试了新版本对 5 个指标的影响:
1. 添加购物车率:+13% (p = 0.03) ✅ 显著
2. 购买转化率:+2% (p = 0.60) ❌ 不显著
3. 点击率:+10% (p = 0.15) ❌ 不显著
4. 注册率:+12% (p = 0.20) ❌ 不显著
5. 页面停留时间:+7% (p = 0.08) ❌ 不显著
虽然只有"添加购物车率"显著,但其他关键指标(购买转化率)
没有提升,甚至有下降趋势。建议谨慎上线,或延长观察时间。
::: tip 💡 实践建议 问自己:
"如果所有结果都不显著,我会怎么做?"
如果答案是"我会放弃",那就不要在结果出来后改变主意,挑选"显著"的指标。
诚实 > 成功 :::
6.4 新奇效应
6.4.1 一个"昙花一现"的故事
场景:新功能上线,数据暴涨!
你的公司发布了一个新功能:"智能推荐"。
第 1 周数据:
- 点击率:+30%
- 使用率:+50%
- 用户反馈:"太棒了!"
你高兴极了,准备全量推广并写成功案例。
第 2 周数据:
- 点击率:+15%
- 使用率:+20%
你:"可能是波动,继续观察。"
第 3 周数据:
- 点击率:+5%
- 使用率:+5%
你:"怎么突然降了?"
第 4 周数据:
- 点击率:0%
- 使用率:-2%(比上线前还差!)
- 用户反馈:"其实不太好用..."
真相:前两周的"暴涨"只是新奇效应,用户因为好奇多点了几次。新鲜感过后,真实使用习惯暴露无遗。
如果你第 1 周就全量推广并写成功案例,现在会非常尴尬。
6.4.2 为什么会有新奇效应?
人类的好奇心
想象你走进一家新餐厅:
- 第 1 次:你点了招牌菜,觉得很好吃(新奇感)
- 第 3 次:你点了其他菜,发现也就那样(新奇感消退)
- 第 10 次:你开始觉得"其实家常菜更好吃"(真实偏好)
A/B 测试也是一样:
- 短期:用户因好奇点击新功能(虚高)
- 长期:用户发现新功能并不符合真实需求(回归真实)
6.4.3 哪些情况最容易产生新奇效应?
高风险场景:
- ✅ 全新的 UI 设计(用户可能因为"不一样"而点击)
- ✅ 新功能(用户好奇"这是什么")
- ✅ 新的交互方式(用户想"试试看")
- ✅ 显眼的位置变化(用户"被迫注意到")
低风险场景:
- ❌ 后端算法优化(用户感知不到)
- ❌ 性能优化(加载速度变快,用户不会因为"新奇"而点击)
- ❌ 文案微调(影响较小)
6.4.4 如何避免新奇效应?
方法 1:至少运行 2 个完整业务周期
- 如果业务有"周末效应"(周末活跃度高),至少运行 2 周
- 如果业务有"月初月末效应"(月初消费高),至少运行 1 个月
- 如果业务有"季节效应"(双 11、春节),避开这些时段
经验法则:至少 2-4 周,覆盖 2 个完整周期。
方法 2:观察趋势,而不是绝对值
好的趋势:
第 1 周:+10%
第 2 周:+12%
第 3 周:+11%
第 4 周:+13%
→ 稳定,可信
不好的趋势:
第 1 周:+30%
第 2 周:+15%
第 3 周:+5%
第 4 周:0%
→ 新奇效应,不可信
方法 3:重视长期指标,轻视短期指标
| 指标类型 | 示例 | 受新奇效应影响 |
|---|---|---|
| 短期指标 | 点击率、使用率 | ⚠️ 高 |
| 中期指标 | 转化率、留存率 | ⚡ 中 |
| 长期指标 | LTV、NPS | ✅ 低 |
决策原则:
- 如果长期指标(留存率、LTV)没有提升,即使短期指标(点击率)暴涨,也不应该上线。
6.5 统计功效不足
6.5.1 一个"错过机会"的故事
场景:你做了一个很有前景的改进
你的公司测试了一个新的"一键购买"功能:
你的计算(错误):
- "我们每天有 1,000 个访客,跑 1 周应该够了吧?"
- 所需样本:1,000 人/组
- 运行时间:7 天
实验结果(1 周后):
- A 组:1,000 人,50 人购买(5%)
- B 组:1,000 人,60 人购买(6%)
- 相对提升:+20%
- P 值:0.30(不显著)
你的结论:"一键购买没有效果,放弃这个功能。"
但是,你的同事提出了一个问题:"我们的样本量真的够吗?"
重新计算(正确):
- 基准转化率:5%
- 期望检测提升:20%(从 5% 到 6%)
- 显著性水平:α = 0.05
- 统计功效:80%
使用在线计算器:
- 所需样本:每组约 6,000 人
- 所需时间:约 6 周(不是 1 周!)
真相:你的实验只跑了 1/6 的样本量,统计功效不足,即使有真实差异也检测不出来(假阴性)。
你错过了一个提升 20% 的机会!
6.5.2 为什么会发生这种情况?
统计功效的直观理解
想象你在安检:
- 功效 20%:只能检测出 20% 的危险品(漏掉 80%)
- 功效 50%:能检测出 50% 的危险品(漏掉 50%)
- 功效 80%:能检测出 80% 的危险品(漏掉 20%)
如果你的安检设备只有 20% 功效,你会漏掉 80% 的危险品。
A/B 测试也是一样:
- 功效 20%:即使有真实差异,只有 20% 的概率能检测出来
- 功效 80%:如果有真实差异,有 80% 的概率能检测出来
样本量越小 → 功效越低 → 越容易假阴性
6.5.3 如何避免统计功效不足?
方法 1:实验前必须计算样本量
不要凭感觉! 使用在线计算器:
输入:
- 基准转化率(如 5%)
- 期望检测提升(如 20%)
- 显著性水平(如 0.05)
- 统计功效(如 80%)
输出:
- 所需样本量(如 6,000 人/组)
方法 2:如果资源有限,调整期望
场景:你只有 1,000 个样本,怎么办?
选项 1:提高最小检测提升
- 从检测 20% 提升 → 改为检测 50% 提升
- 所需样本从 6,000 → 降到 1,000
选项 2:降低统计功效
- 从 80% 功效 → 降到 50% 功效
- 所需样本从 6,000 → 降到 2,500
- 但风险:假阴性概率从 20% → 升到 50%
选项 3:延长测试时间
- 从 1 周 → 延长到 6 周
- 样本量从 1,000 → 增加到 6,000
::: tip 💡 实践建议 优先级:
- 首选:延长测试时间(最可靠)
- 次选:提高最小检测提升(接受"只检测大效果")
- 下策:降低统计功效(增加假阴性风险)
如果三个选项都不可行,说明你的流量不足以做这个实验。考虑:
- 聚合更长时间的数据
- 放弃这个实验
- 先做其他实验 :::
7. 结果分析:手把手教学
7.1 从原始数据到结论
场景:你的实验结束了,现在要分析结果
实验设计回顾:
- 测试内容:购物车按钮颜色(蓝 vs 红)
- 运行时间:2 周
- 流量分配:50/50
- 目标指标:购买转化率
- 期望提升:20%(从 5% 到 6%)
步骤 1:收集原始数据
从数据库导出数据:
| 日期 | A组访客数 | A组购买数 | B组访客数 | B组购买数 |
|---|---|---|---|---|
| 第 1 天 | 500 | 25 | 500 | 30 |
| 第 2 天 | 520 | 26 | 510 | 28 |
| ... | ... | ... | ... | ... |
| 第 14 天 | 480 | 22 | 490 | 25 |
| 合计 | 7,000 | 350 | 7,000 | 385 |
步骤 2:计算基本指标
A 组(对照组):
- 样本量:7,000
- 购买数:350
- 转化率:350 / 7,000 = 5.00%
B 组(实验组):
- 样本量:7,000
- 购买数:385
- 转化率:385 / 7,000 = 5.50%
绝对提升:5.50% - 5.00% = +0.5 个百分点
相对提升:(5.50% - 5.00%) / 5.00% = +10%
步骤 3:使用在线计算器进行统计检验
输入数据:
- A 组:7,000 样本,350 转化
- B 组:7,000 样本,385 转化
计算器输出:
- 相对提升:+10%
- P 值:0.042
- 95% 置信区间:[+0.3%, +19.7%]
步骤 4:解读统计结果
P 值解读:
- p = 0.042 < 0.05
- 结论:统计显著
置信区间解读:
- 95% CI:[+0.3%, +19.7%]
- 整个区间都在 0 的右边(都是正数)
- 结论:有 95% 信心真实提升在 0.3% 到 19.7% 之间
关键观察:
- 下限是 +0.3%,即使是最保守估计,也是正提升
- 上限是 +19.7%,最好情况下可能接近 20% 提升
- 观察值 10% 在区间中间
步骤 5:检查数据质量
检查 1:样本量是否足够?
- 实际样本:7,000/组
- 计划样本:6,000/组
- 结论:✅ 样本量充足
检查 2:运行时间是否足够?
- 实际运行:14 天(2 周)
- 计划运行:14 天
- 结论:✅ 覆盖 2 个完整业务周期
检查 3:流量分配是否均匀?
- A 组:7,000(50%)
- B 组:7,000(50%)
- 结论:✅ 分配均匀
检查 4:是否有异常波动? (绘制每日数据趋势图,观察是否有异常日)
- 如果某天数据异常(如服务器故障),需要排除
- 如果数据平稳增长,说明正常
步骤 6:按子群体分析
移动端:
- A 组:5,000 人,250 人购买(5.0%)
- B 组:5,000 人,280 人购买(5.6%)
- 相对提升:+12%
- P 值:0.03(显著)
桌面端:
- A 组:2,000 人,100 人购买(5.0%)
- B 组:2,000 人,105 人购买(5.25%)
- 相对提升:+5%
- P 值:0.70(不显著)
结论:
- 移动端效果显著(+12%)
- 桌面端不显著(样本小,差异小)
- 整体显著主要由移动端驱动
步骤 7:检查其他指标
点击率:
- A 组:10%
- B 组:11%
- 结论:✅ 提升(符合预期)
用户满意度:
- A 组:4.2 分
- B 组:4.1 分
- 结论:⚠️ 轻微下降(需要关注)
退款率:
- A 组:2%
- B 组:2.1%
- 结论:✅ 持平(无负面影响)
综合评估:
- 主指标(转化率)提升 ✅
- 次指标(点击率)提升 ✅
- 用户满意度轻微下降 ⚠️
- 退款率持平 ✅
步骤 8:做出决策
情况分析:
- 主指标显著提升(+10%)
- 置信区间合理([+0.3%, +19.7%])
- 移动端效果显著,桌面端不显著
- 用户满意度轻微下降,但影响不大
- 退款率没有上升(说明用户质量没有下降)
决策选项:
选项 A:全量上线
- 优点:获得 +10% 转化率提升
- 风险:用户满意度可能继续下降
选项 B:仅移动端上线
- 优点:针对显著有效的群体
- 风险:桌面端失去优化机会
选项 C:延长观察
- 优点:收集更多数据,确认趋势
- 风险:延迟决策时间
最终决定:全量上线,但持续监控用户满意度
理由:
- 转化率提升显著,业务价值明确
- 用户满意度下降很小(4.2 → 4.1),可能是随机波动
- 退款率没有上升,说明没有严重质量问题
- 上线后持续监控,如果满意度继续下降,再考虑回滚
步骤 9:撰写报告
实验报告示例:
【A/B 测试报告】购物车按钮颜色优化
实验周期:2024-01-01 至 2024-01-14(14 天)
实验设计:
- 对照组(A):蓝色按钮
- 实验组(B):红色按钮
- 流量分配:50/50
- 样本量:7,000/组
主要结果:
- A 组转化率:5.00%(350/7000)
- B 组转化率:5.50%(385/7000)
- 相对提升:+10%
- P 值:0.042(显著)
- 95% CI:[+0.3%, +19.7%]
子群体分析:
- 移动端:+12%(p = 0.03,显著)
- 桌面端:+5%(p = 0.70,不显著)
其他指标:
- 点击率:+10%(A:10% → B:11%)
- 用户满意度:-2.4%(A:4.2 → B:4.1)
- 退款率:持平(A:2% → B:2.1%)
结论与建议:
✅ 建议全量上线红色按钮
- 主指标显著提升 +10%
- 置信区间完全为正,下限 +0.3%
- 其他指标无负面影响
⚠️ 持续监控:
- 用户满意度轻微下降,需持续观察
- 建议上线 1 个月后重新评估
报告人:XXX
日期:2024-01-15
7.2 结果解读决策树
问题 1:P 值是否显著(p < 0.05)?
- 否(p ≥ 0.05) → 转到问题 2
- 是(p < 0.05) → 转到问题 3
问题 2:置信区间是否包含 0?
-
包含 0(如 [-5%, +15%])→ 不显著
- 决策:保持现状,或延长实验时间
- 原因:无法确定方向
-
不包含 0(如 [+5%, +15%])→ 显著
- (这种情况少见,因为 P 值和 CI 通常一致)
问题 3:提升方向是什么?
- B > A(提升为正)→ 转到问题 4
- B < A(提升为负)→ 放弃 B 版本
- 决策:保持 A 版本
- 原因:B 版本显著更差
问题 4:提升幅度是否有业务价值?
- 提升 < 5% → 转到问题 5
- 提升 ≥ 5% → 转到问题 6
问题 5:小提升(< 5%),但显著,怎么办?
考虑因素:
-
置信区间下限是多少?
- 如果下限 > 0(如 [+1%, +9%]):可以上线
- 如果下限接近 0(如 [-0.5%, +8.5%]):谨慎上线
-
实施成本是多少?
- 低成本(改文案):可以考虑上线
- 高成本(重构代码):不建议上线
-
是否有副作用?
- 用户满意度下降?保持现状
- 其他指标恶化?保持现状
决策:
- 置信区间下限 > 0 + 低成本 + 无副作用 → 上线
- 其他情况 → 保持现状或延长观察
问题 6:大提升(≥ 5%),且显著,直接上线?
还需要检查:
- 用户满意度是否下降?
- 其他关键指标是否恶化?
- 是否有子群体效果相反(辛普森悖论)?
- 是否是新奇效应(短期暴涨,长期回落)?
决策:
- 所有检查通过 → 全量上线
- 有任何警告 → 谨慎上线或延长观察
7.3 实验评估检查清单
在做出决策前,确保回答了以下问题:
数据质量检查
- 样本量是否达到计划要求?
- 运行时间是否覆盖 2 个完整业务周期?
- 流量分配是否均匀(50/50)?
- 是否有异常数据或技术故障?
统计显著性检查
- P 值是否 < 0.05?
- 置信区间是否不包含 0?
- 置信区间宽度是否合理(不过宽)?
业务价值检查
- 提升幅度是否有业务意义(> 5%)?
- 置信区间下限是否可接受?
- ROI 是否为正(收益 > 成本)?
风险检查
- 用户满意度是否下降?
- 退款率/投诉率是否上升?
- 是否存在辛普森悖论?
- 是否是新奇效应?
子群体检查
- 移动端和桌面端结论是否一致?
- 新用户和老用户结论是否一致?
- 不同地区结论是否一致?
长期影响检查
- 是否观察了足够长的时间(> 2 周)?
- 趋势是否稳定(不是昙花一现)?
- 是否有长期负面影响(如用户流失)?
如果所有检查都通过 → 全量上线
如果有任何警告 → 谨慎决策或延长观察
如果有多个失败 → 保持现状或放弃
8. 实战案例
背景:电商网站购物车结算按钮,当前为蓝色,想测试红色是否能提升转化率。
实验设计:
- 假设:红色按钮更醒目,能提升转化率 10%
- 指标:结算按钮点击率(点击次数 / 访问次数)
- 基准转化率:5%
- 目标转化率:5.5%(相对提升 10%)
- 所需样本量:每组约 30,000(使用在线计算器)
- 流量分配:50/50
- 显著性水平:α = 0.05
- 统计功效:80%
结果:
- 运行 7 天后达到所需样本量
- A 组(蓝):5.02%
- B 组(红):5.15%
- 相对提升:+2.6%
- P 值:0.23(不显著)
- 95% 置信区间:[-1.7%, +6.9%]
决策:结果不显著,无法确认红色按钮更好。考虑到:
- 转化率提升很小(即使真实,也只有 2.6%)
- 置信区间包含 0(甚至包含负值)
- 红色按钮可能影响品牌一致性
最终决定:保持蓝色按钮,尝试其他优化方向(如按钮文案、大小、位置)。
7.2 案例 2:注册流程简化
背景:SaaS 产品注册流程需要填写 10 个字段,想测试减少到 5 个字段是否能提升注册率。
实验设计:
- 假设:字段更少 → 注册率更高
- 指标:注册完成率(完成注册数 / 开始注册数)
- 基准转化率:25%
- 目标转化率:30%(相对提升 20%)
- 所需样本量:每组约 2,000
- 流量分配:50/50
结果:
- A 组(10 字段):24.8%
- B 组(5 字段):31.2%
- 相对提升:+25.8%
- P 值:< 0.001(高度显著)
- 95% 置信区间:[+18.2%, +33.4%]
决策:结果高度显著,全量上线 5 字段版本。
后续跟踪:
- 新用户注册率提升了 25.8%
- 用户质量(后续付费率)没有下降
- 用户反馈"注册很快很方便"
7.3 案例 3:推荐算法优化
背景:视频网站推荐算法,想测试新的协同过滤算法是否能提升用户观看时长。
实验设计:
- 假设:新算法推荐更精准 → 观看时长更长
- 指标:人均每日观看时长(分钟)
- 基准:45 分钟/天
- 目标:提升 5% → 47.25 分钟/天
- 所需样本量:每组约 10,000 用户
- 运行时间:至少 4 周(覆盖完整用户行为周期)
结果(4 周后):
- A 组(旧算法):45.2 分钟/天
- B 组(新算法):46.8 分钟/天
- 相对提升:+3.5%
- P 值:0.07(接近显著,但未达到 0.05 阈值)
- 95% 置信区间:[-0.2%, +7.2%]
决策:
- 统计不显著,但趋势积极(P 值接近 0.05)
- 置信区间下限接近 0(-0.2%),风险很小
- 新算法成本增加不大(服务器资源 +5%)
最终决定:谨慎全量上线,但:
- 持续监控关键指标
- 准备快速回滚方案
- 一个月后重新评估
一个月后:
- 观看时长提升稳定在 +4%
- 用户留存率无显著变化
- 服务器成本增加可接受
结论:实验成功。
9. 用 AI 辅助 A/B 测试设计
AI 可以帮助你快速设计实验、计算样本量、分析结果。关键在于提供清晰的上下文。
8.1 提示词模板:样本量计算
你是一位资深的 A/B 测试专家。请帮我计算实验所需的样本量。
## 业务背景
[描述你的业务场景,例如:电商网站、SaaS 产品、移动 App]
## 当前指标
- 关键指标:[转化率/留存率/点击率等]
- 当前数值:[基准值,如 5%]
- 指标类型:[比例指标/均值指标]
## 实验设计
- 预期相对提升:[如 10%,即从 5% 提升到 5.5%]
- 显著性水平 (α):0.05 (95% 置信度)
- 统计功效 (1-β):0.8 (80%)
- 流量分配:50/50
## 请求
1. 计算每组所需样本量
2. 假设每天有 [X] 个访问用户,估算需要运行多少天
3. 给出实验设计建议
8.2 提示词模板:结果分析
你是一位资深的 A/B 测试专家。请帮我分析实验结果。
## 实验结果
- A 组(对照组):
- 样本量:10,000
- 转化数:500
- 转化率:5.0%
- B 组(实验组):
- 样本量:10,000
- 转化数:550
- 转化率:5.5%
## 请求
1. 计算相对提升(百分比)
2. 计算 Z 值和 P 值
3. 计算 95% 置信区间
4. 判断是否统计显著(α = 0.05)
5. 给出决策建议(全量/放弃/继续观察)
6. 指出实验可能存在的偏倚或问题
8.3 提示词模板:常见问题诊断
你是一位资深的 A/B 测试专家。我的实验遇到了问题,请帮我诊断。
## 问题描述
[描述你遇到的问题,例如:
- 运行两周后 P 值仍在 0.5 左右,完全不显著
- A 组和 B 组数据差异很大,完全不像随机分配
- 第 3 天结果显示显著,但第 7 天又不显著了]
## 实验信息
- 指标:[转化率等]
- 基准值:[如 5%]
- 预期提升:[如 10%]
- 流量分配:[50/50]
- 运行天数:[如 7 天]
- 总样本量:[如 5,000]
## 请求
1. 分析可能的原因
2. 提供诊断建议
3. 给出解决方案
::: tip 💡 追问技巧
- "请用通俗语言解释什么是 P 值"
- "我的置信区间包含 0,这意味着什么?"
- "如何判断是否存在辛普森悖论?"
- "什么情况下可以使用非 50/50 的流量分配?" :::
10. 决策树:什么时候该做什么?
10.1 实验前决策树:是否需要做 A/B 测试?
问题 1:改动是否可以快速看到结果?
-
否(需要几个月才能看到效果)
- ❌ 不适合 A/B 测试
- 原因:测试时间太长,成本太高
- 替代方案:用户调研、专家评估
-
是(几周内能看到效果)
- ✅ 可以考虑,继续下一个问题
问题 2:能否随机分配用户?
-
否(会严重影响用户体验)
- ❌ 不适合 A/B 测试
- 原因:无法保证公平对比
- 替代方案:渐进式发布、灰度发布
-
是(随机分配不会有大问题)
- ✅ 可以考虑,继续下一个问题
问题 3:能量化关键指标吗?
-
否(改动是主观的,如品牌形象)
- ❌ 不适合 A/B 测试
- 原因:无法用数字衡量
- 替代方案:用户调研、焦点小组
-
是(有明确的数字指标,如转化率)
- ✅ 适合 A/B 测试!
总结:
- 三个答案都是"是" → 做 A/B 测试
- 任何一个"否" → 考虑其他方法
10.2 实验中决策树:什么时候该停止?
问题 1:是否达到预定的样本量?
-
否(还没达到)
- ⚠️ 不要停止,不要分析
- 原因:P 值还不稳定,容易误判
- 例外:发现严重问题(如 Bug),立即停止
-
是(已经达到)
- ✅ 可以分析结果了
问题 2:是否有严重问题?
严重问题的定义:
-
转化率暴跌 > 50%
-
大量用户投诉
-
系统错误或 Bug
-
安全问题
-
是(有严重问题)
- 🛑 立即停止实验,回滚到 A 版本
- 不要等样本量,安全第一
-
否(没有严重问题)
- ✅ 继续运行到预定时间
问题 3:是否达到预定时间(如 2 周)?
-
否(还没到)
- ⏳ 继续运行
- 原因:需要覆盖完整业务周期,避免新奇效应
-
是(已经到了)
- ✅ 可以停止并分析结果
总结:
- 发现严重问题 → 立即停止
- 没达到样本量/时间 → 继续运行
- 达到样本量 + 时间 → 停止并分析
10.3 实验后决策树:如何解读结果?
问题 1:P 值是否 < 0.05?
-
否(p ≥ 0.05,不显著)
- 转到问题 2
-
是(p < 0.05,显著)
- 转到问题 3
问题 2:不显著,怎么办?
检查 1:样本量是否足够?
-
否(样本太小)
- 延长实验时间,收集更多数据
-
是(样本充足)
- 继续检查 2
检查 2:置信区间是否很宽?
-
是(如 [-20%, +30%])
- 延长实验,缩小置信区间
-
否(如 [-2%, +8%])
- 继续检查 3
检查 3:是否有业务价值?
-
置信区间下限 > 5%(如 [+6%, +15%],虽然不显著)
- 考虑上线(如果风险低)
-
置信区间下限 < 0(如 [-5%, +15%])
- 保持现状或延长观察
问题 3:显著,B 版本更好吗?
-
否(B 更差,显著)
- ❌ 放弃 B 版本,保持 A 版本
- 原因:B 版本显著损害了指标
-
是(B 更好,显著)
- 转到问题 4
问题 4:B 版本更好,提升多大?
-
小提升(< 5%,如 +2%)
- 转到问题 5
-
大提升(≥ 5%,如 +10%)
- 转到问题 6
问题 5:小提升但显著,怎么办?
检查 1:置信区间下限是多少?
-
下限 > 0(如 [+1%, +5%])
- 可以考虑上线
-
下限 ≤ 0(如 [-1%, +5%])
- 谨慎上线或延长观察
检查 2:实施成本是多少?
-
低成本(改文案)
- 可以上线
-
高成本(重构代码)
- 不建议上线(ROI 太低)
检查 3:是否有副作用?
-
用户满意度下降
-
其他指标恶化
- 不上线或延长观察
-
无副作用
- 可以上线
问题 6:大提升且显著,直接上线?
还需要检查:
- 用户满意度是否下降?
- 退款率/投诉率是否上升?
- 是否存在辛普森悖论?(子群体结论不一致)
- 是否是新奇效应?(短期暴涨,长期回落)
- 其他关键指标是否恶化?
结果:
- 所有检查通过 → 全量上线
- 有任何警告 → 谨慎上线或延长观察
10.4 快速参考:常见决策场景
| 场景 | 决策 | 理由 |
|---|---|---|
| p < 0.01,提升 20% | ✅ 全量上线 | 高度显著,大提升 |
| p < 0.05,提升 15% | ✅ 全量上线 | 显著,中提升 |
| p < 0.05,提升 3% | ⚠️ 谨慎上线 | 显著但提升小,检查副作用 |
| p = 0.08,提升 10% | ⏳ 延长实验 | 接近显著,需要更多数据 |
| p = 0.30,提升 2% | ❌ 保持现状 | 不显著,提升小 |
| p < 0.05,降低 10% | 🛑 放弃 B 版本 | 显著恶化 |
| p < 0.05,移动端 +20%,桌面端 -5% | ⚠️ 分群体决策 | 存在辛普森悖论 |
| 第 1 周 +30%,第 4 周 0% | ❌ 保持现状 | 新奇效应,虚假提升 |
| p = 0.04,但满意度下降 | ⚠️ 延长观察 | 主指标好,副指标差 |
名词速查表
| 名词 | 英文 | 解释 |
|---|---|---|
| A/B 测试 | A/B Testing | 对比实验,随机分配用户到不同版本,比较指标差异 |
| 对照组 | Control Group | 使用当前版本的组(A 组),作为基准 |
| 实验组 | Treatment Group | 使用新版本的组(B 组),验证效果 |
| 转化率 | Conversion Rate | 完成目标行为的用户占比(如购买、注册) |
| 零假设 | Null Hypothesis | 假设两组没有差异的起点,目标是"推翻"它 |
| P 值 | P-value | 如果零假设为真,观察到当前数据的概率 |
| 统计显著性 | Statistical Significance | P 值 < 0.05,结果不太可能是随机的 |
| 置信区间 | Confidence Interval | 真实差异可能落入的范围(如 95% CI) |
| 统计功效 | Statistical Power | 检测到真实效应的概率(1-β),通常 80% |
| 第一类错误 | Type I Error | 假阳性(说有差异,实际没有),α 控制 |
| 第二类错误 | Type II Error | 假阴性(说没差异,实际有),β 控制 |
| 显著性水平 | Significance Level | 容忍第一类错误的概率,通常 α = 0.05 |
| 效应量 | Effect Size | 差异的大小(相对提升多少),不只是是否显著 |
| 样本量 | Sample Size | 每组需要的用户数,需提前计算 |
| 随机分配 | Random Assignment | 每个用户有相同概率进入任一组 |
| 单尾检验 | One-tailed Test | 只检验"更好"(不关心"更差") |
| 双尾检验 | Two-tailed Test | 检验"有差异"(更好或更差都算) |
| 辛普森悖论 | Simpson's Paradox | 分组看趋势一致,合并后趋势相反 |
| P-hacking | P-hacking | 操纵数据或方法以获得显著结果 |
| 新奇效应 | Novelty Effect | 用户因好奇产生的短期行为变化 |
| 序贯检验 | Sequential Testing | 预设多个检查点,动态调整显著性阈值 |
参考资源
在线工具
经典文章
书籍推荐
- 《Trustworthy Online Controlled Experiments》- Ron Kohavi 等
- 《Designing Experiments》- Geoffrey Keppel