TL;DR
Подбираем каждому treated юниту близнеца по наблюдаемым ковариатам. CIA (conditional independence) — ключевое и недоказуемое допущение. Matching не спасает от unobserved confounding.
ATT (обычно) или ATE (зависит от matching scheme). Но: оценка валидна только если CIA выполнена (unobserved confounders отсутствуют или несущественны).
| Метод | Суть | Плюс/минус |
|---|---|---|
| Exact | Совпадение по всем ковариатам | Точный, но curse of dimensionality |
| PSM | Matching по P(D=1|X) — скаляр | Сжимает размерность; зависит от модели |
| CEM | Категоризация + exact | Монотонно улучшает баланс; теряет precision |
| Nearest-neighbor | Mahalanobis distance | Гибкий; зависит от метрики |
| Проверка | Что смотрим | Красный флаг | Что делать |
|---|---|---|---|
| Balance (SMD) | Standardized Mean Diff по каждой ковариате | |SMD| > 0.1 после matching | Перестроить модель / добавить ковариаты |
| Common support | Overlap распределений propensity score | Большие регионы без overlap | Trimming / отказ от оценки для этих юнитов |
| Sensitivity (Rosenbaum) | Γ — насколько сильный unobserved confounder нужен | Γ < 1.3 → результат хрупкий | Честно сообщить, искать дополнительные ковариаты |
| Variance ratio | Var(X_treat) / Var(X_control) после matching | Ratio далеко от 1.0 | Matching не выровнял распределения |
# PSM: propensity score matching
# Step 1: Estimate P(D=1|X) — logistic regression
# Step 2: For each treated unit, find nearest control by |p̂_treat − p̂_control|
# Step 3: ATT = mean(Y_treat − Y_matched_control)
# IPW alternative:
ATT_ipw = (1/N_treat) · Σ [ Y_i·D_i − Y_i·(1−D_i)·p̂_i/(1−p̂_i) ]
Doubly robust estimator комбинирует weighting с outcome regression. Консистентен, если хотя бы одна из двух моделей правильно специфицирована. AIPW (augmented inverse probability weighting) — стандартная реализация. Не решает unobserved confounding, но повышает робастность к misspecification.
Treated: пользователи, купившие premium-подписку. Control: остальные. Оцениваем эффект на retention.
| Ковариата | SMD до matching | SMD после matching | Статус |
|---|---|---|---|
| Возраст | 0.42 | 0.05 | ✓ OK |
| Сессии/нед. | 0.68 | 0.08 | ✓ OK |
| Tenure (мес.) | 0.35 | 0.03 | ✓ OK |
# SMD = (mean_treat − mean_control) / sqrt((var_treat + var_control) / 2)
# До matching: все SMD > 0.1 → группы сильно различаются
# После matching: все SMD < 0.1 → баланс достигнут по наблюдаемым
# НО: unobserved confounder (например, "мотивация") может
# объяснять и покупку premium, и retention → CIA нарушена
Вывод: баланс по наблюдаемым достигнут, но каузальность зависит от того, насколько "мотивация" и другие ненаблюдаемые факторы объясняют selection.
Аналитик оценивает эффект маркетинговой email-рассылки на покупки. Matching по ковариатам: возраст, город, дата регистрации, число открытых писем за месяц. Что не так?
"Число открытых писем" — post-treatment variable (bad control). Оно определяется после assignment в treatment (рассылка). Matching по post-treatment переменным вводит collider bias. Нужно matching только по pre-treatment ковариатам.
После PSM: ATT = +8% retention (p = 0.02). Rosenbaum bounds: Γ = 1.15 → при Γ = 1.15 p-value = 0.06. Что это означает?
Результат хрупкий. Даже слабый unobserved confounder (увеличивающий odds of treatment всего в 1.15 раза) может объяснить весь эффект. Нужно искать дополнительные ковариаты, или переключиться на дизайн, который менее чувствителен к unobserved confounding (DiD, IV, RDD).
Есть данные до и после treatment + контрольная группа + богатый набор ковариат. Parallel trends сомнительны. Что делать: (a) DiD, (b) matching+DiD, (c) matching alone?
(b) Matching+DiD. Matching выравнивает группы по наблюдаемым → усиливает правдоподобие parallel trends. DiD устраняет time-invariant unobserved confounders. Matching alone (c) не защищает от unobserved confounding. DiD alone (a) проблематичен при нарушенных parallel trends.