一句话回答
CUPED(利用实验前数据的对照实验)是一种 A/B 测试的方差缩减方法:用每个用户实验之前的一项相关测量值来调整他的实验结果,让处理效应更容易被检测出来,同时不引入偏差。
公式: Y_adj = Y − θ (X − mean(X)),其中 θ = cov(X, Y) / var(X)
什么是 CUPED?
CUPED(Controlled-experiment Using Pre-Experiment Data,利用实验前数据的对照实验)是一种让 A/B 测试结果噪声更小的方法。它由微软的研究人员在 2013 年发表,现在大多数实验平台都内置了它。
思路是:测试里用户之间的差别,很大一部分只是因为他们本来就不一样。重度用户在两个组里都花得多。如果你知道每个用户在测试之前花了多少,就能把这部分可预测的差异减掉,再去比较剩下的部分。
公式
对每个用户,Y 是测试期间的结果,X 是测试之前同一个(或相关的)指标:
Y_adj = Y − θ (X − mean(X))
θ = cov(X, Y) / var(X)
θ 就是用 X 对 Y 做回归得到的斜率。然后比较两组的平均 Y_adj,而不是平均 Y。因为处理不可能改变 X(它发生在更早),两组差异的期望值不变,缩小的只是噪声。
一个小例子
五个用户,实验前会话数 X、实验期间会话数 Y,θ = 0.8,mean(X) = 10(示例数字):
| 用户 | X(之前) | Y(期间) | Y_adj = Y − 0.8 (X − 10) |
|---|---|---|---|
| A | 2 | 4 | 10.4 |
| B | 6 | 8 | 11.2 |
| C | 10 | 11 | 11.0 |
| D | 14 | 14 | 10.8 |
| E | 18 | 18 | 11.6 |
原始值从 4 到 18,调整后从 10.4 到 11.6。平均值几乎没变(都是 11.0),但离散程度小了很多,真实的处理效应就能更早显现出来。
能帮多大忙?
方差大约减少 ρ²,ρ 是 X 和 Y 的相关系数:
| 相关系数 ρ | 去掉的方差 | 相当于流量增加 |
|---|---|---|
| 0.3 | 9% | 1.1 倍 |
| 0.5 | 25% | 1.3 倍 |
| 0.7 | 49% | 2.0 倍 |
| 0.9 | 81% | 5.3 倍 |
老用户的活跃度和收入指标周与周之间往往高度相关,这类指标减少 30% 到 50% 的方差很常见。没有历史的新访客的转化,收益就很小。
协变量怎么选,以及常见坑
- 能用测试前的同一个指标就用它,通常相关性最高。
- 时间窗口必须在分组之前结束。 用户看到改动之后测的任何东西都可能受改动影响,会让结果产生偏差。
- 新用户没有历史;给他们均值(不调整),或者单独作为一层处理。
- θ 用两组合并的数据来估计,不要每组各估一个。
- CUPED 提高的是检验的灵敏度(见统计显著性),它解决不了提前偷看结果、多重比较(见 Bonferroni 校正)或随机分组出错的问题。
在 TapCub 里
TapCub 不跑实验,也不做 CUPED。如果你用别的工具做测试,可以从 TapCub 数据里算出实验前的协变量:导出测试开始前几周按人的事件,统计每个用户的会话数或购买数,再在 notebook 里和实验分组关联起来。按人分析需要打开识别模式,因为匿名访客没有可以关联的用户档案。
这个解释清楚吗?
我们会根据反馈修改和补充这篇内容。
提交没有成功,请稍后再试。
谢谢你的反馈,我们会据此改进这篇内容。你已经反馈过这篇了,谢谢。
