TL;DR
Квазиэксперимент не доказывает causality «по формуле» — он строит аргумент. Сила аргумента зависит от того, сколько проверок метод выдержал. Internal validity — выполнено ли ключевое допущение метода. External validity — обобщается ли результат за пределы выборки. Этот модуль про первое: placebo, falsification, sensitivity analysis — арсенал проверок, без которых причинный вывод не имеет статуса.
Проверки нужны для каждого квазиэксперимента — без исключений. Но набор тестов зависит от метода:
Если метод выбран без понимания того, какие тесты для него обязательны — дизайн уже хромает. Список тестов нужно формировать ДО старта анализа, не после.
Каждый тест валидности отвечает на один из двух вопросов:
| Вид validity | Вопрос | Тесты |
|---|---|---|
| Internal | Действительно ли treatment вызвал измеренный эффект на этих данных? | Placebo, falsification, pre-trend, balance, McCrary, sensitivity |
| External | Обобщается ли вывод на других пользователей, периоды, контексты? | Heterogeneity analysis, replication на смежных подвыборках, sub-sample stability |
Большинство квазиэкспериментальных тестов — про internal validity. Это понятно: сначала нужно убедиться что эффект есть на твоих данных, потом обсуждать его обобщаемость. External validity — отдельная содержательная дискуссия, не имеющая универсальных формальных тестов.
| Тест | Идея | Применимость | Красный флаг | Что делать |
|---|---|---|---|---|
| Placebo treatment | Применить метод к группе, где интервенции не было — должен дать нулевой эффект | DiD, SCM | Эффект не нулевой, p < 0.10 | Метод видит сигнал там, где его нет — есть скрытый confounder |
| Placebo outcome | Применить метод к метрике, на которую интервенция не должна влиять | DiD, RDD, IV | Эффект значим на placebo-метрике | Дизайн ловит общую динамику, не эффект интервенции |
| Falsification test | Проверить условие, которое должно выполняться при правильном дизайне (например, leads = 0 в event study) | DiD event study, IV | Условие нарушено | Допущение метода не выполнено — нужен другой метод или другая спецификация |
| Pre-trend test | Сравнить тренды treatment и control до интервенции | DiD | Тренды расходятся, p < 0.10 | Параллельные тренды нарушены — DiD неприменим |
| McCrary density test | Проверить, нет ли скачка плотности running variable у порога | RDD | Скачок значим | Манипуляция порогом — RDD неприменим |
| Balance test | Сравнить ковариаты treatment и control в окне | RDD, matching | Дисбаланс по ключевым ковариатам | Группы не сравнимы — расширить ковариаты или сменить метод |
| Sensitivity analysis | Проверить устойчивость результата к нарушениям допущений (Rosenbaum bounds для matching) | Matching, IV | Результат ломается при малом нарушении | Эффект слишком зависит от допущений — заявлять причинность нельзя |
| Bandwidth robustness | Повторить RDD с разными окнами вокруг порога | RDD | Эффект сильно меняется | Локальный эффект неустойчив — RDD не работает |
| Permutation inference | Сравнить наблюдаемый эффект с распределением «случайных» эффектов на placebo-юнитах | SCM, DiD | Наблюдаемый эффект попадает внутрь placebo-распределения | Эффект не отличим от шума |
Тест проходит — это сигнал что одно конкретное допущение выполняется. Это НЕ доказывает что метод правильный, это снимает одну из угроз.
Тест проваливается — это сигнал что есть проблема. Какая именно — зависит от теста. Провал pre-trend в DiD это не то же самое что провал McCrary в RDD: первое означает «метод неприменим к этим данным», второе — «возможна манипуляция порогом».
Failed test — это НЕ «честность» аналитика, это «метод не работает». Сообщить об этом честно — задача аналитика. Но интерпретировать failed test как «зато наш анализ прозрачный» — самообман. Прозрачность не заменяет валидность.
Квазиэксперимент — не доказательство, а аргумент. Сила аргумента определяется:
Сценарий: маркетплейс ввёл новую систему ранжирования в категории «Электроника» с 1 марта. В категории «Одежда» ничего не менялось. Аналитик делает DiD по GMV: Электроника = treatment, Одежда = control, период до = январь-февраль, период после = март-апрель.
Наивная оценка: GMV в Электронике вырос на 12% относительно Одежды (DiD-эффект). Без проверок этот результат — статистика, не причинный вывод. Прогоняем 4 теста.
Сравниваем тренды GMV в обеих категориях за октябрь-февраль (5 месяцев pre-period).
| Месяц | Электроника, рост к пред. | Одежда, рост к пред. | Разница |
|---|---|---|---|
| Октябрь | +3.1% | +2.8% | +0.3 пп |
| Ноябрь | +4.2% | +4.5% | −0.3 пп |
| Декабрь | +12.0% | +14.5% | −2.5 пп (Новый год) |
| Январь | −5.2% | −6.0% | +0.8 пп |
| Февраль | +2.0% | +1.8% | +0.2 пп |
Средняя разница в pre-period: +0.3 пп. F-test на различие трендов: p = 0.42. Параллельные тренды можно считать выполненными. ✅
Делаем фейковый DiD: «Электроника» vs «Одежда», период до 1 января vs период с 1 января (когда никаких изменений ранжирования не было). Эффект: 0.6%, p = 0.71. Нулевой, как и должно быть. ✅
GMV — целевая метрика. Падение средней цены в категории не должно быть следствием изменения ранжирования (ранжирование меняет видимость товаров, не цены продавцов). Прогоняем DiD на средней цене.
Эффект: −0.4% (Электроника к Одежде), p = 0.81. Цены не сдвинулись — falsification пройден. ✅
Повторяем основной DiD с разными границами:
| Вариация | DiD-эффект | p |
|---|---|---|
| Базовый (jan-feb vs mar-apr) | +12.0% | 0.003 |
| Сдвиг границы на −2 нед. | +11.4% | 0.005 |
| Сдвиг границы на +2 нед. | +12.6% | 0.002 |
| pre = только feb, post = только mar | +13.1% | 0.012 |
| Контроль = «Дом и дача» вместо «Одежда» | +10.8% | 0.008 |
Эффект устойчив в диапазоне 10.8–13.1% при разных спецификациях. ✅
Итог: 4 теста пройдены. Эффект новой системы ранжирования на GMV в Электронике — около +12%, с уверенностью.
Что было бы при failed pre-trend? Если бы pre-trend дал p = 0.04 (тренды расходились), DiD неприменим. Варианты: синтетический контроль (модуль 4), сужение pre-period до 2 последних месяцев, добавление контрольных переменных в регрессию или признание что причинный вывод невозможен с этими данными.
RDD на BNPL-сервисе. Лимит одобрения растёт скачком при кредитном скоре ≥ 650. Аналитик хочет оценить causal эффект высокого лимита на retention.
Какие 3 теста обязательно нужны до того как заявить причинный вывод? Что каждый из них проверяет?
Без этих трёх тестов «эффект лимита на retention» — это догадка, не причинный вывод.
DiD на маркетплейсе показал эффект +15% GMV. Pre-trend test провалился: тренды до интервенции расходились с p = 0.02.
Что делать?
Наивный DiD неприменим. Эффект +15% — это смесь причинного эффекта и расходящихся pre-trends. Варианты:
Чего НЕЛЬЗЯ делать: проигнорировать failed pre-trend и заявить +15% как эффект. Это нечестная практика, и аудит такой анализ не пропустит.
Для matching существует формальный фреймворк sensitivity — Rosenbaum bounds. Идея: какой силы должен быть hidden confounder, чтобы наблюдаемый эффект мог объясняться им? Параметр Γ — отношение шансов получить treatment между парой matched units. Γ = 1 — confounder отсутствует. Γ > 1 — насколько сильнее должен быть скрытый отбор, чтобы обнулить эффект.
Если эффект ломается при Γ = 1.5 — небольшой скрытый confounder уже достаточен, метод хрупкий. Если эффект держится до Γ = 4 — нужно очень сильное скрытое смещение, аргумент сильный.
Похожая идея для observational studies — E-value (Vanderweele 2017): минимальная сила confounder, которая объясняет наблюдаемое отношение рисков. Чем выше E-value, тем устойчивее аргумент.