#python #python-3.x #random #sample
#python #python-3.x #Случайный #пример
Вопрос:
Я хочу выполнить эксперимент A / B с 3 сегментами. Если бы у меня было 2 сегмента, я мог бы получить 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
Ответ №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)
)