CUPED(Controlled-experiment Using Pre-Experiment Data)是一种利用AB实验前的数据来缩减指标方差,进而提高实验灵敏度的方法,让你的指标更容易显著,进而让有效的策略上线,避免第二类错误(取伪,错误地接受策略上线前后没有差异的原假设)的发生。
老早就听说过这个似乎高大上的方法,也搜过一些科普文章,网上的很多文章反复地在讲原理,结果就是一看就懂,一用就懵,这次我尝试根据自己的理解拿一个简单的数据集实践一下这个方法。如有不对的话,欢迎大家指正!
一、Cuped是什么?
a.为什么要用Cuped
AB实验的目的是为了验证策略或者某种改动对业务有无正向的收益,进而决定要不要上线,而对业务有无正向的收益这个则是通过对业务指标进行假设检验来判断的。对于那些效果比较大的策略,可以很容易显著,但是对于效果比较小的策略(对于成熟的业务或者产品而言,往往策略和改动都属于这一类),显著往往需要增加流量或者增长实验时间,这也代表会增加实验成本。
无论是延长实验时间还是增加流量一方面都是为了增加样本量,因为样本越多,方差越小,p值越小,实验指标越可能显著,越容易检测出一些微小的改进。那么有没有办法可以在不增加样本量的情况下,降低方差呢?Cuped就是这种办法之一。
b.Cuped基本原理
方法来源于( 'Deng A, Xu Y, Kohavi R, Walker T. Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-experiment Data. Proceedings of the Sixth ACM International Conference on Web Search and Data Mining. New York, NY, USA: ACM; 2013. pp. 123–132.),论文的核心在于通过实验前的数据对实验指标进行修正,在保证指标均值估计无偏的情况下,得到方差更低的新指标,再对新指标进行统计检验(p值),这样就可以得到更显著的结果。
假设Y是我们实验想观察的指标,现在用另一个变量X和常数θ构造一个新变量
$ \hat Y_c $ ,如上图中式(3)所示,为了让其方差最小化,可以取常数θ为上图中式(4)所示。这样的话对于这个新变量而言,它有两个很有意思的特性:
- 它是我们想观察的实验指标Y的均值的无偏估计,它的均值跟Y的均值是一致的
- 它的方差比Y的方差小,且影响大小的正是X和Y的协方差
如果能选取跟Y高度相关的协变量X,那么新指标的方差相比Y将会小很多。
据论文作者所述,大多数情况下最相关的还是原来这个指标,比如实验要比较的是司机在线时长的差异,即Y为实验中司机的在线时长数据,那么X就选司机在实验前的在线时长数据。实验前数据应该选取多长周期呢,一般选一周到两周就够了。
协变量当然也可以选其他的变量,而且不止可以用实验前的数据,也可以用实验期间的数据,只是一定要保证所选的这个变量不会受实验策略的影响。
二、数据集长啥样?
为了实践一下,我构造了一个数据集,C组和T组各100个司机,主要字段是策略上线前司机的在线时长和策略上线后司机的在线时长。
三、Cuped实践!
a.不用Cuped
这就是我们目前多数AB的情况了,看试验期间的数据即可
avg_after_hour_C=5.02
avg_after_hour_T=5.11
var(diff_avg_after_hour)
=var(avg_after_hour_C)/Nc+var(avg_after_hour_T)/Nt
=2.06/1000+1.91/1000=0.00397
z=1.44,p_value=0.149
由于样本量小,实验组微小的提升并未检验出显著性
b.用Cuped
var(before_hour)=1.05
cov(before_hour,after_hour)=1.06
θ=cov(before_hour,after_hour)/var(before_hour)=1.01
avg_before_hour=5.02
利用计算的θ和cuped方法构建新指标
after_hour_cuped=after_hour-θ*before_hour+θ*avg_before_hour
avg_before_hour_C=5.02
avg_before_hour_T=5.01
avg(after_hour_C_cuped)=5.02
avg(after_hour_T_cuped)=5.12
var(diff_avg_after_hour_cuped)
=var(avg_after_hour_C_cuped)+var(avg_after_hour_T_cuped)
=var(after_hour_C_cuped)/Nc+var(after_hour_T_cuped)/Nt
=0,95/100+0.89/100=0.0018
z=2.29,p_value=0.022
实验组微小的提升检验出了显著性!
c.对比
方法 | 均值差异 | 方差 | p值 |
---|---|---|---|
不用Cuped | 0.091 | 0.0039 | 0.149 |
应用Cuped | 0.098 | 0.0018 | 0.022* |
*表示显著,p值<0.05
可以看到通过Cuped方法,方差降低了53.8%,t检验时计算Z值的分母变小,Z值变大,p值变小,实验组微小的提升检验出了显著性,证明了策略确实有效果(提升了司机0.1h在线时长)。当然最后是否上线与否,就看业务方认为这个0.1h的提升是否有价值了。
学习链接:
AB实验的高端玩法系列2 -更敏感的AB实验,CUPED!
ab test – 实验效果不显著的改善方法 – CUPED
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data
对数据和相关代码感兴趣的小伙伴,关注公众号在后台回复cuped即可获取