Почему назначение варианта строкой variant = random.choice([0, 1]) при каждом запросе пользователя — плохая идея для A/B-теста?

AОдин и тот же пользователь будет часто видеть оба варианта, и эффект варианта смешается с эффектом постоянных переключений интерфейса.
BДоли групп заметно перекосятся: функция random.choice не способна давать честное разбиение пятьдесят на пятьдесят на больших объёмах данных.
CМощность теста наоборот вырастет: каждый запрос даёт независимое наблюдение, и общее число наблюдений в эксперименте увеличивается.
DЭксперимент станет корректнее: каждый запрос рассматривается как самостоятельный юнит назначения варианта.
Правильный ответ. Назначение варианта на каждом запросе нарушает фиксацию пользователя в одной группе, и эффект варианта смешивается с эффектом мерцания интерфейса.

Разбор

В A/B-тесте принципиально, чтобы один пользователь стабильно видел один вариант: тогда разница в метрике отражает именно изменение продукта. Если назначение делается на каждый запрос, тот же человек случайно скачет между A и B, и эффект изменения смешивается с тем, что интерфейс постоянно меняется. Запросы внутри сессии нельзя считать независимыми наблюдениями: они сильно скоррелированы через одного пользователя, поэтому формальная «прибавка мощности» обманчива. random.choice сама по себе вполне справедлива, проблема не в её распределении.

Проверь себя · 1/3разбор после ответа
Вы хотите сегментировать результаты по VIP, где VIP — пользователи с покупками за последние 30 дней. Но тест влияет на покупки, поэтому VIP-статус может измениться из-за самого теста. Как поступить, если цель — честная сегментация эффекта?
Тренировать A/B в Telegram

Ещё вопросы по теме «Дизайн эксперимента и рандомизация»