ABtest-再深入一点点

基本的 ABtest


最基本的 ABtest 还得从达尔文他老人家观察动物进化说起:同一个岛上的同一种鸟,分别生活在岛的东西两侧,然后分别进化出了不同的鸟喙。

这也总结出了 ABtest 的核心思想:

  • 两个及以上的实验方案
  • 只有单变量影响该实验的实验结果

我们尽可能地满足多个实验方案的样本是独立同分布的,这点在数据量大的情况下,还是比较好实现的。ABtest 可以帮助我们通过数据的方式,科学且客观地区判断不同方案间的好坏与否,做出比较正确的判断。但是简单的 ABtest 方法也有不足,其中最大的缺点就是流量利用率太低,这点是无法忍受的。

可重叠的分桶分层方法

分桶的本质就是根据一定的算法进行分组。现在有一批用户,我们希望其可以随机地分到 n 个桶中,我们可以根据我们自己生成的唯一标识值,根据哈希算法计算出一个 hash 值,再将此 hash 值模 n 进而分配到不同的桶中,其中随机性的保障来源于唯一标识值,我们需要保证这个值是随机的。

分层则是我们认为互相不影响的实验,理论上是可以同时进行的。比如我们的文章有 ABCD 四个变量,其点击率是我们观察的实验结果;同时我们可以进行下单页是微信支付在前还是支付宝支付在前的实验,观察其订单支付率。两者的变量和观察的结果都是不相关的,所以启发我们可以将实验分为多个互相之间独立的层,实验之间互相影响的在同一层。比如说课程展示层、订单层、UI层这样的,要求满足正交、互斥的要求。

  • 正交:层与层之间流量是正交的,一份流量穿越每层实验时,都会再次随机打散,且随机效果离散。
  • 互斥:实验在同一层拆分流量,且不论如何拆分,不同组的流量是不重叠的。

好了那我们现在就有了可重叠分桶分层方法的雏形:先抽象出可重叠的多层,然后对每一层的流量按照不同的分桶算法进行随机分桶

为什么要每一层都按照不同的算法随机分桶呢?是因为我们需要保证流量在不同层之间的正交的,简单来理解就是说一个用户在不同的层应该被分到哪一个桶里面,是独立不相关的,比如层 A 中桶 1 的用户在层 B 中应该随机分布在所有桶中。

具体操作

还没操作呢。。。不过感觉怎么分配不难,难点在于后续的数据效果追踪。。。

相关链接