Как разделить клиентов на две группы для A/B теста
Что проверяют
Понимаете ли вы, что главное в разбиении это случайность и стабильность назначения, а не ручной подбор похожих групп. Следом обычно спрашивают, как проверить, что разбиение не сломалось, и как посчитать нужный размер выборки.
Как отвечать
Опишите разбиение по шагам:
- единица рандомизации: обычно пользователь, а не сессия или визит, иначе один человек увидит оба варианта. При сетевых эффектах (маркетплейс, соцсеть) делят кластерами: городами, группами связанных пользователей;
- детерминированное назначение: хеш от
salt + user_id, остаток от деления на 100 даёт бакет, бакеты с 0 по 49 уходят в A. Соль своя у каждого эксперимента, иначе одни и те же люди будут всё время попадать в тестовые группы. В Python беритеhashlib, а не встроенныйhash(): для строк он рандомизирован между запусками процесса; - стратификация: при маленькой выборке или сильной разнородности делят внутри страт (новые и старые клиенты, регион), чтобы группы не разошлись случайно;
- размер выборки: считается заранее от минимального детектируемого эффекта, при α 0,05 и мощности 0,8. Снизить дисперсию помогает CUPED на данных до эксперимента;
- проверки: A/A тест и контроль SRM, то есть совпадения фактического соотношения групп с заданным, через хи-квадрат. Перекос 50,6 на 49,4 на миллионе пользователей уже означает, что назначение или логирование сломано.
Группы после разбиения сравнивают по характеристикам только для контроля. Подгонять их руками не нужно: рандомизация уравновешивает и то, что вы не измеряли.
Где спотыкаются
Делят по неслучайному признаку: по дате регистрации, по региону или «первые пятьдесят тысяч». Группы изначально разные, и эффект смешивается с отбором.
Рандомизируют по пользователю, а метрику считают по кликам или сессиям и применяют обычный t-тест. Наблюдения одного пользователя зависимы, дисперсия занижена, нужен дельта-метод или бутстрап по пользователям.
Не проверяют SRM и подглядывают в результат каждый день, останавливая тест при первой значимости. Ошибка первого рода от этого растёт в разы.