Привет, Хабр! Давайте на примере кейса с рекламой в ПВЗ Wildberries разберемся в двойном машинном обучении (DML) и методе псевдорандомизации (PSM). Вы в деле?

Меня зовут Платон Попов, я дата-аналитик в команде A/B-платформы RWB. В нашей команде я занимаюсь задачами из области причинно-следственного анализа (Causal Inference) и методами понижения дисперсии. 

В этой статье расскажу о самом кейсе и объясню, почему для него не подошёл классический t-тест. Покажу, как мы учитывали спутывающие факторы с помощью Propensity Score Matching (PSM), почему этого оказалось недостаточно и почему в итоге перешли к Double Machine Learning (DML). В конце сравним результаты и обсудим наш план выкатки метода оценки нерандомизированных экспериментов в промышленный масштаб.

Какую рекламу видит аудитория в ПВЗ

С одной стороны были посетители пунктов выдачи, чьи интересы мы считывали. С другой стороны — продавцы, которые задавали таргеты для кампании и выбирали рекламные материалы для показа покупателям. С помощью механизма сопоставления (Matcher) мы сравнивали интересы пользователей с выбранными таргетами и показывали подходящую рекламу на экранах в ПВЗ.

Наша гипотеза: таргетированная реклама должна увеличивать количество купленных товаров и GMV на пользователя.

Почему нельзя ограничиться t-тестом?

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

Первая проблема — сетевые эффекты. Пользователи могли посещать ПВЗ с рекламными экранами и без одновременно. А также в контроль могут попасть пользователи, которые видели чужую рекламу. Например, ожидая своей очереди, человек мог заметить рекламный ролик и подвергнуться воздействию (Treatment) на экране, и контрольная группа уже переставала быть «чистой».

Мы боролись с сетевыми эффектами двумя способами.

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

  • в тест попадали пользователи, которые видели таргетированную рекламу,

  • в контроль — пользователи, посетившие ПВЗ в дни, когда не было рекламы.

Следующая проблема — конфаундеры. Это спутывающие факторы, способные влиять и на получение воздействия, и на исход: пол, возраст, покупательская способность и т. д.

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

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

Решение — Propensity Score Matching (PSM), или метод псевдорандомизации. Идея метода достаточно проста: берём все фичи X, которые могли бы спутывать эффект → выражаем их с помощью условной вероятности попасть в Treatment (Propensity Score, PS, e(x)) → оцениваем эту вероятность с помощью модели, например, логистической регрессии (Logistic Regression) → контролируем конфаундеры через оцененную условную вероятность попасть в Treatment.

Для оценки эффекта применялся Inverse Propensity Weighting (IPW), где каждому наблюдению присваивается вес, обратно пропорциональный вероятности попасть в Treatment (PS).

\begin{align} &E[Y|X, T=1] - E[Y|X, T=0] = \notag \\ &= E\left[\frac{Y}{e(x)}\middle|X, T=1\right]P(T) - E\left[\frac{Y}{(1 - e(x))}\middle|X, T=0\right](1 - P(T))\end{align}

Таким образом, пользователи из тестовой группы с низким значением PS получали больший вес, поскольку были больше похожи на пользователей из контроля. Аналогично взвешивались наблюдения контрольной группы.

Далее мы провели диагностику весов. В первую очередь сравнили баланс признаков до и после взвешивания по стандартизированной разнице среднего (SMD) и увидели, что разница в наблюдениях до взвешивания составила > 0,1. 

\mathrm{SMD} = \frac{\overline{x}_1 - \overline{x}_2}{S}

Это значение считается золотым стандартом в литературе и говорит о существенных различиях между группами. После взвешивания показатели для всех признаков оказались ниже 0,1. Значит, мы получили хороший баланс между тестом и контролем!

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

Первые результаты с IPW

Помните целевые метрики из нашей гипотезы? Мы получили по ним статистически значимый прирост! Итоговый эффект выглядит так:

  • количество купленных товаров (Purchased Items) выросло на 6,03%,

  • GMV выросла на 10,87%.

При этом простое сравнение теста и контроля переоценивало эффект в 3–5 раз, что ещё раз подтвердило: без методов учёта конфаундеров игра не стоит свеч.

Кажется, пора передавать результаты бизнес-заказчику. Но мы решили проверить, насколько этой оценке вообще можно доверять.

Валидация оценки

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

  • доля ложноположительных результатов (FPR),

  • распределение z-value,

  • распределение p-value.

Оказалось, что валидацию метод не проходит. Доля ложноположительных результатов не контролируется на уровне 5%, то есть — используя этот метод оценки мы ошибаемся чаще, чем предполагаем. Равномерность p-value также нарушается.

Аналогичные результаты мы получили и для метрики GMV.

Это лучше не показывать заказчику...

Как наиболее вероятную причину ошибки мы определили сложность выбор модели, которая подбирает веса для PS. Но существует ли фреймворк, который менее чувствителен к подбору модели?

Наш ответ — Double Machine Learning!

Два ключевых свойства DML:

  1. Neyman Orthogonality. Для достаточно больших выборок итоговая оценка среднего эффекта воздействия (ATE) менее чувствительна к подбору модели. Doubly Robust Estimator (DR), о котором я буду говорить далее, удовлетворяет этому свойству и позволяет тратить меньше ресурсов на подбор хорошей модели. В то время как IPW, о котором мы говорили ранее — нет.

  2. Cross-fitting. Оценка эффекта включает в себя два этапа: оценка модели и самого эффекта. Если использовать одну выборку, ошибки при оценке модели смещают оценку эффекта. Избежать этого помогает процедура Cross-fitting. Модель оценивается на n-1 фолде, а оценка эффекта вычисляется на оставшемся фолде. Повторяем эту процедуру для каждого фолда.

Так мы избавляемся от влияния ошибок обучения на итоговую оценку эффекта и используем все имеющиеся данные.

Почему DML работает лучше*

Вот как это работает в теории. Мы сэмплируем АТЕ для двух методов оценики IPW и DR и получаем, что для IPW истинный эффект в среднем значительно завышен, а для DR соответствует ожидаемому результату. В среднем ноль.

Аналогично при анализе распределения т-статистики ATE. Для IPW распределение остаётся смещённым независимо от применения Cross-fitting. Тогда как DR с Cross-fitting позволяет получить близкое к нормальному распределение.*

Как устроен Doubly Robust Estimator

Левая часть уравнения соответствует наблюдениям в тесте, правая — в контроле. В методе оценивания используются две вспомогательные функции:

  • модель исхода μ,

  • модель PS p.

 \mathrm{ATE} = \frac{1}{N} \sum \left( \frac{T_i(Y_i - \hat{\mu}_i(X_i))}{\hat{P}(X_i)} + \hat{\mu}_i(X_i) \right) - \frac{1}{N} \sum \left( \frac{(1 - T_i)(Y_i - \hat{\mu}_0(X_i))}{1 - \hat{P}(X_i)} + \hat{\mu}_0(X_i) \right)

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

 \hat{E}[Y_1] = \frac{1}{N} \sum \left( \frac{T_i(Y_i - \hat{\mu}_1(X_i))}{\hat{P}(X_i)} + \hat{\mu}_1(X_i) \right)

Предположим, что модель для μ₁ задана корректно, а для p₁ нет. Тогда математическое ожидание произведения Treatment на остатки модели равно нулю 

E[T_i(Y_i - \hat{\mu}_1(X_i))] = 0.

Это происходит потому, что рассматриваются только наблюдения из тестовой группы, а ошибки модели имеют нулевое среднее. Тогда эта часть уравнения обращается в ноль и остаётся только корректная оценка μ₁. Супер!

Эта же логика работает для обратного случая, когда модель для p₁ задана корректно, а для μ₁ нет. Перегруппируем выражение для оценки среднего для наблюдений из тестовой группы. Получим,

\hat{E}[Y_1] = \frac{1}{N} \sum \left( \frac{T_i Y_i}{\hat{P}(X_i)} - \left( \frac{T_i - \hat{P}(X_i)}{\hat{P}(X_i)} \right) \mu_1(X_i) \right).

Если p₁ специфицирована правильно, математическое ожидание остатков также равно нулю

E[T_i - \hat{P}(X_i)] = 0.

Правая часть уравнения обращается в ноль, и остаётся только левая, которая по предположению верна. Супер х2!

Оцениваем результаты DML

Все модели мы оценивали с помощью Random Forest из коробки с теми же фичами, которые ранее использовались для оценки IPW.

Мы вновь получили статистически значимый положительный эффект. Точно так же, как и в теории эффект и T-stat в DR оказались меньше, чем в IPW в 2 раза и в 2–4 раза, соответственно. 

После этого мы повторили процедуру валидации. Обе метрики успешно прошли проверку!

Как применять DML в промышленной среде

Шаг 1. Агрегация размеченных данных с теста и предпериода. Собираем метрики и данные по конфаундерам у пользователей и размечаем их по группам на тест и контроль

Шаг 2. Обучение множества моделей с разными гиперпараметрами. Методом перебора гиперпараметров определяем модель, которая минимизирует MDE, то есть позволяет отлавливать наименьший эффект.

Шаг 3. Выбор модели, которая даёт валидные результаты. Проводим валидацию на данных предпериода, и из всех валидных моделей выводим в прод ту, которая дает наименьший MDE.

DML против PSM: кто побеждает в нашем кейсе

Оба метода требуют разметить группы, большое количество ковариат и обучить модели. Для нас наиболее подходящим оказался DML.

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

Double Machine Learning менее чувствителен к подбору модели и легче проходит валидацию. В нерандомизированных экспериментах даёт результат быстрее и надёжнее, чем в PSM.

Вам приходилось сталкиваться с этими подходами в стандартных A/B-тестах и нерандомизированных экспериментах? Расскажите в комментариях!