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

Типовые примеры:

  • релиз раскатан на часть гео,

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

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

  • контрольной группы в виде AB теста нет, но есть группы, которые не трогали.

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

  • difference in differences (diff-in-diff, DiD),

  • синтетический контроль (synthetic control).


Чем случай с несколькими группами отличается от анализа одной метрики по времени

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

Если смотреть только на затронутую группу, то мы снова упираемся в ту же проблему: после даты изменения метрика меняется по многим причинам.

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

  • сезонность,

  • тренды,

  • внешние события.

Идея у обоих методов одинаковая: построить контрфакт (прогноз того, как метрика выглядела бы без релиза) для затронутой группы на период после изменения, используя информацию из незатронутых групп.


Метод 1. Difference in differences

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

Когда метод подходит

Нужны две временные линии метрики:

  • y_t - затронутая группа

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

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

Формула оценки эффекта

Если:

  • T_0 - период до изменения

  • T_1 - период после изменения

Тогда оценка эффекта:

\Delta_{DiD}=(\bar{y}{T_1}-\bar{y}{T_0})-(\bar{c}{T_1}-\bar{c}{T_0})
 Факт в затронутой группе и ожидаемая траектория без релиза, построенная по контрольной группе через diff-in-diff
Факт в затронутой группе и ожидаемая траектория без релиза, построенная по контрольной группе через diff-in-diff

В эквивалентной форме удобно смотреть разницу рядов:

  • d_t=y_t-c_t

Тогда:

\Delta_{DiD}=\bar{d}{T_1}-\bar{d}{T_0}

Главное допущение

Метод требует, чтобы до изменения затронутая и контрольная группы двигались согласованно. Это часто называют параллельностью трендов.

Возможной проверкой является следующий порядок действий:

  • построить d_t на периоде T_0,

  • убедиться, что там нет устойчивого движения вверх или вниз.

Если d_t до изменения заметно растет или падает, diff-in-diff может приписать это смещение эффекту релиза.

Факторы, которые могут негативно повлиять на итоговый результат

  • контрольная группа все же косвенно затронута изменением,

  • состав групп меняется во времени, например трафик перетекает из одного гео в другой,

  • сезонность у групп может отличаться из-за локальных праздников, разной структуры выходных и разных периодов отпусков ,

  • группы влияют друг на друга, например пользователи мигрируют, а рынок общий.


Метод 2. Синтетический контроль

Зачем он нужен

Diff-in-diff опирается на одну контрольную группу. Часто одной группы недостаточно:

  • каждый отдельный гео похож на затронутый только частично,

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

  • есть несколько возможных контрольных групп, и вместо выбора одной можно собрать их в комбинацию.

Синтетический контроль делает именно это: строит взвешенную комбинацию незатронутых групп, которая максимально повторяет затронутую группу на периоде до изменения.

Формализация через веса контрольных групп

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

Обозначим группы-кандидаты на контроль:

  • d_{j,t} - метрика в контрольной группе j в дату t

  • j=1..k

Мы ищем веса w_j так, чтобы на периоде до изменения сумма контрольных групп была близка к затронутой группе:

\hat{w}=\arg\min_{w}\sum_{t\in T_0}\left(y_t-\sum_{j=1}^{k}w_j d_{j,t}\right)^2+\lambda|w|_2^2
 Веса показывают, какие контрольные группы сильнее всего влияют на базовую линию. Если почти весь вес сосредоточен в одной группе, результат становится чувствительным к ее динамике
Веса показывают, какие контрольные группы сильнее всего влияют на базовую линию. Если почти весь вес сосредоточен в одной группе, результат становится чувствительным к ее динамике

Дальше прогноз для периода после изменения:

\hat{y}t=\sum{j=1}^{k}\hat{w}j d{j,t},\ t\in T_1
 Факт в затронутой группе и базовая линия без релиза, построенная как сумма метрик контрольных групп с весами, подобранными по периоду до релиза
Факт в затронутой группе и базовая линия без релиза, построенная как сумма метрик контрольных групп с весами, подобранными по периоду до релиза

И эффект по времени:

effect_t=y_t-\hat{y}_t

Дальше можно считать те же агрегаты, что и в первой статье:

  • средний эффект,

  • накопленный эффект,

  • относительный эффект.

Например накопленный эффект:

\Delta_{cum}=\sum_{t\in T_1}(y_t-\hat{y}_t)

Что дает этот подход

  1. Более устойчивый прогноз метрики
    Если одна контрольная группа слабо похожа на затронутую по динамике до релиза, можно составить комбинацию нескольких контрольных групп со своими весами. Нередко такая "смесь" повторяет историю затронутой группы заметно точнее.

  2. Интерпретация через веса
    Веса показывают, какие контрольные группы сильнее всего влияют на прогноз метрики без релиза. Если почти весь вес оказался на одной группе, результат становится чувствительным именно к ее поведению.

Частые ошибки

  • контрольные группы частично затронуты тем же изменением, пусть и не напрямую;

  • контрольные группы могут иметь собственные события после даты релиза: локальные акции, всплески маркетинга, изменения в каналах, сбои или регуляторные ограничения. Если такие события есть, они искажают прогноз метрики без релиза для затронутой группы;

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


Как выбирать метод

  • есть один хороший контроль, который до изменения ведет себя похоже на затронутую группу, тогда diff-in-diff часто достаточно;

  • если ни одна отдельная контрольная группа не повторяет динамику затронутой группы до релиза достаточно точно, имеет смысл перейти к синтетическому контролю: он строит комбинацию из нескольких контрольных групп с подобранными весами и обычно дает более точную базовую линию;

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


Основные проверки перед выводами

1) Повторение периода до изменения

Для diff-in-diff:

  • стабильность d_t на T_0

Для синтетического контроля:

  • визуальное совпадение y_t и \hat{y}_t на T_0

  • метрики качества на T_0, например R^2 и RMSE

2) Чувствительность к выбору доноров

Если в синтетическом контроле убрать одну контрольную группу и результат резко меняется, значит оценка нестабильная.

3) Плацебо проверки

Полезно делать ложные даты изменения на периоде T_0 и смотреть, насколько часто метод дает эффекты сопоставимого масштаба. Мы выбираем несколько дат внутри периода до релиза и делаем вид, что релиз произошел в эти даты. Для каждой такой ложной даты пересчитываем эффект и получаем распределение эффектов, которые метод способен выдавать просто из-за шума и случайных колебаний. Если реальный эффект не выделяется на фоне этого распределения, результат лучше интерпретировать ос��орожно.


Краткое резюме

  • Когда изменение затронуло не всех, полезно использовать контрольные группы: географии, сегменты или кластеры, на которые релиз не влиял;

  • Diff-in-diff подходит, если есть одна контрольная группа с похожей динамикой до релиза и нет явного смещения разницы на периоде до релиза;

  • Синтетический контроль подходит, если одной контрольной группы недостаточно и нужно собрать комбинацию нескольких контрольных групп, каждая со своим весом, чтобы точнее повторить историю до релиза;

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


Рассмотренные в этих двух статьях подходы помогают оценить эффект продуктового изменения в ситуации, когда AB теста нет, но решение все равно нужно принимать. Мы разобрали два наиболее частых случая, которые встречаются в данных:

  • когда есть одна метрика по продукту во времени - строим ожидаемую траекторию метрики без релиза по сопутствующим факторам и сравниваем ее с фактическими значениями;

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

В обоих случаях надежность результата определяется не названием метода, а тем, насколько аккуратно сделаны проверки:

  • базовая линия должна хорошо воспроизводить поведение метрики до релиза;

  • вывод не должен расходиться при изменении границ периода до релиза и после релиза, а также при разумных изменениях набора контрольных групп;

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