В A/B тесте часть пользователей контрольной группы случайно получила новую функцию. Что произойдёт с оценко...

В A/B-тесте часть пользователей контрольной группы случайно получила новую функцию. Что произойдёт с оценкой эффекта?

Проходите собеседования с ИИ помощником Hintsage

Краткий ответ

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

Исторический контекст

Рандомизированный A/B-тест появился как способ отделить влияние изменения продукта от различий между пользователями. При корректном разделении группы в среднем сопоставимы, поэтому разницу метрик можно связывать с воздействием функции.

Этот вывод предполагает, что контроль действительно не получает тестовое воздействие. Когда функция попадает в контроль, нарушается различие между условиями эксперимента — возникает загрязнение контрольной группы.

Постановка проблемы

Пусть истинная конверсия без функции равна 10%, а с функцией — 12%. Если 30% контрольной группы случайно увидели функцию, её наблюдаемая конверсия будет ближе к 10,6%, а не к 10%.

Разница между тестом и контролем уменьшится с двух до 1,4 процентного пункта. При небольшом размере выборки результат может стать статистически незначимым, а решение о запуске — ошибочным.

Особенно опасно загрязнение, если пользователи взаимодействуют друг с другом, используют общие аккаунты или функция включается на уровне команды, организации либо устройства. В таких случаях воздействие может распространяться за пределы назначенной группы.

Подробное решение

В стандартном анализе сравнивают фактически наблюдаемые средние значения между назначенными группами. Если доля контроля, получившая функцию, равна (p), а эффект функции относительно чистого контроля равен (\Delta), то при отсутствии других искажений наблюдаемый эффект приблизительно равен ((1-p)\Delta). Чем больше загрязнение, тем сильнее эффект разбавляется.

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

Основной анализ обычно сохраняют по первоначальному назначению в экспериментальную группу. Переклассификация пользователей по факту получения функции может создать смещение: получение воздействия часто связано с поведением пользователя и потому уже не является случайным.

Если загрязнение обнаружено, следует оценить его долю и чувствительность результата к разумным допущениям. При существенном загрязнении эксперимент лучше повторить с исправленной логикой рандомизации, а не объявлять отсутствие эффекта доказанным.

Иногда применяют оценку эффекта по фактическому воздействию, например через инструментальные методы, где случайное назначение используется как инструмент. Это требует более сильных предположений и обычно сложнее для интерпретации, поэтому не заменяет исправление эксперимента.

Ситуация из практики

В эксперименте новая возможность должна была включаться только у тестовой группы. Через несколько дней выяснилось, что пользователи одного аккаунта видели единый флаг: если функция включалась владельцу организации, её получали и сотрудники из контроля. Доля загрязнения контроля составила 18%.

Рассматривались три варианта:

  • Сравнить пользователей по фактическому наличию функции. Это напрямую отражает воздействие, но ломает случайность: пользователи, получившие функцию, могут отличаться по активности.
  • Оставить исходное сравнение групп и просто сообщить о проблеме. Методологически корректнее, но при 18% загрязнения оценка будет заметно ослаблена.
  • Остановить эксперимент, исправить назначение на уровне организации и запустить его заново. Это требует времени, зато сохраняет интерпретируемость результата.

Выбрали третий вариант. После рандомизации организаций, а не отдельных пользователей, контроль перестал получать функцию через общий аккаунт. Повторный тест дал устойчивый результат, который можно было связать именно с изменением продукта.

Что кандидаты часто упускают

1. Дополнительный вопрос: нужно ли исключать из анализа пользователей контроля, которые получили функцию?

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

2. Дополнительный вопрос: чем загрязнение контроля отличается от того, что часть тестовой группы не воспользовалась функцией?

В первом случае контроль получает тестовое воздействие, поэтому группы становятся похожими и оценка эффекта обычно разбавляется. Во втором случае назначенный в тест пользователь может не воспользоваться функцией; анализ по назначению всё равно сохраняет случайность, но измеряет эффект предложения или доступности функции, а не эффект фактического использования. Эти ситуации нельзя автоматически исправлять одним исключением пользователей.

3. Дополнительный вопрос: что делать, если пользователи взаимодействуют друг с другом и воздействие распространяется между группами?

Рандомизировать отдельных пользователей может быть недостаточно: поведение одного участника влияет на другого, нарушая предположение о независимости наблюдений. Нужно выбрать единицу рандомизации, соответствующую каналу распространения воздействия: например, организацию, команду, регион или другой кластер. При кластерной рандомизации требуется учитывать внутрикластерную схожесть, поэтому для той же точности обычно нужна большая выборка.