为 Python 中的 A/B 测试随机生成多个测试控制变体

Generating multiple test-control variants randomly for A/B testing in Python

我想用 3 个桶进行 A/B 实验。如果我有 2 个桶,我可以使用 random.sample

方法从所有用户中获取 2 组用户
from random import sample

test = sample(all_users, k=100)
control = set(all_users) - set(test)

由于我需要 3 组用户,下面的代码是否可以确保每个用户都有平等的机会处于任一变体中?

NUM_USERS = int(len(all_users) * 0.33)

variant1 = sample(all_users, NUM_USERS)
variant2 = sample(set(all_users) - set(variant1), NUM_USERS) 
variant3 = set(all_users) - variant1 - variant2

我认为会,但因为它是代码,您可以很容易地根据经验对其进行测试。例如,您可以将代码包装到一个函数中并调用它几千次,并确保每个条目以任一变体结束的概率相同。

另一种表达方式是打乱元素然后选择子集。例如,类似于:

from random import shuffle

# shuffle works in-place, making a copy means we don't change the callers version
elems = list(all_users)
shuffle(elems)

# round up to nearest group size
n = (len(elems) + 2) // 3

# assign users to groups
g1, g2, g3 = (
  elems[i:i+n]
  for i in range(0, len(elems), n)
)