Короткий ответ
Разница разностей (DiD) сравнивает изменение метрики до/после между затронутой и незатронутой группой; синтетический контроль строит взвешенную комбинацию контрольных единиц, имитирующую поведение затронутой до вмешательства; инструментальные переменные используют внешний фактор, влияющий на причину, но не напрямую на следствие — каждый метод требует своих, зачастую непроверяемых напрямую допущений, и единственно верного выбора метода без рандомизации не существует.
Как это работает подробнее
DiD предполагает "параллельные тренды" — без вмешательства метрики затронутой и контрольной группы менялись бы одинаково; синтетический контроль ослабляет это требование, подбирая веса для комбинации нескольких контрольных единиц так, чтобы синтетическая копия хорошо повторяла предысторию затронутой единицы; инструментальные переменные решают проблему, когда есть подозрение на обратную причинность или скрытый конфаундер, но требуют переменной-инструмента, которая правдоподобно влияет на исход только через интересующую причину (exclusion restriction) — это допущение обычно нельзя строго проверить статистически, только аргументировать.
Sanity check: построить график метрики контрольной и затронутой группы за весь предпериод — визуально линии должны двигаться параллельно до вмешательства; если нет, допущение DiD нарушено и оценку нельзя считать надёжной причинной.
Пример кода
import pandas as pd
import statsmodels.formula.api as smf
df = pd.DataFrame({
'region': ['treated']*4 + ['control']*4,
'period': ['pre','pre','post','post']*2,
'metric': [100,102, 130,128, 98,101, 103,105]
})
df['post'] = (df['period']=='post').astype(int)
df['treated'] = (df['region']=='treated').astype(int)
model = smf.ols('metric ~ treated * post', data=df).fit()
print(model.params['treated:post']) # DiD-оценка эффектаЧто использовать на практике
- DiD хорошо подходит, когда есть чёткая "граница" вмешательства (запуск фичи в одном регионе) и достаточно долгая история обеих групп до него для проверки параллельности трендов. Синтетический контроль полезен, когда подходящей одной контрольной группы нет, но есть много потенциальных "доноров" (других регионов/сегментов). Инструментальные переменные используют реже в продуктовой аналитике из-за сложности найти валидный инструмент, но они полезны там, где рандомизация невозможна по этическим или техническим причинам, а обратная причинность — серьёзный риск.
Подводные камни
- Применять DiD без проверки параллельности трендов на предпериоде, считая совпадение уровней метрик достаточным
- Использовать синтетический контроль с донорами, которые сами подверглись похожим вмешательствам в том же периоде, что искажает "чистоту" контроля
- Выбирать инструментальную переменную, которая и сама может влиять на исход напрямую, нарушая ключевое допущение метода, но представлять результат как строго причинный без оговорок.