为什么你的 A/B 测试总在骗你?
团队上线一个新新手引导,盯仪表盘两天,看到一个绿色数字,就宣布赢了。然后第三周那个"赢"蒸发了,没人解释得清为什么。实验没失败——它从来就没真过。下面讲一个测试是怎么悄悄说谎的,以及什么才让一个结果值得信任。
Q:为什么"看到提升就上线"是移动端最贵的习惯?
这是偷看问题(peeking)。如果你每天看测试、一旦跨过显著线就停,你的真实假阳性率会从名义上的 5% 飙到 40% 以上。你不是在测假设,是在等噪声长成信号的样子。然后是多重比较:你瞥了十个指标,其中一个亮了——那本就是纯随机该发生的。还有新奇效应:玩家因为"新"去戳那个东西一周,不是因为它更好。你在第三天"看到"的提升,通常就是这三样里的一个穿着 costume。
Q:跑测试前,你怎么算样本量?
用功效分析(power analysis),不是猜。你需要基线转化率、你在意的最小效应(MDE)、显著性水平、以及你能容忍的假阴性率——这四个数吐出每个变体要多少用户、跑多少天。没基线?先别测,去攒数据。一个 D1 留存 30% 的休闲游戏想检出 1 个点的差异,每个变体要几万用户,小团队根本在合理窗口内喂不饱——所以要么测更大的杠杆,要么接受长跑。"我有 10 万 DAU"不是样本量;分流后每个变体实际落进去多少才作数。
Q:什么是保留组(holdout),什么是混杂因素?
保留组是一小撮永远不接收实验的用户,让你能量出长期效应和网络效应——那种改了一组、悄悄把共享指标挪动一点的溢出。混杂因素是同时发生的别的事:假期、一波买量、一个版本发布。你的变体"赢了",也许只是因为圣诞节。新奇效应 vs 真实留存,只有拉长观察窗、盯着保留组才分得开。没有这些,你量到的是和一份没纳入的日历的相关性。
Q:小团队怎么跑实验而不骗自己?
上线前就登记假设和停止规则,别因为第二天好看就弃之不顾。用序贯检验,把错误预算花对,而不是 naive 偷看。看护栏指标——崩溃率、留存、ARPU 的分布,不是一个好看的平均值。还要抵制测二十个小改、盼着一个撞上的冲动;一个成形好的大赌注,胜过一堆各自撒一点谎的欠powered 微测试。
| 错误 | 后果 | 修法 |
|---|---|---|
| 偷看就停 | 假阳性 >40% | 预先登记停止规则 |
| 多指标,一个"赢" | 随机也会亮一个 | 校正多重比较 |
| 没基线 | 算不出样本量 | 先攒数据 |
| 忽略混杂 | 把日历当功劳 | 保留组 + 更长窗口 |