TL;DR
Synthetic Control Method (SCM) — для случаев, когда у нас есть один объект, на котором случилась интервенция, и нет готового контроля. Метод строит «синтетического двойника» этого объекта из взвешенной комбинации других, похожих объектов. До интервенции синтетический двойник повторяет траекторию реального объекта. После интервенции — расходится. Разрыв между ними и есть эффект. Метод подходит когда юнитов в treatment один или мало (категория, регион, город), а в контроле есть набор похожих юнитов, на которых интервенции не было.
SCM строится на простой идее: если в твоём анализе один treated-объект, тебе нужен один control-объект — и его лучше построить, чем найти. Найти «такую же категорию» или «такой же регион» точно не получится — каждая категория уникальна. Но взвешенную комбинацию из нескольких категорий, которая вместе ведёт себя как twin treated до интервенции, построить можно.
Что мы делаем: берём категорию которая получила интервенцию (treated unit) и набор других категорий, на которых интервенции не было (donor pool). Алгоритм SCM подбирает веса для каждого из доноров так, чтобы взвешенная сумма их траекторий до интервенции максимально совпадала с траекторией treated. Эта взвешенная сумма — синтетический контроль, twin для treated, построенный из соседей.
После интервенции синтетический контроль продолжает собственную траекторию (на него интервенция не воздействовала). Treated юнит идёт по своей траектории. Если они расходятся — этот разрыв и есть эффект интервенции. Если идут вместе — эффекта нет.
Что важно: SCM работает только когда мы можем построить хорошего twin. Если treated очень специфичен (нет похожих объектов в donor pool) — алгоритм может выдать плохое приближение и эффект окажется недостоверным.
SCM подходит когда выполняются 5 условий:
Если эти условия выполнены — SCM один из самых наглядных методов. Результат показывается на графике: реальная и синтетическая траектории. Глазом видно, есть эффект или нет.
SCM оценивает ATT — Average Treatment Effect on the Treated, эффект интервенции на конкретном treated юните. В отличие от RCT или DiD это эффект на одном объекте, а не средний эффект на популяции.
Counterfactual — это синтетический контроль. Что было бы с treated юнитом если бы интервенции не было. SCM конструирует этот counterfactual из доноров и сравнивает с реальностью.
Donor pool — набор юнитов-кандидатов из которых строится синтетический контроль. От его состава зависит качество результата. Если в donor pool попал юнит, который сам получил интервенцию или связан с treated через рынок — синтетический контроль будет смещён.
Веса (weights) — на сколько каждый донор входит в синтетический контроль. Алгоритм SCM подбирает веса так, чтобы они были неотрицательными и суммировались в 1, а взвешенная сумма траекторий доноров в pre-period максимально точно совпадала с траекторией treated. Это и есть «обучение» синтетического контроля.
RMSPE (Root Mean Squared Prediction Error) — метрика качества подгонки в pre-period. Чем ниже — тем лучше синтетический контроль повторяет treated до интервенции, тем сильнее аргумент. Высокий pre-period RMSPE значит что twin плохой и доверять разрыву после интервенции нельзя.
Чтобы SCM давал причинный эффект, нужны три условия:
В отличие от DiD, SCM не требует параллельных трендов — он сам подбирает комбинацию доноров с подходящим трендом. Это сильное преимущество. Но качество подгонки (условие 1) становится критическим: если twin плохой, SCM не работает, а сказать «параллельные тренды не требуются» — недостаточно.
SCM требует пять стандартных проверок до того как интерпретировать разрыв как причинный эффект.
| Проверка | Что смотрим | Красный флаг | Что делать |
|---|---|---|---|
| Pre-period fit (RMSPE) | Насколько синтетический контроль повторяет treated до интервенции | Большой RMSPE в pre-period, сравнимый с post-разрывом | Twin плохой — SCM ненадёжен, искать другие доноры или отказаться |
| In-space placebo | Применить SCM к каждому донору как будто он treated, посмотреть на распределение «эффектов» | Реальный эффект попадает внутрь распределения placebo | Эффект не отличим от шума — недостоверен |
| In-time placebo | Сдвинуть «дату интервенции» назад на pre-period, посмотреть на разрыв | Появляется разрыв там где интервенции не было | Дизайн ловит общую динамику, не эффект |
| Leave-one-out | Убрать каждого донора по очереди, пересчитать SCM | Эффект сильно меняется при удалении одного донора | Результат зависит от одного юнита — хрупкий |
| Permutation inference | p-value через распределение placebo-эффектов в donor pool | Реальный эффект не в верхних 5% распределения | Эффект статистически не отличим от случайного |
Стандартная практика — показывать на графике сразу две линии: реальный treated и синтетический. Pre-period они почти совпадают, post-period расходятся. Это самая наглядная визуализация в quasi-experiment литературе. Глазом видно работает дизайн или нет.
Алгоритм SCM находит веса w_j (для каждого донора j) такие,
что:
min Σ_t (Y_treated,t − Σ_j w_j · Y_donor_j,t)²
при условии: Σ_j w_j = 1, w_j ≥ 0 для всех j
Минимизация — на pre-period (до интервенции).
После того как веса найдены — синтетический контроль на
post-period:
Y_synth,t = Σ_j w_j · Y_donor_j,t для t > t_intervention
Эффект (ATT) на каждом моменте post-period:
τ̂_t = Y_treated,t − Y_synth,t
Кумулятивный эффект — сумма τ̂_t по post-period или среднее.
В январе с маркетплейса ушёл крупный селлер бытовой техники (~30% GMV категории). Аналитик хочет оценить как этот уход повлиял на GMV категории «Бытовая техника» в течение следующих 8 недель.
Treated: «Бытовая техника». Donor pool: «Электроника», «Книги», «Одежда», «Дом». Категории, не связанные с ушедшим селлером и не получившие косвенного эффекта.
Берём недельные данные GMV за 8 недель до интервенции и 8 недель после (в условных единицах):
| Неделя | Бытовая техника (treated) | Электроника | Книги | Одежда | Дом |
|---|---|---|---|---|---|
| t = −8 | 100 | 105 | 90 | 110 | 95 |
| t = −7 | 102 | 107 | 91 | 113 | 96 |
| t = −6 | 103 | 109 | 92 | 115 | 98 |
| t = −5 | 105 | 110 | 93 | 117 | 99 |
| t = −4 | 106 | 112 | 94 | 119 | 101 |
| t = −3 | 108 | 114 | 95 | 121 | 102 |
| t = −2 | 110 | 116 | 96 | 123 | 104 |
| t = −1 | 112 | 118 | 97 | 125 | 105 |
| t = 0 | (интервенция) | ||||
| t = 1 | 100 | 121 | 99 | 127 | 107 |
| t = 2 | 99 | 123 | 100 | 129 | 108 |
| t = 3 | 98 | 125 | 101 | 131 | 110 |
| t = 4 | 97 | 127 | 102 | 133 | 111 |
| t = 5 | 95 | 129 | 103 | 135 | 113 |
| t = 6 | 94 | 131 | 104 | 137 | 114 |
| t = 7 | 93 | 133 | 105 | 139 | 116 |
| t = 8 | 91 | 135 | 106 | 141 | 117 |
Алгоритм SCM находит веса доноров, минимизируя ошибку
подгонки treated в pre-period:
Электроника: 0.45
Одежда: 0.30
Дом: 0.20
Книги: 0.05
Сумма весов = 1.00, все ≥ 0. Синтетический контроль для
каждой недели — взвешенная сумма GMV доноров с этими весами.
В pre-period он почти идеально совпадает с реальной
траекторией treated (RMSPE ≈ 0.4 — очень низкий).
Что происходит после t = 0:
| Неделя | Реальная Бытовая | Синтетическая | Эффект τ̂ |
|---|---|---|---|
| t = 1 | 100 | 119 | −19 |
| t = 4 | 97 | 124 | −27 |
| t = 8 | 91 | 132 | −41 |
Видим: после ухода селлера реальная траектория падает, синтетическая продолжает расти примерно как до интервенции. Разрыв нарастает, к 8-й неделе он ≈ 41 единица — это и есть оценка эффекта ухода селлера на GMV категории.
Что важно проверить: in-space placebo. Применяем SCM к каждому донору как будто он treated, остальные — pool. Если получаем 4 «эффекта» с распределением вокруг 0 (±5 единиц), а реальный эффект −41 — он явно за пределами этого распределения. p-value (доля placebo-эффектов сильнее реального) = 0/4 = 0. Эффект значим.
Что было бы при провале pre-fit: если бы веса не давали хорошей подгонки в pre-period (RMSPE = 5 при реальном эффекте −41, и этот RMSPE сравним с post-разрывом) — мы не могли бы заявить эффект как причинный. Возможно donor pool неподходящий, нужны другие категории.
Банк запустил новую систему скоринга в одном регионе (Самарская область) с 1 марта. Хочет оценить эффект на approval rate (долю одобренных заявок) в течение 3 месяцев. Какие условия нужны для SCM в этой задаче? Что взять в donor pool, какие проверки обязательны?
SCM подходит — есть один treated юнит (Самарская область), нужен синтетический twin из похожих регионов.
Donor pool: 10–15 регионов России со схожим экономическим профилем (Татарстан, Нижегородская область, Свердловская и т.д.). НЕ включать регионы, где параллельно тестировали другие изменения скоринга или где есть spillover (мигранты из Самары работают в соседних регионах с другой логикой скоринга).
Pre-period: минимум 10–15 месяцев до 1 марта, желательно больше для подгонки.
Обязательные проверки: pre-period RMSPE — должна быть низкой относительно возможного эффекта. Permutation inference — применить SCM к каждому региону donor pool как будто он treated. Эффект на Самаре должен быть в верхних 5–10% распределения. Leave-one-out — проверить устойчивость к удалению каждого донора.
Если pre-fit плохой (например, экономика Самары слишком специфична) — SCM не работает, искать другие методы (DiD с подбором parallel-trend регионов, или временной анализ без контроля).
SCM построил синтетический контроль для города Новосибирск, где изменили surge-логику. Pre-period RMSPE = 0.8, эффект на средний чек поездки в post-period = +12%. Permutation inference: реальный эффект попадает в 88-й перцентиль распределения placebo-эффектов. Можно ли заявить causal effect? Что нужно дополнительно проверить?
Заявить уверенный causal effect — рано. Два сигнала тревоги.
Первый: permutation inference — 88-й перцентиль. Это значит что 12% placebo-эффектов в donor pool оказались сильнее реального. Стандартный порог — 90–95-й перцентиль. Эффект на грани значимости, не выше неё. Возможно это реальный эффект, возможно — артефакт.
Второй: pre-period RMSPE = 0.8. Это абсолютная цифра, нужно сравнить с шкалой post-эффекта. Если средний чек = 500 рублей, эффект +12% = 60 рублей. RMSPE 0.8 в этой шкале — отличная подгонка. Если средний чек = 100 рублей, +12% = 12 рублей, RMSPE 0.8 — это уже 7% относительной ошибки в pre-period, что сравнимо с эффектом. Шкалы должны быть сопоставимы.
Что дополнительно проверить: leave-one-out (убрать каждого донора, пересчитать — если эффект сильно меняется, он ненадёжен), in-time placebo (сдвинуть «дату интервенции» назад — если SCM показывает разрыв там где его не было, дизайн ловит общую динамику), график реальной и синтетической траекторий (плотность подгонки в pre-period).
Без этих проверок +12% — это статистика, не причинный вывод. С полным набором проверок и устойчивым результатом — можно заявлять, с оговоркой про 88-й перцентиль (граница значимости).
Augmented SCM (Ben-Michael et al.) добавляет bias correction поверх классических весов, позволяя экстраполировать за пределы convex hull. Также существуют методы с ridge penalty (regularized SCM) для стабилизации весов при многих donor units.