Synthetic control простыми словами

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

Запустили маркетинговую кампанию в одном городе — как измерить эффект? DiD требует «похожий» контроль-город, но похожего часто нет. Synthetic control строит идеальный синтетический контроль из взвешенной комбинации других городов.

В marketplace / delivery / fintech aналитике synthetic control — state-of-the-art для geo-experiments.

Короткое объяснение

Вместо одного control-города строим weighted combination нескольких, так чтобы пред-периодные метрики максимально совпадали с treatment-городом.

Синтетический контроль(t) = w1 × City1(t) + w2 × City2(t) + ...

Веса w1, w2, ... минимизируют расхождение в pre-period.

Пример

Treatment: Москва получила фичу в январе.

Кандидаты control: Екатеринбург, Казань, Новосибирск.

В pre-period Ekb/Kzn/Nsk отдельно не матчатся, но комбинация: 0.5×Екб + 0.3×Казань + 0.2×Нск идеально повторяет Moscow trend.

Post-period: смотрим разницу Moscow vs synthetic control = эффект.

Алгоритм

  1. Собрать данные по treatment unit и pool of potential controls
  2. Оптимизировать веса: min RMSE pre-period между treatment и synthetic
  3. Применить те же веса к post-period
  4. Разница = treatment effect

Преимущества vs DiD

DiD

  • Требует exact parallel trends
  • Один control

Synthetic control

  • Строит идеальный control
  • Веса на основе pre-period
  • Лучше для одной treatment unit

В Python

from syntheticcontrol import SyntheticControl

sc = SyntheticControl(
    df=data,
    unit='city',
    time='date',
    treatment_unit='Moscow',
    treatment_date='2026-01-01',
    outcome='orders'
)
sc.fit()
sc.plot()  # показывает treatment vs synthetic
print(sc.effect)  # numeric estimate

Classic пример из литературы

California tobacco tax (1988):

В 1988 году в California ввели налог на сигареты. Какой эффект на потребление?

Synthetic control: веса других штатов → построен «синтетический California без налога». Разница = эффект налога.

Работа Abadie et al. (2010) — классика.

Placebo test

Проверка валидности:

Применить synthetic control к non-treated unit. Если видите «эффект» — метод не работает.

Или: применить к treatment в pre-period, где эффекта быть не должно.

Ограничения

Один treated unit

Классический synthetic control — одна единица. Расширения существуют.

Pre-period нужен длинный

Иначе weights могут быть overfit.

Similar units must exist

Если Moscow уникален и нет похожих — synthetic не построится хорошо.

Расширения

Generalized Synthetic Control

Работает с multiple treated units.

Augmented Synthetic Control

Комбинирует с regression для лучшего fit.

Matrix Completion

ML-based, автоматически learning.

Когда использовать

  • Geo-experiments с одним treated unit
  • Policy evaluation
  • Marketing experiments на уровне регионов
  • Нельзя randomize

На собесе

«Что такое synthetic control?» Построение «идеального контроля» через weighted average других units.

«Отличие от DiD?» DiD — один control, SC — weighted combination.

«Когда использовать?» Один treated unit, нельзя A/B, есть pool похожих не-treated.

«Проверка валидности?» Placebo tests на не-treated units.

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

Overfitting pre-period

Слишком много units в pool → веса подстраиваются под шум.

Короткий pre-period

Вес may не отражать true trends.

Игнорирование spillover

Если treatment affects controls — SC не работает.

Связанные темы

FAQ

Какие библиотеки?

pysyncon, syntheticcontrol в Python. Synth в R.

Сколько pre-periods?

Минимум 20, желательно 50+.

Веса negative?

В классическом SC — только non-negative, сумма = 1. Augmented — negative можно.


Тренируйте causal — откройте тренажёр с 1500+ вопросами для собесов.