我想用3个水桶进行A / B实验。如果我有2个存储桶,则可以使用random.sample
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
答案 0 :(得分:1)
我认为可以,但是因为它是代码,所以您可以很容易地凭经验进行测试。例如,您可以将代码包装到一个函数中,并调用它数千次,并确保每个条目在两种变体中结束的可能性相同。
表达这一点的另一种方法是将元素随机排序,然后选择子集。例如,类似:
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)
)