TL;DR
Instrumental Variables (IV) — для случаев, когда D коррелирует с ошибкой ε (endogeneity), и прямая регрессия Y на D даёт смещённую оценку. Идея: найти внешнюю переменную Z, которая двигает D, но сама не влияет на Y — кроме как через D. Эта вариация в D — «чистая» (не связана с ε), на ней можно идентифицировать эффект. Z называется инструментом. Метод оценивает LATE — Local Average Treatment Effect — эффект на compliers, тех unit-ов, чьё D меняется именно из-за Z. Главное и самое уязвимое допущение — exclusion restriction: Z не должен влиять на Y никаким другим путём, кроме как через D.
IV — самый контринтуитивный метод курса. Идея: если мы не можем рандомизировать D напрямую, найдём переменную Z, которая рандомизирует D «частично», за нас.
Зачем это нужно. Допустим, на маркетплейсе есть платная функция «Турбо-продажи». Хочется знать: повышает ли она GMV продавца? Прямое сравнение — те, кто активировал, и те, кто не активировал — смещено: активируют функцию продавцы с уже растущими продажами, более активные, с большей мотивацией. Это endogeneity: переменная D (активация) коррелирует с факторами в ε (мотивация, рост), которые сами влияют на Y. Регрессия Y на D даст смесь эффекта функции и эффекта отбора.
Решение IV: найти Z, который двигает D случайно относительно ε. Например, A/B-тест push-уведомления с предложением активировать функцию. Push рандомизирован — он не коррелирует с мотивацией продавца, не коррелирует с трендами продаж, ни с чем что в ε. Получает ли продавец push — это «лотерея», независимая от всего остального. Дальше работает простая логика. Push случайно увеличивает вероятность активации (это first stage: Z → D). Активация влияет на GMV (это эффект, который мы ищем: D → Y). Соответственно, push увеличивает GMV ровно через активацию (reduced form: Z → Y). Если разделить «эффект push на GMV» на «эффект push на активацию» — получим оценку эффекта активации на GMV, очищенную от selection bias. Это и есть формула Wald-estimator, простейший IV.
Что важно понимать: IV оценивает эффект не на всех пользователях, а на compliers — тех unit-ов, чьё D меняется именно из-за Z. Это могут быть не те же самые люди, на которых интересно знать эффект. И главное: IV работает только если Z действительно «как лотерея». Любая утечка влияния Z на Y помимо D разрушает идентификацию. Это центральное допущение — exclusion restriction — и оно непроверяемо статистически.
IV подходит когда выполняются 5 условий:
Если эти условия выполнены — IV даёт LATE-оценку причинного эффекта при endogeneity. Это сильный метод, но он требует серьёзной защиты допущений — особенно exclusion restriction.
IV оценивает LATE — Local Average Treatment Effect — средний эффект intervention на compliers. Compliers — это unit-ы, чьё D меняется именно из-за Z. Например: продавцы, которые активируют «Турбо-продажи» именно потому что получили push (а без push не активировали бы).
Кроме compliers, в популяции есть ещё три группы:
IV не оценивает эффект на always-takers (мы не наблюдаем их без активации) и never-takers (не наблюдаем с активацией). LATE говорит только про compliers. Это важное ограничение. Если в продакте звучит «эффект +45%» — нужно помнить что это эффект на тех, кто активировался из-за push. На остальных эффект может быть другим. Распространение LATE на всю популяцию — содержательная ошибка, а не статистическая.
Compliers — скрытая подгруппа. Мы не можем сказать «вот эти 100 продавцов — compliers». Можем только оценить их характеристики в среднем (по разнице средних в treatment и control). Это часто упускают: при заявлении «эффект +45%» нужно описывать, какие продавцы скорее всего двигаются push'ом.
Чтобы IV давал причинный эффект, нужны три условия. Это центральная таблица метода — каждый IV-анализ обязан её проходить.
| Условие | Формально | Проверяемость |
|---|---|---|
| Relevance (релевантность) | Cov(Z, D) ≠ 0 | Проверяема: first stage F-statistic ≥ 10 |
| Independence (независимость) | Z ⊥ ε | Частично проверяема: balance check ковариат по Z |
| Exclusion restriction (исключение) | Z влияет на Y только через D | Непроверяема статистически — требует содержательного обоснования |
Relevance — Z должен реально двигать D. Если push увеличивает вероятность активации с 5% до 5.2% — формально связь есть, но она слишком слабая. Слабый инструмент даёт смещённую оценку, даже если все остальные условия выполнены. Поэтому F < 10 — серьёзный red flag.
Independence — Z назначен «как лотерея», независимо от характеристик unit-ов. В рандомизированных Z (A/B-тесты) это выполнено по дизайну. В естественных Z (погода, расстояние, политика) нужно проверять — нет ли скрытой корреляции Z с unobservables.
Exclusion restriction — самое уязвимое допущение. Z не должен влиять на Y никаким другим путём, кроме как через D. В примере с push: push не должен повышать GMV сам по себе — например, через увеличение осведомлённости о платформе, активацию других функций, простое напоминание о существовании сервиса. Если такие пути есть — exclusion нарушена, оценка смещена.
Отдельно — monotonicity: Z может только увеличивать вероятность D, но не уменьшать ни у кого. То есть defiers нет. Без этого допущения LATE невозможно интерпретировать. В большинстве практических случаев monotonicity разумна, но проверять её нужно качественно.
IV требует пять стандартных проверок до того как интерпретировать оценку как причинный эффект.
| Проверка | Что смотрим | Красный флаг | Что делать |
|---|---|---|---|
| First stage F-statistic | Сила связи Z и D | F < 10 | Weak instrument — оценка смещена и неточна |
| Reduced form (Z → Y) | Прямой эффект Z на Y | Незначим при ожидаемом эффекте | Z не двигает Y — либо нет эффекта, либо weak |
| Balance check по Z | Ковариаты сбалансированы у Z=1 и Z=0 | Дисбаланс по предтриальным ковариатам | Independence под угрозой — Z не «как лотерея» |
| Exclusion plausibility | Содержательный анализ путей Z → Y | Есть пути влияния помимо D | Exclusion нарушена — IV невалиден |
| Sargan / Hansen test | Если инструментов больше одного — over-id test | p < 0.05 | Инструменты дают разные оценки — какой-то из них невалиден |
Лучшая практика — показать на одной странице: first stage F, reduced form coefficient, IV (2SLS) estimate, OLS estimate. Сравнение OLS vs IV сразу показывает направление и силу endogeneity bias.
Простейший IV — Wald estimator для двух групп (Z = 0/1):
τ̂_Wald = (Y̅(Z=1) − Y̅(Z=0)) / (D̅(Z=1) − D̅(Z=0))
Числитель — reduced form: разница Y между группами Z.
Знаменатель — first stage: разница D между группами Z.
Общий случай — Two-Stage Least Squares (2SLS):
Шаг 1 (first stage): D_i = π₀ + π₁·Z_i + X_i'γ + u_i
Получаем D̂_i — предсказанные значения D из first stage
Шаг 2 (second stage): Y_i = α + β·D̂_i + X_i'δ + ε_i
β — оценка LATE
При нескольких инструментах — те же шаги, D предсказывается
по комбинации Z. Это позволяет делать over-id тесты
(Sargan, Hansen).
Стандартные ошибки в 2SLS считаются с поправкой на то,
что D̂ — оценочный (не наблюдаемый напрямую). Большинство
эконометрических пакетов делает это автоматически (Stata
ivregress, R AER::ivreg, Python linearmodels.iv).
Идеи откуда брать Z в практике. Три классических примера из академической литературы и три типичных для платформ:
Хороший Z часто рождается из рандомизированного эксперимента, который у вас уже есть. Если на платформе давно делают A/B-тесты — у вас уже есть инструментальные переменные, просто их так не называли.
Weak instrument — это не просто «неточная оценка». При слабом Z 2SLS-оценка смещена в сторону OLS-оценки. То есть IV перестаёт лечить endogeneity, а становится её жертвой.
Формальный порог из работы Stock & Yogo (2005): first stage F-statistic должен быть ≥ 10 для приемлемой работы 2SLS. F < 10 — серьёзный red flag, F < 5 — оценка практически бесполезна. F около 100 и выше — сильный инструмент.
Что делать при слабом Z:
Маркетплейс делает A/B-тест push-уведомления с предложением активировать «Турбо-продажи» — платную подписку для продавцов (990₽/мес), которая даёт приоритет в поисковой выдаче. Цель аналитика — оценить причинный эффект активации на GMV продавца за следующие 30 дней.
Дизайн: Z — получил ли продавец push (рандомизирован 50/50), D — активировал ли продавец «Турбо-продажи», Y — GMV продавца за 30 дней после рассылки.
Прямая регрессия Y на D невалидна: активируют функцию продавцы с уже растущими продажами (мотивация, активность). Endogeneity. Используем push как IV.
| ID | Z (получил push) | D (активировал) | Y (GMV, ₽) |
|---|---|---|---|
| 1 | 1 | 1 | 145 000 |
| 2 | 1 | 1 | 138 000 |
| 3 | 1 | 0 | 92 000 |
| 4 | 1 | 0 | 88 000 |
| 5 | 0 | 1 | 142 000 |
| 6 | 0 | 0 | 95 000 |
| 7 | 0 | 0 | 90 000 |
| 8 | 0 | 0 | 87 000 |
Шаг 1 — first stage (Z → D):
D̅(Z=1) = 2/4 = 0.50 (продавцы 1–4)
D̅(Z=0) = 1/4 = 0.25 (продавцы 5–8)
Эффект push на активацию: 0.50 − 0.25 = +0.25 (+25 п.п.)
F-statistic (на полных данных) = 45 — сильный инструмент.
Шаг 2 — reduced form (Z → Y):
Y̅(Z=1) = (145 000 + 138 000 + 92 000 + 88 000) / 4
= 115 750 ₽
Y̅(Z=0) = (142 000 + 95 000 + 90 000 + 87 000) / 4
= 103 500 ₽
Эффект push на GMV: 115 750 − 103 500 = 12 250 ₽
Шаг 3 — Wald estimator (LATE):
τ̂_Wald = (Y̅(Z=1) − Y̅(Z=0)) / (D̅(Z=1) − D̅(Z=0))
= 12 250 / 0.25
= 49 000 ₽
Сравнение с OLS:
Y̅(D=1) = (145 000 + 138 000 + 142 000) / 3 = 141 667 ₽
Y̅(D=0) = (92 000 + 88 000 + 95 000 + 90 000 + 87 000) / 5 = 90 400 ₽
OLS-оценка = 141 667 − 90 400 = 51 267 ₽
OLS ≈ IV в этом примере (endogeneity небольшая).
На реальных данных OLS обычно завышает эффект.
LATE = 49 000 ₽ — эффект для compliers: продавцов, которые активировали «Турбо-продажи» именно из-за push. На always-takers эффект может быть меньше, на never-takers — неизвестен.
Что важно проверить: Exclusion restriction — влияет ли push на GMV помимо активации? Возможные пути: продавец открывает приложение, видит другие функции, активирует что-то ещё — GMV растёт не из-за «Турбо-продаж». Если такие пути есть — Wald оценивает смесь эффектов. Monotonicity — нет ли продавцов, которые специально НЕ активируют получив push? На практике маловероятно. Independence — push рандомизирован, выполнено по дизайну.
Что было бы при weak instrument: если бы push повышал активацию слабее (с 5% до 5.5%, разница 0.5 п.п. вместо 25), Wald estimator стал бы крайне чувствителен к шуму в Y. F был бы около 3–4, и заявить LATE было бы нельзя без серьёзных оговорок.
Финтех-сервис рандомизирует email с приглашением открыть инвестиционный счёт. Email — Z, открытие счёта — D, retention клиента через 6 месяцев — Y. Аналитик хочет использовать email как IV для оценки эффекта инвестсчёта на retention. Какая угроза exclusion restriction в этом дизайне? Как её обнаружить, как смягчить?
Exclusion может нарушиться, если сам факт получения email влияет на retention помимо открытия инвестсчёта. Возможные пути: (1) email повышает осведомлённость о сервисе в целом — клиент заходит в приложение, активнее пользуется обычными функциями, retention растёт без открытия счёта; (2) email повышает доверие («они мне пишут, значит заботятся»), что влияет на лояльность; (3) email содержит другую информацию (скидки, новости), которая мотивирует продолжать пользоваться.
Как обнаружить: reduced form на подгруппе D = 0. Сравнить Y у клиентов с D = 0 в группах Z = 1 и Z = 0. Если у получивших email retention выше — есть прямой эффект email на retention, exclusion нарушена. Также: явно прописать все возможные пути влияния email на retention — если хотя бы один правдоподобен, exclusion под вопросом.
Как смягчить: использовать «pure» инструмент — например, технический сбой в рассылке у части клиентов (случайный, без контента). Или ограничиться reduced form (Z → Y): это даст intent-to-treat эффект email, но не LATE открытия счёта. Без обоснования exclusion заявить LATE как причинный эффект инвестсчёта — нечестно.
На маркетплейсе попытались использовать дату регистрации продавца как IV для опыта продавца (D — количество месяцев активности) и эффекта опыта на GMV (Y). First stage даёт F = 4.2. Что это значит, что делать?
F = 4.2 — weak instrument. Stock & Yogo (2005) дают порог F ≥ 10 для приемлемой работы 2SLS. F < 5 — оценка практически бесполезна: она смещена в сторону OLS и имеет очень широкие доверительные интервалы. Дата регистрации слабо определяет опыт — продавец, зарегистрировавшийся год назад, может быть активен 12 месяцев или только последний месяц.
Что делать: (1) искать более сильный Z — рандомизированный shock, который точно двигает опыт (например, encouragement-кампания «вернись через месяц»); (2) использовать LIML вместо 2SLS — менее смещён при слабых инструментах; (3) ограничиться reduced form «давность регистрации → GMV» — честная оценка без LATE-интерпретации; (4) признать что метод не работает и искать другой дизайн. Что нельзя: проигнорировать F = 4.2 и заявить LATE как причинный эффект — F ниже 10 должен быть виден в отчёте.
На маркетплейсе делают encouragement design: push (Z) → активация «Турбо-продаж» (D) → GMV (Y). LATE составил +45% GMV. Менеджер хочет распространить результат на всех продавцов и заявить «активация даёт +45% всем». Что не так? Что правильно сказать?
LATE — это эффект на compliers: продавцов, которые активировали «Турбо-продажи» именно потому что получили push. В популяции есть четыре группы: compliers (их IV и меряет), always-takers (активируют всегда — на них эффект может быть меньше, они продвинутые продавцы), never-takers (не активируют никогда — мы ничего не знаем об их эффекте), defiers (предполагаем что нет). Распространение LATE на всю популяцию — содержательная ошибка.
Что правильно сказать: «Для продавцов, чьё решение активировать "Турбо-продажи" зависит от push-приглашения, активация повышает GMV на ~45%. Это не средний эффект по всей популяции. Always-takers и never-takers в эту оценку не входят. Для распространения на всю популяцию нужен другой дизайн — например, RCT с принудительной активацией у части продавцов». Грамотный аналитик в отчёте явно описывает кто такие compliers в его задаче.
Если инструментов больше, чем эндогенных переменных — over-identified. Тест Sargan (Hansen J): проверяет, согласованы ли инструменты. Отвержение H₀ = хотя бы один невалиден. Но: низкая мощность, не указывает на конкретный инструмент.