AB测试对于产品和运营优化的重要性有目共睹。为了能更快的得到试验结果,试验流量越大越好。
但是当流量不够的时候怎么办呢?小流量AB测试能不能做?能!下面有多个节约流量的方法。
消除异常数据的影响
当点击量作为指标时,有时会看到少量设备贡献了数万的点击。这些设备可能是出了bug处于异常状态,也可能是在运行自动化测试,总之不会是正常的业务数据。如果将这些数据计入统计结果,将会对结果的准确性产生很大的影响。严重的情况只能重做试验,相当于本次试验流量全浪费掉了。所以极端用户的数据不进行统计,实践中让点击量最大的1%用户数据不参与计算。
正确统计进入试验的用户数
转化漏斗中的每个步骤都可以进行AB测试。假设在转化漏斗的第3层的页面进行AB测试,在统计试验UV的时候,比较科学的方法是将进入到该页面的用户统计为试验UV,而不是所有访客。如果没进入该页面的用户也统计为试验UV,则会稀释试验数据。下面举个例子看一下稀释的效果。
AB测试需要样本量的经验公式为:
δ是希望检测到的最小变化,p为转化率,σ是样本的标准差。
假设到达该页面的访客为10%,该页面转化率为50%,如果想检测出10%的提升(50%提升到55%),根据公式计算大概需要1600试验样本,对应总访客16000。如果把所有访客作为试验样本参与统计,则该种算法下页面转化率为5%(只有原来的十分之一),同样想检测出10%的提升(5%提升到5.5%),则需要30400试验样本,对应总访客也是30400。
这个例子里节约了大概1/2的流量,如果试验页面的转化率更高,前面漏斗的转化率更低,节约效果会更明显。
点击转化率比点击数量更容易获得统计显著的结果
有些场景下,如果认为用户多次点击和单次的点击差别并不大(比如下载,注册,看广告等),可以观察点击转化率指标的统计结果。转化率是去重的,用户只要点击过就计算为1,否则计算为0。同样的试验样本,点击量的标准差是一定大于转化率的。
仍然用上面提到的公式举例:
假设用户点击量的分布为0次20%,1次20%,2次20%,3次20%,4次20%。
则点击量均值为2方差为2,想检测出10%的提升需要800样本量。
转化率为80%,方差为0.16,想检测出10%的提升需要400样本量。
这个例子里节约了1/2的样本量,如果点击量的分布更加分散,节约效果会更明显。
原始版本的流量不要浪费掉
在有些情况下,为了稳妥起见往往只会让一小部分流量(比如总用户的1%)看到试验版本,99%的用户看到原始版本,如果统计试验数据的时候,看到原始版本的用户只挑出和看到试验版本用户数相同的人数(总用户的1%)来参与统计,则另外98%的流量相当于浪费了,他们实际上是对试验有帮助的。当试验版本和原始版本样本数不相同时,有一个计算等效样本数的公式:
N = (1/Ncontrol + 1/Nexperimnet)-1
当Ncontrol=Nexperimnet时计算得出N=Nexperimnet/2
如果原始版本(即control版本)的流量全部参与统计,则Ncontrol>>Nexperimnet计算得出N=Nexperimnet
等效样本数量翻倍了,相当于又节约了1/2的流量。
善用分层试验
想优化的地方太多了,同时跑多个试验是常态,是不是流量就不够用了?如果试验之间互相不会干扰,可以考虑分层试验。分层试验即允许同一个用户同时参加多个试验,通过流量分配的随机算法保证试验结果的代表性。原来流量只能做一个试验,现在不相关的试验可以一起做了,效率成倍增加。
同层试验共用原始版本数据
同层的多个试验,大家的原始版本是完全相同的,分开各自统计显然浪费了数据。以4个试验为例:
如果每个试验有独立的原始版本和试验版本,流量分配都是总流量的1/8,则根据上面提到的等效样本量公式,每个试验的等效样本数为总流量的1/16。如果4个试验的原始版本合并为公共的原始版本(占总流量1/2),则每个试验的等效样本数为总流量的1/10。等效样本量提升了60%。
如果多个AB测试试验优化的是同一指标,还可以进一步的对公共原始版本的流量进行微调。令n为试验数量,则 (Ncontrol/Nexperimnet)2 = n 时等效样本数量达到最大值。n=4代入得到原始版本占总流量1/3,每个试验版本占总流量1/6,最终每个试验的等效样本数为总流量的1/9。等效样本量又提升了11%。