В A/B-тесте часть пользователей контрольной группы случайно получила новую функцию. Что произойдёт с оценкой эффекта?
Оценка эффекта обычно сместится к нулю: контрольная группа частично начнёт вести себя как тестовая, поэтому различие между группами уменьшится. Это снижает статистическую мощность и может привести к ошибочному выводу, что функция неэффективна, хотя её реальный эффект положителен.
Рандомизированный A/B-тест появился как способ отделить влияние изменения продукта от различий между пользователями. При корректном разделении группы в среднем сопоставимы, поэтому разницу метрик можно связывать с воздействием функции.
Этот вывод предполагает, что контроль действительно не получает тестовое воздействие. Когда функция попадает в контроль, нарушается различие между условиями эксперимента — возникает загрязнение контрольной группы.
Пусть истинная конверсия без функции равна 10%, а с функцией — 12%. Если 30% контрольной группы случайно увидели функцию, её наблюдаемая конверсия будет ближе к 10,6%, а не к 10%.
Разница между тестом и контролем уменьшится с двух до 1,4 процентного пункта. При небольшом размере выборки результат может стать статистически незначимым, а решение о запуске — ошибочным.
Особенно опасно загрязнение, если пользователи взаимодействуют друг с другом, используют общие аккаунты или функция включается на уровне команды, организации либо устройства. В таких случаях воздействие может распространяться за пределы назначенной группы.
В стандартном анализе сравнивают фактически наблюдаемые средние значения между назначенными группами. Если доля контроля, получившая функцию, равна (p), а эффект функции относительно чистого контроля равен (\Delta), то при отсутствии других искажений наблюдаемый эффект приблизительно равен ((1-p)\Delta). Чем больше загрязнение, тем сильнее эффект разбавляется.
Сначала нужно проверить технические и продуктовые источники загрязнения: корректность флага эксперимента, кэширование, задержки синхронизации, авторизацию на нескольких устройствах, общие аккаунты и правила включения функции. Важно анализировать не только назначение группы, но и фактическое получение воздействия.
Основной анализ обычно сохраняют по первоначальному назначению в экспериментальную группу. Переклассификация пользователей по факту получения функции может создать смещение: получение воздействия часто связано с поведением пользователя и потому уже не является случайным.
Если загрязнение обнаружено, следует оценить его долю и чувствительность результата к разумным допущениям. При существенном загрязнении эксперимент лучше повторить с исправленной логикой рандомизации, а не объявлять отсутствие эффекта доказанным.
Иногда применяют оценку эффекта по фактическому воздействию, например через инструментальные методы, где случайное назначение используется как инструмент. Это требует более сильных предположений и обычно сложнее для интерпретации, поэтому не заменяет исправление эксперимента.
В эксперименте новая возможность должна была включаться только у тестовой группы. Через несколько дней выяснилось, что пользователи одного аккаунта видели единый флаг: если функция включалась владельцу организации, её получали и сотрудники из контроля. Доля загрязнения контроля составила 18%.
Рассматривались три варианта:
Выбрали третий вариант. После рандомизации организаций, а не отдельных пользователей, контроль перестал получать функцию через общий аккаунт. Повторный тест дал устойчивый результат, который можно было связать именно с изменением продукта.
1. Дополнительный вопрос: нужно ли исключать из анализа пользователей контроля, которые получили функцию?
Обычно нет, если основной estimand — эффект назначения в тестовую группу. Исключение происходит уже после назначения и может зависеть от активности, технических условий или поведения пользователя, создавая дополнительное смещение. Корректнее сохранить анализ по первоначальному назначению, отдельно измерить загрязнение и, если оно существенно, повторить эксперимент.
2. Дополнительный вопрос: чем загрязнение контроля отличается от того, что часть тестовой группы не воспользовалась функцией?
В первом случае контроль получает тестовое воздействие, поэтому группы становятся похожими и оценка эффекта обычно разбавляется. Во втором случае назначенный в тест пользователь может не воспользоваться функцией; анализ по назначению всё равно сохраняет случайность, но измеряет эффект предложения или доступности функции, а не эффект фактического использования. Эти ситуации нельзя автоматически исправлять одним исключением пользователей.
3. Дополнительный вопрос: что делать, если пользователи взаимодействуют друг с другом и воздействие распространяется между группами?
Рандомизировать отдельных пользователей может быть недостаточно: поведение одного участника влияет на другого, нарушая предположение о независимости наблюдений. Нужно выбрать единицу рандомизации, соответствующую каналу распространения воздействия: например, организацию, команду, регион или другой кластер. При кластерной рандомизации требуется учитывать внутрикластерную схожесть, поэтому для той же точности обычно нужна большая выборка.