Если в A/B “всё выросло”, но на срезах каша — это не эффект, это конфаундинг
Классика: общий uplift есть, а в новых/старых, iOS/Android, платных/органике — то плюс, то минус, то метрика прыгает по дням. Команда уже спорит про “сезонность” и “шум”. Цена ошибки простая: вы раскатываете не продукт, а чужую скрытую переменную. И потом месяцами чините последствия, потому что “по эксперименту же ок”.
Почему это происходит. Эксперимент меняет не только фичу, но и то, кто вообще увидел фичу и в каком контексте. Триггеры конфаундинга обычно три:
- таргетинг и доставка: аудитория в тесте и контроле начинает отличаться неслучайно
- алгоритмы ранжирования: меняется распределение экспозиций, а вместе с ним качество трафика и “поведение до клика”
- саппорт/операции: ручные процессы, очереди, лимиты, модерация, фрод, акции — всё это может по-разному задеть группы и дни
Дерево диагностики я держу в голове как “симптом → вероятная причина → что проверить первым”:
-
Симптом: неожиданный перекос по платформам/каналам/гео, хотя фича “для всех” Вероятная причина: доставка/таргетинг/логика включения зависит от атрибутов Проверить первым: баланс базовых признаков до экспозиции и стабильность состава трафика по дням
-
Симптом: эффект есть только у heavy users или только у новичков Вероятная причина: разные шансы попасть в эксперимент или разная интенсивность экспозиций Проверить первым: распределение числа показов/сессий/контактов с фичей, не только факт попадания в группу
-
Симптом: метрика-цель выросла, но “простые” инварианты поехали Вероятная причина: измерение, атрибуция, трекинг, изменения в пайплайне Проверить первым: инвариантные метрики и события, которые не должны реагировать (доли платформ, базовые технические события, стабильные конверсии до точки воздействия)
-
Симптом: пилой по времени, особенно после релиза/раскатки/перезапуска модели Вероятная причина: внешний шок или вмешательство системы (ранжирование, лимиты, саппорт) Проверить первым: календарь операционных изменений и метрики нагрузки (очереди, latency, отклонения, ручные вмешательства)
-
Симптом: “в целом ок”, но в одном-двух срезах аномально жирно Вероятная причина: leakage или пересечение сегментов, разные правила исключений Проверить первым: корректность исключений, пересечения аудиторий, SRM и причины пропусков/потерь логов
Правильная практика выглядит скучно: вы заранее фиксируете инварианты и контрольные срезы, логируете экспозицию и её интенсивность, и первым делом доказываете, что группы сравнимы по тому, что было до воздействия. Про размер эффекта спорят потом. Ограничение одно: если система доставки или ранжирования сама адаптируется на результаты, “чистый” A/B без дополнительных guardrails и анализа экспозиций почти всегда врёт.