Короткий ответ
Перед анализом эффекта считают количество пользователей в каждой группе теста (value_counts по группе) и сравнивают полученное соотношение с ожидаемым (например, 50/50), а также проверяют, не отличается ли это соотношение по сегментам (платформа, страна, день входа в тест).
Как это работает подробнее
df.groupby('variant')['user_id'].nunique() дает фактическое число пользователей в каждой группе; при ожидаемом равном split сильное отклонение (например, 48% против 52% на большой выборке) — явный повод для более строгой статистической проверки SRM (sample ratio mismatch), а не просто "шум".
Пример кода
Пример на Python
import pandas as pd
df = pd.DataFrame({'user_id': range(1, 1001), 'variant': ['A'] * 540 + ['B'] * 460})
counts = df['variant'].value_counts()
ratio = counts / counts.sum()
print(counts)
print(ratio)Что использовать на практике
- На практике. проверку стоит делать не только в целом, но и в разрезе по дате входа в тест и по платформе — рассинхрон может возникать не с самого начала теста (например, после правки трекинга в середине эксперимента) или только на одной платформе из-за бага в назначении группы; обнаруженный SRM обычно означает, что сравнивать метрики конверсии по группам до устранения причины некорректно.
- Проверка. фактическое соотношение 54%/46% вместо ожидаемых 50%/50% на выборке в 1000 пользователей — заметное отклонение, которое стоит проверить статистическим тестом (например, chi-square) и разобраться в причине перед интерпретацией результатов теста.
Подводные камни
- Частые ошибки. проверяют общее соотношение групп один раз в конце эксперимента, не замечая, что рассинхрон появился только в середине периода из-за технического сбоя, который искажает лишь часть данных; игнорируют небольшое на первый взгляд отклонение в split, не проверив его статистическую значимость при большом объёме выборки, где даже небольшая разница в процентах может быть неслучайной.