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 = эффект.
Алгоритм
- Собрать данные по treatment unit и pool of potential controls
- Оптимизировать веса: min RMSE pre-period между treatment и synthetic
- Применить те же веса к post-period
- Разница = 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 estimateClassic пример из литературы
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+ вопросами для собесов.