在做AB实验的时候,有时尽管我们发现AB两组出现了明显差异,但我们依旧无法确认这种差异是实验条件不同带来的,还是AB两组用户本身的差异带来的。
有人可能会说,我们采样是随机的,因此AB两组用户肯定是均匀分布的。
但是,做过几次AB实验,你就会发现。即便我们采用特别均匀的哈希打散算法,同时扩大样本量,也依然会出现AB两组用户在空跑期(AB两组用户实验条件一致),差异显著的情况。
因此,为了规避这个问题。很多企业采用了AA测试(空跑期)方法。
即在正式开启实验之前,先进行一段时间的空跑,对AB两组用户采用同样的实验条件,一段时间后,再看两组之间的差异。
如果差异显著,数据弃之不用,重新选组。
如果差异不显著,记录两组之间的均值差,然后在实验期(AB两组实验条件不同)结束时,用实验期的组间差异,减去空跑期的组间差异,得到一个净增长率。
这种方式看起来好像很严谨,但却存在着很多问题。
对绝大多数APP来说,用户留存率不是100%。这意味着今天活跃的用户,明天可能就不来了。
因此,今天按照一定规则圈定的用户群,到明天就不是同一拨人了。
换句话说,即便空跑期的AA实验发现两组没有差异,等到进行AB实验时,两个实验组里的用户早就不同了。你也没法确定,AB两组用户本身没有差异。
这就意味着,一般的AA实验没有意义。
有人可能会说,那我们只看那些一直活跃的用户就好了,看他们在AA期间和AB期间的变化。
看起来没问题,但是这也使得实验效果,局限在那些留存率高的用户上,你的实验结果,无法推广到全量用户上,外部效度很低。
还有些企业,会直接开三组流量,对照组、实验组、AA对照组。
通过对比对照组和AA对照组,来判断实验组的固有差异。但这种方式更加不能确定对照组和实验组之间的固有差异,是更加不靠谱的方式。
那么,如果AA测试没有用,那我们该如何规避组间固有差异带来的问题呢?
既然组间差异一定存在,那我们不妨接受这个前提,并且用统计方式来衡量差异大小,在计算实验效果的时候,把差异考虑在内即可。
举个例子,假如我们随机抽取2N个用户分为两组(每组N个),做一次实验,并进行指标对比。那么我们可以计算出两组用户在给定α值下,指标差异的置信区间。
我们可以把置信区间归一化,得到围绕样本均值波动的比率(给定α水平下)。
这个波动比率,可以认为是任意两次随机分组,在给定α水平下的指标固有差异。
接下来,我们可以判断,如果AB实验得出的效果(改进比率),小于波动比率,那很可能只是正常误差,这个实验结论是不靠谱的。
相反,如果实验效果大于波动比率,意味着这个实验结论是值得信赖的。
针对不同的指标、α水平、时间、样本数量(一般选常用AB实验的用户数量,便于参照),我们可以计算出AA波动率的表,如下图所示:
通过这种方式,我们就把传统的AA实验,转换为了AA波动。用量化的方式,描述了组间固有差异。
当然,通过波动率的计算方式我们可知,波动率受样本量、指标方差的影响,要想减少波动率,可以: