В продуктовых экспериментах нередко возникает следующая ситуация: бизнесу важна долгосрочная или малочувствительная метрика, но оценить эффект на такие метрики в рамках короткого A/B-теста сложно.
Например, нам могут быть интересны метрики:
длинный retention (долго ждать)
конверсия в бронирование (редкая, а потому малочувствительная метрика)
LTV (требует длинного окна наблюдения)
...
Но эксперимент-то хочется завершить за две-три недели. Что делать?
Да, где-то может помочь CUPED, стратификация и другие методы снижения дисперсии, но по разным причинам они не всегда решают проблему. В частности, они не могут ускорить появление метрики, которая формируется только через несколько месяцев, и не всегда дают достаточный выигрыш для достижения редких целевых метрик.
Что тогда обычно делают? Правильно! Находят proxy-метрики – более ранние и более чувствительные показатели, по которым пытаются судить о будущем изменении North Star метрик (NSM).
Кстати, меня зовут Артем Пономарев, я занимаюсь анализом данных, и судя по моей практике, в продукте довольно регулярно возникает потребность в поиске таких proxy-метрик, что в общем-то объяснимо, ведь хорошие бизнесовые метрики обычно длинные и нечастые :)
Допустим, мы решили, что хотим изменить логику пуш-уведомлений в продукте.
Уже через неделю без особых проблем можно измерить:
конверсию в открытие пушей
отключения уведомлений
клики по кнопке "Купить"
Но настоящий интерес представляет, например, конверсия в покупку в течение 90 дней.
Поэтому хотелось бы построить какой-то индекс по типу:
Если такой proxy-индекс корректен, в новом эксперименте можно быстрее измерить эффект на него и получить ранний сигнал о возможном долгосрочном результате North Star метрики.
Но здесь возникает вопрос:
Как убедиться, что экспериментальные изменения коротких метрик действительно отражают экспериментальные изменения North Star?
Хорошие proxy-метрики должны быть:
более чувствительными: то есть мы хотим, чтобы они прокрашивались стабильно быстрее, чем наши North Star метрики
устойчиво отражать направление и величину долгосрочного эффекта
не поощрять локальные улучшения, которые вредят долгосрочному эффекту
сохранять связь с North Star-метрикой для новых экспериментов
В этой статье я хочу фактически разобрать работу от Netflix Learning the Covariance of Treatment Effects Across Many Weak Experiments, в которой авторы делятся, как использовать историю множества A/B-тестов для построения линейного proxy-индекса, почему наивная регрессия по оцененным эффектам может обмануть и как отделить настоящую связь экспериментальных эффектов от общего статистического шума.

Идея
Стараюсь не отставать от зумерских трендов (я не старый!), поэтому ГАЗ обсудим основную идею, чтобы дальше было проще уложить все в голове.
Основная идея простая:
собрать результаты множества прошлых A/B-тестов
посмотреть, как каждый из них изменил короткие метрики
посмотреть, как тот же эксперимент изменил долгосрочную метрику
научиться по эффекту на короткие метрики предсказывать эффект на длинную метрику
Тогда в новом эксперименте можно быстро оценить эффект на этот proxy-индекс и использовать его как ранний сигнал долгосрочного результата.
Но откуда взять веса 0.4, 0.8, -1.2?
Почему не норм обучить модель на пользователях?

Первое, что приходит в голову – а давайте обучим модель, которая на основе данных по пользователям, используя другие метрики, предсказывает нашу метрику. Вот и получится какой-то вектор с коэффициентами влияния каждой метрики на North Star.
Коротко: это плохой вариант, потому что модель отвечает на вопрос: «Кто, судя по своему поведению, скорее совершит покупку?» А нам нужен ответ на другой вопрос: «Если продуктовый эксперимент увеличит число поисков или кликов, вырастет ли из-за этого число покупок?»
Подробнее: пользователи с высоким намерением покупки, как правило, чаще запускают поиски, чаще кликают и в целом более активны. Но из этого не следует, что мы должны искусственно увеличивать поиски или клики в надежде, что увеличит вероятность покупки. Причем довольно легко представить ситуацию, когда дополнительные клики или поиски будут снижать вероятность покупки.
А что тогда?
Идея-то верная! Но объектом в нашей выборке для модели должен быть эксперимент. Авторы предлагают анализировать множество исторических A/B экспериментов.
Пусть у нас есть множество исторических тестов, и для каждого из них существует:
Истинный эффект на короткие proxy-метрики
Истинный эффект на долгосрочную North Star метрику:
Здесь соответствует treatment,
— control, а
означает, что мы рассматриваем эксперимент
.
Например,
Эксперимент |
Эффект на поиски |
Эффект на клики |
Эффект на конверсию в покупку в течение 90 дней |
A |
+2% |
+1% |
+0.4% |
B |
-1% |
0% |
-0.2% |
C |
+3% |
+2% |
+0.7% |
D |
+2% |
-1% |
0% |
Мы хотим найти комбинацию proxy-метрик, которая дает приближенный эффект для North Star метрики:.
Но здесь есть проблема: истинные эффекты неизвестны, в экспериментах мы получаем лишь оценки эффекта со случайной ошибкой:
Более того, ошибки разных метрик связаны между собой: представим, что на уровне пользователей proxy-метрики и North star метрика положительно коррелируют.
Например, активные пользователи одновременно:
делают больше кликов
приносят больше долгосрочной выручки
В одном эксперименте в treatment случайно может попасть чуть больше активных пользователей. Тогда одновременно будут завышены обе оценкии
.
А в другом тесте похожий случайный перевес окажется в control, и обе оценки будут занижены.
В результате между оцененными эффектами появится положительная связь, даже если между истинными причинными эффектами связи нет:
Первая часть в формуле – нужная нам связь истинных экспериментальных эффектов, вторая – ковариация общего выборочного шума. Наивная линейная модель смешивает их.
Еще больше исторических экспериментов не решают проблему
Логично предположить, что если мы соберем еще больше – сотни A/B-тестов, то случайный шум усреднится. Но при фиксированном размере каждого эксперимента, наивная оценка ковариации сходится не к истинной ковариации эффектов, а к сумме истинной ковариации и ковариации ошибок оценивания.
То есть бОльшее число экспериментов позволяет более точно оценить смещенную зависимость, но чтобы шум исчез сам, необходимо увеличивать размер каждого отдельного эксперимента до примерно бесконечного.
Искажение может быть сильным
Причем такое искажение может быть очень сильным, настолько, что наивный анализ способен получить даже неправильное направление связи.
Как мы уже обсуждали выше, например, изменение интерфейса может повысить кликабельность с помощью слишком агрессивных призывов к действию или вводящих в заблуждение элементов. Число кликов вырастет, но клики станут менее осмысленными, а итоговое число покупок может снизиться.
То есть:
среди пользователей больше кликов связано с бОльшим числом покупок
но эксперименты, сильнее увеличивающие клики, могут в среднем сильнее снижать покупки

На изображении слева верхний график показывает истинную отрицательную связь эффектов на proxy-метрики и North Star метрики. В центре – положительная связь этих метрик на уровне пользователей. Снизу – наблюдаемая связь оценённых эффектов, в которой пользовательский шум перекрыл настоящий сигнал.
Это одна из главных причин, почему пользовательские корреляции и обычная регрессия по оцененным эффектам опасны для создания proxy-метрик.
Решение – восстанавливать ковариацию истинных эффектов. Как это делать?
JIVE
Jackknife Instrumental Variables Estimation использует leave-one-out подход.
Мы по очереди исключаем каждого пользователя и пересчитываем эффект эксперимента без него. После этого используем данные исключенного пользователя отдельно. Такой прием помогает убрать искусственную связь, возникающую из-за того, что одни и те же наблюдения участвуют сразу в обеих частях расчета.
Преимущество JIVE: метод допускает, что структура пользовательского шума различается между экспериментами и группами
Недостаток: нужны данные на уровне отдельных пользователей для всех исторических тестов + сами вычисления могут быть дорогими.
LIML
LIML – метод из анализа инструментальных переменных, предназначенный для ситуаций, когда доступно много слабых и шумных источников причинной вариации.
В нашей задаче такими источниками выступают исторические эксперименты. Каждый из них причинно меняет короткие метрики, но обычно совсем немного, поэтому наблюдаемый эффект может быть сопоставим со случайной ошибкой его оценки.
В отличие от наивной регрессии, LIML учитывает, что эффекты экспериментов и на proxy-метрики, и на долгосрочную метрику North Star измерены с ошибкой, и это помогает не принять общий статистический шум за настоящую связь между эффектами.
LIML может давать более стабильные оценки, особенно когда отдельные эксперименты относительно небольшие или их эффекты слабы. Но у метода есть важное ограничение: он подходит для построения proxy, только если влияние эксперимента на North Star полностью проходит через выбранные короткие метрики:
Если эксперимент влияет на долгосрочный результат еще и через другие механизмы, не включенные в proxy-индекс, LIML может оценить не ту зависимость, которая нужна для прогнозирования долгосрочного эффекта.
Total Covariance
Наиболее практичный метод из статьи.
Вспомним, в чем проблема: наблюдаемая связь между оценками экспериментальных эффектов состоит из двух частей:
настоящей связи между эффектами
дополнительной связи, возникшей из-за случайных ошибок их оценки
Total Covariance пытается отделить одно от другого.
Для этого авторы оценивают, какую часть наблюдаемой ковариации можно объяснить обычным пользовательским разбросом и конечным размером экспериментальных групп, а затем эту часть вычитают:
Здесь:– наблюдаемая ковариация оцененных эффектов,
– ковариация метрик на уровне пользователей,
– число пользователей в одном сбалансированном эксперименте,
– оценка ковариации истинных эффектов после удаления шума.
* В статье эта формула приводится для упрощённого случая одинаковых сбалансированных экспериментов.
Другими словами:
Мы берем наблюдаемую связь между эффектами экспериментов и вычитаем ту ее часть, которая могла появиться просто из-за случайного состава экспериментальных групп.
После такой коррекции авторы рассчитывают веса коротких метрик. В результате получается единый proxy-индекс, например: поиски с положительным весом + клики с положительным весом - отключения уведомлений с отрицательным весом.
Соответственно, в новом A/B-тесте нужно измерить эффекты на эти proxy-метрики и объединить их с найденными весами. Получившееся значение используется как оценка возможного долгосрочного эффекта на North Star.
Что именно здесь обучается
Total Covariance – это не отдельная предиктивная модель. Метод сначала восстанавливает очищенную от выборочного шума связь между эффектами исторических экспериментов, а после этого рассчитываются коэффициенты линейного proxy-индекса:
Здесь– эффект эксперимента
на North Star,
– вектор эффектов этого эксперимента на proxy-метрики,
– веса proxy-индекса. Каждый коэффициент показывает, как экспериментальное изменение соответствующей proxy-метрики связано с долгосрочным эффектом при учете остальных метрик.
Веса находятся аналитически по ковариационной матрице экспериментальных эффектов.
Ограничения Total Covariance
У метода есть два ограничения.
Статистическое: чтобы использовать одну общую поправку на шум, пользовательские распределения и взаимосвязи метрик должны быть достаточно похожи между экспериментами.
Причинное: чтобы применять найденные веса в новом эксперименте, механизм нового теста должен быть похож на механизмы исторических тестов.
Статистическое ограничение
Для корректного вычитания шума нужны похожие аудитории в экспериментах (или точнее – не слишком разные). Представим две аудитории:
В эксперименте A участвуют активные пользователи:
многие делают поиски;
клики часто заканчиваются покупкой;
profit имеет большой разброс
В эксперименте B участвуют новые пользователи:
большинство пока ничего не ищет;
клики редкие;
связь кликов с покупками слабее
Тогда случайный шум в этих экспериментах устроен по-разному. Если применить к ним одну общую поправку, она может вычесть слишком много шума из одного теста или вычесть слишком мало из другого. Поэтому перед применением Total Covariance нужно проверить, насколько стабильны дисперсии и корреляции выбранных метрик между экспериментами и группами. Если они сильно различаются, лучше оценивать поправку отдельно для разных типов экспериментов.
При этом эффекты, наоборот, желательно должны быть достаточно разнообразными.
Причинное ограничение
Например, мы обучили proxy на экспериментах с изменением логики отправки пушей, а затем хотим применить эту метрику к тесту с поисковой выдачей. Рост сессий в этих двух случаях может означать разное:
после полезного уведомления пользователь вернулся из-за новой ценности
после изменения выдачи пользователь сделал больше сессий, потому что не смог найти подходящий билет
после агрессивной коммуникации пользователь открыл приложение, но потом отключил уведомления
Proxy-метрика одна и та же, но путь к North Star разный, поэтому лучше строить proxy для похожего класса продуктовых воздействий.
Когда proxy действительно заменяет North Star
Даже если мы идеально оценили связь между экспериментальными эффектами, остается вопрос:
Все ли способы влияния продукта на North Star отражены в выбранных proxy-метриках?
Весь эффект проходит через короткие метрики
Мы предполагаем, что продуктовая механика влияет на долгосрочную метрику только через выбранные proxy-метрики. Очевидно, что если это так, то эффект на правильно взвешенный proxy-индекс будет всегда совпадать с изменением North Star метрики.
Но это довольно сильное предположение, не правда ли? ?
Поэтому перейдем к более прагматичному варианту:
Часть эффекта проходит мимо proxy-метрик
Конечно, в реальности почти всегда мы не можем объяснить изменение North Star полностью через наши выбранные proxy-метрики. Например, более частые пуши в продукте могут одновременно:
увеличить число полезных сессий
раздражать пользователей и повышать вероятность отключения уведомлений
Если в прокси-метрики входит метрика числа полезных сессий, но не входит метрика отключения уведомлений, то наш получившийся proxy-индекс увидит только положительную часть эффекта, а общий долгосрочный эффект состоит из двух частей:
Поэтому возможна ситуация:
proxy-метрики показывают положительный эффект
настоящая North Star снижается
=> proxy-метрики безопаснее использовать вместе с защитными метриками: отключениями уведомлений, удалениями приложения, жалобами и другими возможными негативными последствиями.
Предположение INSIDE
Как тогда вообще оценить вклад коротких метрик, если часть эффекта проходит мимо них?
Авторы вводят предположение INSIDE. Оно означает следующее:
Эксперименты, которые сильнее изменяют короткие метрики, не должны одновременно систематически создавать более сильный неучтенный вред или пользу
Например, эксперименты, которые сильнее увеличивают полезные сессии, не должны из-за какого-то другого механизма одновременно сильнее раздражать пользователей.
Если же неучтенные эффекты не связаны с изменением proxy-метрик, они ведут себя как случайный остаток. Тогда Total Covariance все еще может оценить, какая часть долгосрочного эффекта в среднем связана с выбранными метриками.
Но это предположение нельзя полностью доказать по тем же данным. Его можно только сделать более правдоподобным:
не смешивать слишком разные типы экспериментов
включать в proxy-метрики важные положительные и отрицательные пути
проверять получившийся индекс на новых экспериментах
продолжать периодически измерять настоящую North Star
Если же более сильный рост proxy-метрики всегда сопровождается более сильным скрытым вредом, INSIDE нарушается, и метод уже не сможет корректно разделить эти два эффекта.
Что делать, если связь нелинейная
До этого момента мы предполагали линейную связь: условно, каждая дополнительная полезная сессия одинаково влияет на долгосрочный результат.
На практике это часто не так:
первая полезная сессия может сильно повысить вероятность возврата
пятая добавит уже немного
двадцатая может означать, что пользователь так и не смог решить свою задачу
То есть одна и та же метрика может быть полезной на одном уровне и почти бесполезной или даже негативной на другом.
Авторы отмечают, что большинство продуктовых экспериментов создает небольшие изменения, а на небольшом участке гладкую нелинейную зависимость обычно можно приблизить прямой, поэтому линейные прокси можно интерпретировать так:
Это приближенная оценка того, как North Star реагирует на небольшие изменения коротких метрик, похожие на те, которые создавали исторические эксперименты
Что показали симуляции
Авторы сравнили три подхода:
наивную регрессию по оцененным эффектам экспериментов
LIML
Total Covariance
Когда весь долгосрочный эффект проходил через выбранные proxy-метрики, LIML и Total Covariance работали значительно точнее наивной регрессии. При небольших размерах экспериментов LIML давал более стабильные оценки.
Затем авторы добавляли другие пути влияния продукта на North Star метрику, то есть эффекты, которые не отражались в выбранных прокси.
В этом случае:
наивная регрессия по-прежнему оставалась смещенной (еще бы!)
LIML начинал давать очень большие ошибки
Total Covariance сохранял корректную оценку связи при выполнении предположения INSIDE
Вывод:
LIML может быть эффективнее при сильном предположении, что весь долгосрочный эффект проходит через proxy-метрики. Total Covariance устойчивее в более реалистичной ситуации, когда у продукта могут быть и другие пути воздействия.
При этом даже Total Covariance не превращает proxy-метрики в полную замену North Star метрики: если часть эффекта проходит мимо выбранных метрик, индекс ее, конечно, не увидит.
Как это могло бы работать на практике
Предположим, мы хотим построить proxy-индекс для прибыли на пользователя за 90 дней.
Затем формируем набор коротких показателей, которые отражают разные возможные пути к этой метрике. Например:
число поисков за 7 дней
полезные сессии за 7 дней
клики за 14 дней
удаления приложения
прерванные сессии
Помним, что в набор должны входить не только положительные действия, но и возможные негативные последствия продукта.
Дальше процесс выглядит так:
Собираем исторические A/B-тесты с одинаковыми определениями метрик и сопоставимыми аудиториями.
Для каждого эксперимента оцениваем эффекты на proxy-метрики и на North Star.
Рассчитываем наблюдаемую связь между этими эффектами.
Total Covariance вычитает ту часть связи, которая объясняется случайными ошибками оценивания.
На очищенных данных рассчитываем веса коротких метрик и строим единый proxy-индекс.
Индекс проверяем на экспериментах, которые не участвовали в его обучении.
Продолжаем периодически замерять North Star и защитные метрики напрямую.
Как выбирать метрики?
Ха! Ответа на этот вопрос в статье почти нет.
Но общепринятая стратегия следующая
Изначально формируем широкий список кандидатов на основе экспертности и продуктовой логики
Убираем очень похожие метрики
Проверяем, что исторические эксперименты действительно по-разному влияли на отфильтрованный набор метрик
Применяем Total Covariance и строим proxy-индекс на нескольких разумных наборах метрик
Проверяем каждый набор на исторических экспериментах, которые не участвовали в обучении
Оставляем минимальную комбинацию, которая стабильно предсказывает направление и величину интересующей North Star
Новую метрику в proxy-индекс имеет смысл добавлять, когда она улучшает прогноз поверх уже выбранных показателей.
Вывод
Самая сложная часть – найти комбинацию proxy-метрик, экспериментальные изменения которой позволяют судить об экспериментальном изменении долгосрочной North Star.
Обычной пользовательской корреляции для этого недостаточно. Даже наивная регрессия по результатам исторических A/B-тестов может ошибаться, потому что наблюдаемые эффекты содержат общий случайный шум.
Total Covariance пытается оценить и вычесть второй компонент, но даже идеально построенный proxy-индекс не становится автоматически полной заменой North Star. Для этого все важные пути влияния продукта на North Star должны отражаться в выбранных proxy-метриках. Поэтому proxy-индекс лучше воспринимать как более быстрый сигнал о возможном долгосрочном эффекте, основанный на истории экспериментов. Такой сигнал, конечно, полезен для более быстрых решений, но требует регулярной проверки на новых экспериментах и периодического измерения North Star напрямую.
Очень важное сообщение: экспериментируйте! И обязательно делитесь результатами своих экспериментов ?
А еще я пишу про аналитику и данные в Telegram-канал, заходите почитать!