目录
更多请看我的知乎回答:A/B test 到底应该怎么做?
什么是AB测试?
AB测试大规模出现在互联网产品迭代更新中。为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相似的访客群组访问这些版本,收集各群组的用户体验数据和业务数据,最后分析、评估出最好版本,正式采用。
假设Group1上的实验结果为 r1, Group2上的实验结果为 r2,则AB测试的差异是 r=r1−r2。r 是依赖于测试样本的随机变量,应该满足:
- 无偏性。假设在1%流量上某功能可以提高10%的点击率,那么在全量上也应该大约提高10%。
- 低方差。r是一个随机变量,方差越小,可靠性越高。
什么叫样本相似?
严格来说,应该是A, B两组样本的密度函数或分布函数相似。但在高维情况下,密度函数难以估计,以密度函数相似为标准的分组操作难度较大。退而求其次,A, B两组样本的边缘密度函数相似。具体来说,就是每个指标在A, B两组中要均衡。比如A组女性占比35%,那么B组女性占比也应约35%。这样,A, B两组实验效果上的差异可以排除性别的影响。但是,这样可能忽略变量之间的交互作用。两个指标单独来看都是均衡的,但联合起来看就不均衡了。一个更好的办法是通过马氏距离来定义相似性:
d(G1,G2)=(x1ˉ−x2ˉ)TΣ^−1(x1ˉ−x2ˉ)
x1ˉ, x2ˉ是两组样本的均值,Σ^是所有样本的协方差。当样本服从正态分布时,马氏距离刻画了样本分组之间的距离。
为什么要样本相似?
只有其它排除协变量对实验的影响,A, B两组实验的差异才可归因于测试元素的差异。
怎么实现样本相似?
随机化(Randomization)
将样本随机分为两组。比如,根据IP地址最后一位的奇偶性。
在样本量特别大且特征数量不是特别大时,这样做没问题。大数定律保证了各组的样本分布会收敛到总体的样本分布。 但是,当样本比较小,比如临床试验样本通常较少;或者特征数量很大,特征p和样本n是同一个数量级,比如个性化的推荐系统中;简单的随机化就可能出现分组后不均衡。
假设一个特征在两组中不均衡的概率为γ, 那么p个特征中至少有一个特征不均衡的概率大约是:β=1−(1−γ)p 。假设γ=0.0001, 当p=10000时, 计算得到β=0.63, 这个概率很大了。如果两组实验有差别,就很难说明到底是测试元素的差异还是某个特征的差异。
再随机化 (Rerandomization)
重复随机化过程,直到两组样本的马氏距离低于某一阈值。
协方差适应随机化(Covariance-Adaptive Randomization)
实现方法:
- 将样本随机排序,两两一组,(x1,x2),(x3,x4),(x5,x6),⋯
- for i =1 to n/2:
如果x2i在第一组x2i+1在第二组的马氏距离小于x2i在第二组, x2i+1在第一组,那么以大概率将x2i分在第一组, x2i+1分在第二组。反之亦然。
可以证明,协方差适应随机化得到的结果是无偏的,且达到方差的下界。
一个问题:
如果要拿小流量做实验,比如对1%的流量进行AB测试,那么应该如何挑选样本并分组?