🚨 SRM в A/B тестах: когда не совпадают доли, и что с этим делать

Кажется, что A/B тест уже идёт — метрики собираются, жизнь прекрасна. Но если доли пользователей в группах не соответствуют ожидаемым — это SRM. И это уже проблема.

Sample Ratio Mismatch (SRM) — несоответствие фактических долей заданным.

😢 Пример:

Ожидание:

control — 50% test — 50%

Реальность:

control — 62% test — 38%

🧐 Почему так могло произойти?

1. Что-то не то со сплитованием в A/B-шнице (последнее на что можно подумать, если платформа не только что разработана). Могут быть проблемы со сплитовалкой на уровне разработки, но также маловероятный сценарий. 2. Логи определения групп пользователей настроены некорректно. Вероятный сценарий. Могли определить неправильно веса групп, выкатить только на определенные девайсы, неправильно настроено определение групп (в тест / контроль попадают пользователи с разным распределением метрики при верной H0).

😎 Как это можно быстро проверить?

Предположим, что у нас есть таблица, куда складываются логи пользователей с группами, можно посмотреть на количество пользователей в каждой группе. Тут можно просто глазами просмотреть (что ожидали на дизайне vs то, что получили по факту, какое соотношение).

SQL `SELECT variant, COUNT(DISTINCT user_id) AS users FROM experiment_assignments WHERE experiment_name = 'new_checkout_flow' AND assignment_time BETWEEN '2025-04-01' AND '2025-04-10' GROUP BY variant;

🐍 А с помощью Python можно воспользоваться критерием хи-квадрат. Он показывает расхождение между наблюдаемым распределением в выборке и ожидаемым распределением, которое предполагалось в эксперименте. На основе статистики мы понимаем является ли расхождение критичным или нет.

Возьмем пример из начала на 10 000 наблюдений с фактическим разбросом.

`from scipy.stats import chisquare

observed = [6200, 3800] total = sum(observed) expected = [total / 2, total / 2]

_, p_value = chisquare(f_obs=observed, f_exp=expected)

if p_value < 0.05: print("SRM") else: print("NO SRM")

Вообще на каждом эксперименте можно поставить можно поставить автоматическую проверку (на предмет валидности расчетов). Ожидаемое vs Фактическое. Немного про проверку гипотез при Chi-Square

H0: Распределение пользователей между вариантами эксперимента соответствует ожидаемым долям (например, 50 / 50). H1: Распределение пользователей отличается от ожидаемого.

Если p-value < 0.05, мы отвергаем H0 => SRM есть. Если p-value >= 0.05, оснований отвергать H0 нет => распределилось все как и ожидалось.

😘 Всегда проверяйте SRM до метрик. Это простая проверка, которая спасёт ваш эксперимент. Ставьте реакции если: 🐳 — пост понравился!****🤡 — пойдет)``