Короткий ответ
Нужно посчитать количество пользователей в каждой группе эксперимента через GROUP BY variant и сравнить фактическое соотношение с ожидаемым (например, 50/50) — SQL даёт только сырые числа, а формальную проверку (например, хи-квадрат) обычно делают уже вне SQL, хотя сами наблюдаемые и ожидаемые частоты можно посчитать запросом.
Как это работает подробнее
Как это работает: SELECT variant, COUNT(DISTINCT user_id) FROM experiment_assignments GROUP BY variant даёт фактическое число пользователей в каждой ветке; дальше это сравнивают с ожидаемым распределением (обычно пропорциональным доле трафика, заданной в конфигурации эксперимента) — большое отклонение сигнализирует о проблеме в рандомизации или в логировании, а не о реальном эффекте теста.
Пример кода
PostgreSQL: SRM для двух вариантов 50/50
WITH counts AS (
SELECT variant, COUNT(DISTINCT user_id)::numeric AS observed
FROM experiment_assignments
WHERE experiment_id = 'checkout_redesign'
GROUP BY variant
), totals AS (
SELECT SUM(observed) AS total FROM counts
), test AS (
SELECT SUM(POWER(c.observed - t.total / 2, 2) / (t.total / 2)) AS chi_square
FROM counts AS c CROSS JOIN totals AS t
)
SELECT chi_square,
chi_square > 3.841 AS srm_at_alpha_005
FROM test;Что использовать на практике
- На практике: SRM нужно проверять до анализа основной метрики — если группы разъехались по размеру сильнее, чем можно объяснить случайностью, доверять результатам теста в целом нельзя, независимо от того, насколько «красивой» выглядит разница по конверсии. Причины SRM часто лежат не в статистике, а в технических деталях: разное время старта логирования для групп, фильтры ботов, которые по-разному задевают группы, или ошибки в самом механизме рандомизации.
- Проверка: Если ожидалось 50/50, а получили 51200 и 48700 — разницу стоит прогнать через тест на соответствие пропорций вне SQL, а не оценивать «на глаз». Проверка: пересчитать по дням старта эксперимента отдельно — не появилась ли проблема после конкретного релиза.
Подводные камни
- Частые ошибки: смотрят только на итоговые пропорции («49.8% vs 50.2% — это нормально») без формальной проверки значимости отклонения и без учёта размера выборки — при очень больших выборках даже небольшое на вид отклонение может быть статистически значимым и указывать на реальную проблему.