随机生成多个测试控件变体,以便在Python中进行A / B测试

时间:2020-09-09 07:40:28

标签: python python-3.x random sample

我想用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

1 个答案:

答案 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)
)
相关问题