Снижение дисперсии: CUPED
Снижение дисперсии даёт чувствительность почти даром: тот же вывод на меньшем трафике или за меньший срок, из данных, которые у тебя уже есть. В зрелых экспериментальных платформах CUPED встроен по умолчанию, поэтому на собесе аналитика он всплывает регулярно.
Типовые формулировки: «как ускорить тест, не увеличивая трафик?», «что делает CUPED?», «CUPED применили, а эффект не вырос - метод не сработал?».
// Последний вопрос и есть главная проверка понимания. Правильный ответ: так и должно быть. Метод сужает интервал вокруг той же оценки, а не двигает саму оценку.
Почему дисперсия - это деньги
Размер выборки растёт прямо пропорционально дисперсии метрики. Срезал дисперсию оценки вдвое - и дальше на выбор: вдвое меньше пользователей, вдвое короче тест или вдвое более узкий доверительный интервал на прежних данных. Ничего из этого не требует нового трафика.
Что именно снижается - принципиальный момент, и на нём проверяют понимание. Снижается шум оценки, а не сам эффект. Точечная оценка остаётся примерно там же и остаётся несмещённой; сужается интервал вокруг неё.
// Поэтому фраза «применили CUPED, а эффект не вырос» описывает нормально работающий метод, а не провал. Значимость приходит раньше не потому, что сигнал стал больше, а потому что шум стал меньше.
- дисперсия оценки
- насколько сильно измеренный эффект скакал бы от повторения к повторению эксперимента. Ширина доверительного интервала - её видимое проявление
CUPED: вычесть предсказуемое
Ковариата - величина, измеренная ДО эксперимента и коррелирующая с метрикой. Самая сильная ковариата почти всегда одна и та же: та же метрика за предыдущий период. Кто покупал на пять тысяч в месяц до теста, скорее всего будет покупать много и во время теста, и эта часть его поведения к твоей фиче отношения не имеет - она чистый шум для эксперимента.
Идея CUPED (controlled experiment using pre-experiment data): вычесть из метрики ту часть, которую можно предсказать по ковариате. Остаётся остаток - то, что ковариатой не объясняется, - и у него дисперсия заметно меньше. Разница между группами при этом не смещается, потому что ковариата снята до рандомизации и в обеих группах распределена одинаково.
Сила метода жёстко привязана к корреляции: дисперсия падает примерно как 1−ρ². При корреляции 0.7 остаётся 51 процент исходной дисперсии - проверяется симуляцией и совпадает с формулой до второго знака. При корреляции 0.3 останется 91 процент, и городить огород незачем.
// Условие, которое нельзя нарушать: ковариата снята до назначения в группу и от него не зависит. Признак, на который повлияла сама фича, вычтет вместе с шумом кусок настоящего эффекта и сместит оценку - причём в сторону нуля, то есть ты сам себе занизишь результат.
- ковариата
- вспомогательная переменная, которая объясняет часть разброса метрики, но не зависит от эксперимента
Стратификация и триггер
Стратификация: разбей аудиторию на однородные куски - платформа, гео, тип пользователя, - рандомизируй внутри каждого и оценивай эффект взвешенно. Из общей дисперсии уходит межстратовая часть, то есть тот разброс, который объясняется просто разницей между стратами, а не эффектом фичи. Пост-стратификация делает то же самое на этапе анализа и заодно чинит случайный дисбаланс групп.
Триггерный анализ: если фичу видят всего 5 процентов юзеров (скажем, она срабатывает только в корзине с промокодом), то остальные 95 вносят в обе группы одинаковые числа и разбавляют сигнал в двадцать раз. Считать эффект надо на затронутых.
Тонкость, из-за которой триггерный анализ чаще ломают, чем помогают им: сравнивать нужно затронутых в тесте с теми, кто дошёл бы до фичи в контроле. Триггер определяется одинаково в обеих группах, по условиям попадания, а не по факту показа. Иначе в тест попадут одни люди, в контроль другие, и сопоставимость исчезнет вместе со всем смыслом эксперимента.
// Чего делать нельзя ни при каких обстоятельствах: ослаблять уровень значимости или мощность ради скорости. Это тоже «ускоряет тест» - ровно в той же мере, в какой делает его вывод бесполезным.
- страта
- однородная группа внутри аудитории: iOS-юзеры Москвы, новички, тяжёлые пользователи. Внутри страты люди похожи, между стратами - нет
Как отвечать: «Как ускорить A/B-тест, не увеличивая трафик?»
Снижаю дисперсию оценки, тогда нужная мощность набирается на меньшей выборке. Первый инструмент - CUPED: беру ту же метрику за предпериод как ковариату и вычитаю предсказуемую по ней часть. Оценка остаётся несмещённой, а интервал сужается тем сильнее, чем выше корреляция: при 0.7 дисперсия падает примерно вдвое, при 0.3 смысла почти нет. Дополняю стратификацией по платформе и гео, а если фичу видит меньшинство юзеров - триггерным анализом на затронутых, определяя триггер одинаково в обеих группах. Чего я при этом не трогаю, так это уровень значимости и мощность: их ослабление тоже ускоряет прокрас, но платит за это надёжностью вывода, а снижение дисперсии даёт скорость честно.
Перечислены реальные рычаги, сила CUPED привязана к корреляции числом, и явно проведена граница между честным ускорением и жульническим. Это понимание, а не список терминов.
На чём валят
- −Взять в ковариаты CUPED признак, снятый после старта теста: оценка смещается, причём к нулю.
- −Ждать роста эффекта от снижения дисперсии - метод режет шум, а не двигает среднее.
- −Сравнивать затронутых в тесте с полным контролем: группы стали несопоставимы, эффект завышен.
- −Применять CUPED к свежим юзерам без истории - предпериодной ковариаты у них нет, срезать нечего.
- −Стратифицировать по признаку, на который повлиял сам тест: это уже не коррекция, а внесение смещения.
Проверьте себя
Пять вопросов из банка по этой подтеме. Всего их 14, остальные разбираются в тренажёре.
- От чего зависит, насколько сильно CUPED срежет дисперсию?A)От корреляции ковариаты предпериода с метрикой экспериментаB)От того, насколько велик сам эффект фичиC)От числа вариантов, участвующих в тестеD)От того, какой именно уровень значимости α был выбран заранее
показать ответ и разбор
+A)От корреляции ковариаты предпериода с метрикой эксперимента// разбор: Выигрыш CUPED растёт с корреляцией ковариаты и метрики: дисперсия падает примерно как 1−ρ². Сильно коррелирующая ковариата (та же метрика за предпериод) даёт заметный срез, слабая — почти ничего. Величина эффекта, число вариантов и α на силу снижения дисперсии не влияют.
- Какую ковариату для CUPED выбирают чаще всего и почему?A)Случайный шумовой признак — для непредвзятостиB)Ту же метрику за предпериод: она сильнее всего коррелирует с исходомC)Признак, который сам меняется под действием фичиD)Идентификатор той экспериментальной группы, в которую попал пользователь
показать ответ и разбор
+B)Ту же метрику за предпериод: она сильнее всего коррелирует с исходом// разбор: Лучшая ковариата — та же метрика за доэкспериментный период: прошлое поведение юзера обычно сильнее всего предсказывает его поведение в тесте, а значит даёт максимальную корреляцию и наибольший срез дисперсии. Ковариата обязана быть из предпериода и не зависеть от назначения в группу — признак, меняющийся под фичей, внёс бы смещение.
- Как стратификация снижает дисперсию оценки эффекта?A)Удаляя из выборки пользователей нетипичных стратB)Пропорционально увеличивая долю тестовой группы в наиболее крупных стратахC)Рандомизируя внутри однородных страт и убирая межстратовую вариативностьD)Заменяя реальные метрики их средними по стратам
показать ответ и разбор
+C)Рандомизируя внутри однородных страт и убирая межстратовую вариативность// разбор: Стратификация делит аудиторию на однородные страты (гео, платформа, тип юзера), рандомизирует внутри каждой и оценивает эффект взвешенно по стратам. Так из дисперсии оценки уходит межстратовая составляющая — различия между странами или платформами больше не добавляют шума в сравнение групп. Пользователей при этом не выбрасывают и метрики не подменяют.
- Фича меняет поведение лишь у 8% пользователей, дошедших до неё. Как повысить чувствительность теста?A)Оценивать эффект только по самым активным пользователям в обеих группах сразуB)Убрать из контроля всех, кто похож на затронутыхC)Раздать фичу всем сразу, отменив контрольD)Триггерный анализ: считать эффект только на реально затронутых пользователях
показать ответ и разбор
+D)Триггерный анализ: считать эффект только на реально затронутых пользователях// разбор: Если фичу видят немногие, 92% нетронутых юзеров вносят в обе группы одинаковые нули и разбавляют эффект, топя чувствительность. Триггерный анализ считает эффект на подмножестве, реально дошедшем до фичи, — сравнивая затронутых в тесте с теми, кто дошёл бы до неё в контроле. Важно сохранить сопоставимость: триггер определяют одинаково в обеих группах.
- Что делает пост-стратификация, если по стратам заранее не рандомизировали?A)На этапе анализа корректирует случайный дисбаланс групп по ковариатеB)Отменяет результаты теста как невалидныеC)Заново перераспределяет пользователей между тестовой и контрольной группамиD)Увеличивает уровень значимости для надёжности
показать ответ и разбор
+A)На этапе анализа корректирует случайный дисбаланс групп по ковариате// разбор: Пост-стратификация применяет ту же идею на этапе анализа: разбивает выборку на страты уже после эксперимента и пересчитывает эффект взвешенно, компенсируя случайный перекос групп по ковариате (например, тестовая случайно набрала больше мобильных). Перемешивать пользователей задним числом нельзя — используются те же назначения, меняется только схема агрегации.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.