Что такое SRM и почему это опасно

Sample Ratio Mismatch (SRM) — ситуация, когда пользователи распределились между вариантами теста не в заданной пропорции. Вы настроили сплит 50/50, ожидаете 50 000 пользователей в каждой группе, а получаете 48 000 в контроле и 52 000 в тесте.

Опасность SRM не в самом отклонении, а в причине: это симптом системной ошибки в логике теста. Когда группы формируются некорректно, их нельзя считать сопоставимыми — а значит, разницу в метриках нельзя атрибутировать изменению.

Важно: SRM делает результаты теста принципиально ненадёжными. Победитель, объявленный в тесте с SRM, может оказаться артефактом ошибки, а не реальным улучшением.

Как обнаружить SRM: chi-squared тест

Стандартный метод — критерий хи-квадрат:

H0: фактическое распределение совпадает с ожидаемым
Наблюдаемые: [48 000, 52 000]
Ожидаемые:   [50 000, 50 000]

χ² = (48000-50000)²/50000 + (52000-50000)²/50000
χ² = 80 + 80 = 160
p-value << 0.001 → SRM подтверждён

Правило: при любом тесте сначала проверяйте SRM, затем анализируйте метрики.

Причины SRM

Причина Как проявляется Решение
Бот-трафик Боты идут только в один вариант Фильтрация ботов на уровне данных
Асимметричная скорость загрузки Медленный вариант — больше отказов Оптимизировать производительность
Ошибка в логике сплитования Cookies перезаписываются, пользователи «прыгают» Проверить sticky assignment
Кеширование CDN возвращает один вариант части аудитории Исключить кешируемые запросы из сплита
Дублирование событий Одна сессия считается дважды Дедупликация на уровне pipeline

SRM при разных типах тестов

A/B-тест на UI: особенно уязвим к SRM через разную скорость загрузки — медленный вариант даёт больше отказов.

A/B-тест рекомендательных алгоритмов: менее уязвим к скоростному SRM, но может пострадать от неравномерного распределения новых vs вернувшихся пользователей при старте теста.

MAB (Multi-Armed Bandit): динамическая аллокация трафика по определению меняет пропорции — это нормально. SRM-проверка в MAB не применяется стандартным способом.

Как предотвратить SRM

  1. A/A тест перед первым экспериментом — убедиться, что система формирует группы корректно в нейтральных условиях
  2. Мониторинг размера групп с первых часов теста — раннее отклонение проще найти, пока тест не накопил большие данные
  3. Sticky assignment — пользователь, попавший в группу, всегда видит тот же вариант при всех следующих визитах
  4. Фильтрация ботов на уровне сбора данных, а не постфактум