在使用AB实验的过程中,我们常遇到实验效果不显著或实验指标波动(方差)过大的问题。针对这些问题,最常见的解法便是扩大样本量。但在客观条件不允许增加样本量时又该怎么做呢?本文介绍的方差缩减技术,可以在不增加样本量的前提下,降低实验指标的波动(方差),使得实验更容易显著。
一、为什么要做方差缩减
1.1 实验灵敏度
定义
-
实验灵敏度(the sensitivity of experiments) :检测实验真实效果的能力。实验灵敏度越高,实验结果越容易达到显著。
-
实验真实效果 (Treatment Effect):实验组和对照组因处置的不同(UI差异、策略差异等)导致的差异。
-
如何测量真实效果?使用真实效果的估计量:
最常用的估计量:"实验组指标 - 对照组指标"。
真实效果的估计 ≠ 真实效果:why?举例来说,AA实验的真实效果 = 0,但"对照组1指标 - 对照组2指标"往往不等于0。
估计量虽不等于真实效果,但它在真实效果附近"波动"。
-
方差 :是对估计量"波动"程度的衡量 , 也是本文阐述的重点。 估计量的方差越小,估计量和真实效果越接近,实验灵敏度越高 。 因此通过缩小方差,我们可以提升实验灵敏度,使实验更易获得显著结论。
提升实验灵敏度的必要性
如果实验足够灵敏:
我们就更容易发现那些微小正向的实验,而不至于因为指标方差过大而被判别为统计功效不足、统计不显著;
能及时制止那些略微负向,但因为指标方差过大而被认为负向不显著的实验全量上线;
对于大流量的在线实验来说,一点点微小的正向或负向作用的影响可能都非常大。
1.2 方差缩减
什么场景下使用方差缩减技术
通常来说,提升实验样本量是最直接提升灵敏度的方法。但是在实验中,我们经常会遇到以下情形:
- 实验效果很小,需要非常大的样本量支持以达到置信
- 实验周期必须可控,如果实验结果是负向的,那尽早结束实验是必要的
- 很多实验的实验对象真正触发率是很低的,比如某个实验是搜索某个关键词后的页面效果更换,那尽管实验群体很大,真正搜索这个关键词的流量是很低的
以上三种情况,都需要非常大的实验样本量支持,但实际中不可能所有实验都拥有足够大的样本量。而方差缩减技术,通过降低实验组和对照组的方差,可以减少实验所需样本量或缩短实验周期,是提升实验灵敏度的另外一个方法。
方差缩减提升实验灵敏度的原理
假定实验组的指标值为 <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ( t ) Y^{(t)} </math>Y(t),对照组的指标值为 <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ( c ) Y^{(c)} </math>Y(c)
原假设:实验组和对照组无明显差异(有相同的均值)
备择假设:实验组和对照组有差异
在实际实验中,样本大小通常至少上千,因此,我们使用双样本t检验。双样本t检验的统计量如下:
分子: <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ‾ ( t ) \overline{Y}^{(t)} </math>Y(t)是 <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ( t ) Y^{(t)} </math>Y(t)的无偏估计, <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ‾ ( c ) \overline{Y}^{(c)} </math>Y(c)是 <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ( c ) Y^{(c)} </math>Y(c)的无偏估计,所以 <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ‾ ( t ) − Y ‾ ( c ) \overline{Y}^{(t)}-\overline{Y}^{(c)} </math>Y(t)−Y(c)是整体实验效果( <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ( t ) − Y ( c ) Y^{(t)}-Y^{(c)} </math>Y(t)−Y(c))的无偏估计。
分母: 我们可以认为样本之间是互相独立的,所以
因此,当缩减实验组和对照组的方差, <math xmlns="http://www.w3.org/1998/Math/MathML"> v a r ( Y ‾ ( t ) − Y ‾ ( c ) var(\overline{Y}^{(t)}-\overline{Y}^{(c)} </math>var(Y(t)−Y(c)越小,t检验的统计量值越大,p值越小,更容易拒绝原假设,实验越灵敏。
t检验统计量和p值的关系:t统计量值越大,其尾端概率P越小,两者是此消彼长的关系,但不是直线型负相关。
二、方差缩减方法
方差缩减的方法分为分配时(at-assignment )方法以及分配后(post-assignment) 方法。
分配时方法顾名思义,就是在将实验对象分配到实验各组别的时候进行方差缩减,主要以分层抽样(stratified sampling) 为例。分配后方法是在将实验对象分配到实验组别之后进行的方差缩减,主要以事后分层(post stratification) 和CUPED(controlled experiments utilizing pre-experiment data) 为例。
2.1 分层抽样
抽样时,将总体分成互不交叉的层,然后按照一定的比例,从各层独立地抽取一定数量的个体,将各层取出的个体合在一起作为样本,这种抽样方法叫分层抽样。
比如:调查大学生体育锻炼情况,由于男女生参加体育锻炼的情况差异较大,在抽样前对学生按男生和女生进行分层是有必要的。
公式(1)是简单随机抽样的样本均值,公式(2)是分层抽样的样本均值。
简单随机抽样的方差为:
分层抽样的方差为:
分层抽样和简单随机抽样的对比:
-
两个抽样方法的样本均值都是总体的无偏估计
-
分层抽样的方差比简单随机抽样的方差要小,分层抽样比简单随机抽样能降低方差的原因是分层抽样去掉了组间方差。
2.2 事后分层
事后分层是一种流行的分配后缩减方差方法。它基于简单随机抽样,但是与之不同的是,事后分层的样本均值使用加权均值。
均值:
其中: <math xmlns="http://www.w3.org/1998/Math/MathML"> p k p_k </math>pk是第k层的权重,是利用实验前数据计算已知的; <math xmlns="http://www.w3.org/1998/Math/MathML"> Y ‾ k \overline{Y}_k </math>Yk是简单随机抽样后第k层的业务指标均值。
方差:
事后分层、分层抽样以及简单随机抽样的方差对比
- 分层抽样的方差<=事后抽样的方差<=简单随机样本抽样的方差
- 当n足够大时,分层抽样的方差和事后抽样的方差降低程度几乎相等
事后分层 VS 分层抽样:
-
分层抽样,需要在抽样之前就对总体中的所有单位进行分层。在实际工作中,有时对总体的认识不够,事先分层比较困难。事后分层利用分层抽样的优点进行参数的估计,相比分层抽样,能够使用尝试多种指标分层方式,来确定哪种分层方式更能使得"层内差异小,层间差异大"。
例如,在某学院对过去一周教员加班情况的统计中,可采用按系和按职称情况进行分层。但并不知道哪种分层方式更能使得"层内差异小,层间差异大",这时就可以进行事后分层。
-
相比分层抽样,实施成本低。
-
分层抽样和事后抽样都用的是实验前数据。
例子:
目标:估计北卡罗来纳市每周花费在食物上的平均金额
有可能可以区分的指标:家庭组成,因为家庭成员更多可能在食物上花费更多金额
在U.S.人口中心,家庭的分布数据是已知的
采用简单抽样:
- 均值为:181
- 方差为:31.3
采用事后分层:
-
均值为:0.689275+0.057150+0.254*80=218
需要注意的是,事后分层的均值与简单抽样的均值不同,这是因为事后分层对样本家庭分布(相对美国总体家庭分布)的偏差做了修正,因此事后分层的均值更为准确(更能代表总体情况)
-
方差为:(1/1000)(0.689 24000+0.05721000+0.254 19000)+1/(1000^2)*[(1-0.689)24000+(1-0.057)* 21000+(1-0.254)*19000]=22.60
2.3 CUPED
CUPED也是一种分配后缩减方差方法。它的核心思路是通过实验前数据对实验核心指标进行修正 ,在保证无偏 的情况下,得到方差更低、更敏感的新指标。
假定实验原来观测的指标为Y,协变量为X(注:其数据时间需要在实验开始前,即X不能受干预影响)。样本量为N。上标e和c分别表示实验组和对照组,下标cv表示CUPED调整变量。CUPED使用步骤如下:
-
原始的实验组和对照组结果:
<math xmlns="http://www.w3.org/1998/Math/MathML"> d i f f = Y e ‾ − Y c ‾ diff = \overline{Y^{e}}-\overline{Y^{c}} </math>diff=Ye−Yc
-
原始diff的方差为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V a r ( d i f f ) = V a r ( Y e ‾ ) + V a r ( Y c ‾ ) Var(diff) = Var(\overline{Y^{e}}) + Var(\overline{Y^{c}}) </math>Var(diff)= Var(Ye) + Var(Yc)
其中:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V a r ( Y c v e ‾ ) = 1 N e V a r ( Y ) Var(\overline{Y^{e}_{cv}}) =\cfrac{1}{N^{e}}Var(Y) </math>Var(Ycve)=Ne1Var(Y)
<math xmlns="http://www.w3.org/1998/Math/MathML"> V a r ( Y c v c ‾ ) = 1 N c V a r ( Y ) Var(\overline{Y^{c}_{cv}}) =\cfrac{1}{N^{c}}Var(Y) </math>Var(Ycvc)=Nc1Var(Y)
-
CUPED修正后实验结果:
<math xmlns="http://www.w3.org/1998/Math/MathML"> d i f f c v = Y c v e ‾ − Y c v c ‾ = ( Y e ‾ − θ X c ‾ ) − ( Y c ‾ − θ X c ‾ ) = ( Y e ‾ − Y c ‾ ) − θ ( X e ‾ − X c ‾ ) diff_{cv} = \overline{Y^{e}{cv}}-\overline{Y^{c}{cv}}= (\overline{Y^{e}}-θ\overline{X^{c}}) - (\overline{Y^{c}}-θ\overline{X^{c}}) = (\overline{Y^{e}}- \overline{Y^{c}}) - θ(\overline{X^{e}}-\overline{X^{c}}) </math>diffcv = Ycve−Ycvc=(Ye−θXc) − (Yc−θXc)= (Ye− Yc) − θ(Xe−Xc)
注: <math xmlns="http://www.w3.org/1998/Math/MathML"> θ ( X e ‾ − X c ‾ ) θ(\overline{X^{e}}-\overline{X^{c}}) </math>θ(Xe−Xc)可理解为对原始diff的修正。由于平均而言 实验组和对照组在实验前差异为0,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> E ( θ ( X e ‾ − X c ‾ ) ) = 0 E(θ(\overline{X^{e}}-\overline{X^{c}}))=0 </math>E(θ(Xe−Xc))=0,也就是说,修正项的期望为0。因此,CUPED修正的实验结果同样也是实验真实效果的无偏估计。
-
CUPED修正后diff的方差:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V a r ( d i f f c v ) = V a r ( Y c v e ‾ ) + V a r ( Y c v c ‾ ) Var(diff_{cv}) = Var(\overline{Y^{e}{cv}}) + Var(\overline{Y^{c}{cv}}) </math>Var(diffcv)= Var(Ycve) + Var(Ycvc)
其中:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V a r ( Y c v e ‾ ) = 1 N e [ V a r ( Y ) + θ 2 V a r ( X ) − 2 θ C o v ( Y , X ) ] Var(\overline{Y^{e}_{cv}}) =\cfrac{1}{N^{e}}[Var(Y)+θ^2Var(X)-2θCov(Y,X)] </math>Var(Ycve)=Ne1[Var(Y)+θ2Var(X)−2θCov(Y,X)]
<math xmlns="http://www.w3.org/1998/Math/MathML"> V a r ( Y c v c ‾ ) = 1 N c [ V a r ( Y ) + θ 2 V a r ( X ) − 2 θ C o v ( Y , X ) ] Var(\overline{Y^{c}_{cv}}) =\cfrac{1}{N^{c}}[Var(Y)+θ^2Var(X)-2θCov(Y,X)] </math>Var(Ycvc)=Nc1[Var(Y)+θ2Var(X)−2θCov(Y,X)]
-
当 θ = Y~X 线性回归的斜率时,diff方差最小:
<math xmlns="http://www.w3.org/1998/Math/MathML"> θ = C o v ( Y , X ) V a r ( X ) θ = \cfrac{Cov(Y,X)}{Var(X)} </math>θ = Var(X)Cov(Y,X)
-
当θ取值为以上最优解时,方差为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> V a r ( d i f f c v ) = V a r ( d i f f ) ( 1 − ρ 2 ) Var(diff_{cv}) = Var(diff)(1-ρ^2) </math>Var(diffcv)=Var(diff)(1−ρ2)
其中 ρ 是原指标Y和引入的协变量X的相关系数。因此, <math xmlns="http://www.w3.org/1998/Math/MathML"> ρ 2 ρ^2 </math>ρ2便是方差缩减的上限 。相关系数越大,方差缩减越大 。可见CUPED的关键在于找到和Y高度相关的协变量X,并使用最优θ系数。
一般来说,当X选用与Y一致的(实验前)指标时,X与Y相关性最大,因此方差缩减最大。
比如实验要比较的是时长的差异,即Y为实验的时长数据,那么X就选实验用户在实验前的时长数据。注意这里X和Y都是向量,即实验中每个用户在实验前的时长和实验时的时长。
CUPED VS 事后抽样
CUPED适用于连续性变量,事后抽样适用于离散型变量。 当CUPED中的协变量X是分类的时,事后抽样等价于CUPED。
CUPED VS DID
CUPED的表达式为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> d i f f c v = ( Y e ‾ − Y c ‾ ) − θ ( X e ‾ − X c ‾ ) diff_{cv} = (\overline{Y^{e}}- \overline{Y^{c}}) - θ(\overline{X^{e}}-\overline{X^{c}}) </math>diffcv = (Ye− Yc) − θ(Xe−Xc)
DID表达式为:
<math xmlns="http://www.w3.org/1998/Math/MathML"> d i f f D I D = ( Y e ‾ − Y c ‾ ) − ( X e ‾ − X c ‾ ) diff_{DID} = (\overline{Y^{e}}- \overline{Y^{c}}) - (\overline{X^{e}}-\overline{X^{c}}) </math>diffDID = (Ye− Yc) − (Xe−Xc)
可以发现DID就是CUPED在θ = 1时的特例。 当X和Y相关性足够大时,DID也能降低方差(只是缩减比例达不到ρ^2)。但如果X和Y相关性不够大,DID反而可能增加方差。
因此还是建议使用最优θ系数(而不是简单令θ = 1)以达到更好的方差缩减效果。
案例1
同样的样本量,CUPED更快达到显著:微软Bing在研究页面加载时长对用户CTR影响的实验中,使用常规的未做方差削减的t-test,实验到第2周末的时候才看到统计显著的结果;而采用CUPED削减方差后(Y为实验期间用户CTR,X为实验前用户CTR),实验开始后第1天就得到统计显著的结果。(对应下面图1)
相同的实验周期,CUPED所需样本量更少:同样这个实验,如下图2,蓝色线是用一半样本量采用CUPED的结果,红色线是正常样本量并用T-test的结果,可以看到采用CUPED只用一半的样本量就可以达到跟常规未做方差削减的t-test一样的效果,即进行到实验第2周末的时候得到统计显著的结果,相比常规未做方差削减的检验节省了一半的样本量。
案例2
在货拉拉派券实验场景下,当补贴力度低时,实验真实效果偏小,难以通过常规实验评估手段测量。如下表"before(原始) "所示:实验组在补贴更高的情况下,指标却呈现"负向",或正向不显著。why?因为实验收益相比方差太小了,直观点说就是实验收益容易被波动抵消掉。
在无法增加样本量的情况下,使用CUPED进行方差缩减,如下表"after(CUEPD校正) "所示:多个地区的实验指标由负转正,或由不显著变为显著。CUPED让估计值更接近真实收益,同时也更容易获得显著结论。
2.4 方法比较
四、实验案例
以奈飞的一个实验为例,评估指标为用户留存以及7个其它业务相关指标,对比基准是简单随机抽样。
新用户下对比:
三种方法在方差缩减上都表现较差(小于4%),因为都需要使用实验前数据,而新用户缺乏实验前数据。CUPED对实验前数据依赖最大,效果相对也最差。
事后抽样和分层抽样(使用一台机器分流)效果相似。
老用户下对比:
在老用户上,三种方法方差缩减效果较好(达到40%)。
CUPED通过调整协变量,效果比其余两种方法好很多。如果CUPED使用跟其余两种方法一致的协变量,效果应该跟事后抽样相似。
事后抽样和分层抽样(使用一台机器分流)效果相似。
分层抽样(使用多台机器分流)比分层抽样(使用一台机器分流)效果差很多。在对用户分流时,由于数据量过大,需要使用多台机器对用户进行实时分流以提升效率。但是多台机器分流会引入新的方差,使得方差缩减效果降低。
组别分配流程:1个队列包含许多个1-100的片段,它们之间互相独立。每个片段处理过程如下图所示,先产生1-100的整数,然后随机打乱,给1-50标为组1,51-100标为组2.
有时候由于样本量过大,或一台机器偶尔出现故障,分层抽样需要使用多台机器。当有M台机器时,就有M个队列,当一个用户进入实验,会被随机选进一个队列中的一个片段。当使用多台机器时,比较难保持组别之间的平衡。比如:总用户量为100k,使用多台机器时,不能保证每台机器的处理用户量为100的整数。
五、结语
方差缩减技术可以在不增加样本量的情况下提升实验灵敏度,帮助识别更微小的实验收益。但该技术需要用到实验对象实验前的历史数据,因而通常在"老客"场景更为适用。
方差缩减技术分为分配时(at-assignment )技术及分配后(post-assignment) 技术。前者包括分层抽样,后者则包括事后分层和CUPED,这些技术的关键点都在于找到和实验观测指标(Y)高度相关的协变量(X)。分配时技术实现难度更高,效果不一定更好。分配后技术则更容易实现,且能达到和分配时技术同样不错的效果,因此实践中更推荐使用分配后技术。