AB测试分割算法

数据挖掘 测试 散列技巧
2022-02-16 21:50:31

我想了解什么是最有效的拆分算法。我有用户 ID,我想将它们分成 2 组。

现在我有 2 个变体:

  1. 模数方法 - 假设我们将所有偶数 id 放入一组,奇数放入另一组。

优点- 对于任何序列,我们将有一个统一的用户分布。因此,对于任何一天或一小时,在此期间注册的用户将平均分为两组。

缺点- 如果我需要两个对同一组用户执行一些测试,我可能会遇到问题

  1. 使用 md5 拆分 - 请参阅

优点- 我们可以轻松地对相同的数据进行大量测试,只需要使用不同的盐

Con - 对于某些订单序列,我们不会进行统一拆分。所以我们可能会遇到一些问题,例如每周的季节性。

那么中间有什么东西吗?我能否找到一个不会像 md5 那样“随机”的适当哈希,并且还可以让我对同一组用户进行多次测试。我们正在谈论让我们说 5-10 次测试

1个回答

我假设当您说“我需要两个 [原文如此] 对同一组用户执行一些测试我可能会遇到问题”时,您打算在开始时将所述用户组重新随机分配到新的控制组和治疗组中新的测试。


一个可能的中间立场是随机化两次,即首先将用户随机化到许多桶中,然后在需要运行新测试时将桶随机化到治疗/对照组中。

这也有几种口味:

1.“确定性地”将用户分配到桶中(基于足够随机标识符的一些规则,该标识符与用户特征和处理完全无关),随机挑选桶进行测试:

例如,实验者可以根据用户 ID 的最后一位创建 10 个桶。这假设您有足够的用户,因此最后一位数字与某些每小时/每天的季节性无关。对于每个测试,实验者然后随机选择 5 个桶进入对照组,5 个桶进入治疗组,例如:

  • 测试 1 - 对照:5、9、6、0、3;处理:4、8、1、7、2
  • 测试 2 - 对照:1、7、2、6、9;处理:3、4、8、5、0
  • 测试 3 - 对照:7、4、2、6、3;处理:0、9、1、5、8

...等等[1]。

2.将用户随机分配到桶中,确定性/随机选择桶进行测试:

这是许多大型科技公司的实验平台使用的方法。参见例如[2]或[3]的图1。在[2]中,他们将用户和用户集群作为实验单元,但分桶原理是相同的。

用户根据一些哈希被随机分配到 1,000 个桶中,并记录他们的桶分配。然后,实验者将决定他们的实验需要多少个桶(例如,每个对照/处理 100 个),并选择或由实验平台随机分配他们需要的桶。

这种方法有一个优势,而实验者可以强制执行某种桶排除,而实验者会阻止参与特定实验的用户也加入即将开始的实验,因为治疗可能会相互影响。

从理论上讲,这两种方法都会导致对照组和治疗组之间的随机分配。当然,这假设您有足够的用户并且您的分桶实现是正确的,这是需要仔细检查的。


[1] 我使用带有以下选项的随机整数集生成器
: 生成 5 个集合,每个集合有 10 个唯一的随机整数。
每个整数应该有一个介于 0 和 9 之间的值...
✔️ 使用逗号分隔集合成员
⚫ 按生成的顺序打印集合”。

[2] B. Karrer 等人,大规模网络实验,在:KDD'21中。可用:https ://arxiv.org/pdf/2012.08591.pdf

[3] J. Rydberg,Spotify 的新实验平台(第 2 部分)。可用:https ://engineering.atspotify.com/2020/11/02/spotifys-new-experimentation-platform-part-2/