Привет, Хабр! Давайте на примере кейса с рекламой в ПВЗ 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. Значит, мы получили хороший баланс между тестом и контролем!

image2.png

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

0895F8EB-05EE-4F19-87EE-364BD8B4C1B4.jpg

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

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

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

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

Первая оценка эксперимента
Первая оценка эксперимента

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

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

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

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

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

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

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

Критерий на предпериоде для метрики Purchased Items не прошёл валидацию
Критерий на предпериоде для метрики Purchased Items не прошёл валидацию

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

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

Критерий на предпериоде для метрики GMV не прошёл валидацию
Критерий на предпериоде для метрики GMV не прошёл валидацию

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

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

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

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

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

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

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

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

Screenshot 2025-12-05 at 11.54.44.png
*An Introduction to Double/Debiased Machine Learning. Chernozhukov et al

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

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

Screenshot 2025-12-05 at 11.55.07.png
*An Introduction to Double/Debiased Machine Learning. Chernozhukov et al

Как устроен 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 раза, соответственно. 

Финальная оценка эксперимента
Финальная оценка эксперимента

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

Для метрики Purchased Items
Для метрики Purchased Items
Для метрики GMV
Для метрики GMV

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

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

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

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

Математическая постановка задачи
Математическая постановка задачи

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

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

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

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

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