Модуль 6. Instrumental Variables (IV)

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 и DF < 10Weak instrument — оценка смещена и неточна
Reduced form (Z → Y)Прямой эффект Z на YНезначим при ожидаемом эффектеZ не двигает Y — либо нет эффекта, либо weak
Balance check по ZКовариаты сбалансированы у Z=1 и Z=0Дисбаланс по предтриальным ковариатамIndependence под угрозой — Z не «как лотерея»
Exclusion plausibilityСодержательный анализ путей Z → YЕсть пути влияния помимо DExclusion нарушена — IV невалиден
Sargan / Hansen testЕсли инструментов больше одного — over-id testp < 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:

Типичные ошибки

  1. Не проверять exclusion restriction. Самая частая и самая серьёзная ошибка. Если push увеличивает GMV не только через активацию функции, но и сам по себе (через узнаваемость, доверие, активацию других функций) — IV-оценка смещена. Обосновать exclusion нужно содержательно, и в отчёте честно перечислить возможные пути нарушения.
  2. Игнорировать F-statistic. Если F < 10, 2SLS-оценка смещена в сторону OLS-оценки. Слабый Z — это не «неточный», это смещённый. F всегда докладывать в отчёте, рядом с самой 2SLS-оценкой.
  3. Распространять LATE на всю популяцию. IV даёт эффект на compliers, не на средний. Заявление «активация повышает GMV на 45%» без оговорки про compliers — ошибка интерпретации. В отчёте уточнять: «у тех продавцов, чьё решение активировать функцию зависит от push».
  4. Сравнивать OLS и IV без анализа разницы. Если OLS даёт +20%, а IV +45% — это сигнал, что endogeneity bias значителен. Нужно понять направление: почему IV больше? Это полезная информация. Часто её игнорируют.
  5. Брать «удобный» Z без обоснования экзогенности. «Расстояние до объекта» удобно как Z, но если оно коррелирует с регионом, доходом, поведением — это не IV, а просто плохая ковариата. Любой Z требует явного обоснования всех трёх условий.
  6. Использовать post-treatment Z. Если Z измеряется после D — это не инструмент, это outcome первого этапа. Z всегда должен быть определён до D.

Что делать дальше

Toy example: encouragement design на маркетплейсе

Маркетплейс делает A/B-тест push-уведомления с предложением активировать «Турбо-продажи» — платную подписку для продавцов (990₽/мес), которая даёт приоритет в поисковой выдаче. Цель аналитика — оценить причинный эффект активации на GMV продавца за следующие 30 дней.

Дизайн: Z — получил ли продавец push (рандомизирован 50/50), D — активировал ли продавец «Турбо-продажи», Y — GMV продавца за 30 дней после рассылки.

Прямая регрессия Y на D невалидна: активируют функцию продавцы с уже растущими продажами (мотивация, активность). Endogeneity. Используем push как IV.

IDZ (получил push)D (активировал)Y (GMV, ₽)
111145 000
211138 000
31092 000
41088 000
501142 000
60095 000
70090 000
80087 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 было бы нельзя без серьёзных оговорок.

Упражнения

Задача 1: exclusion restriction

Финтех-сервис рандомизирует 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 как причинный эффект инвестсчёта — нечестно.

Задача 2: weak instrument

На маркетплейсе попытались использовать дату регистрации продавца как 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 должен быть виден в отчёте.

Задача 3: compliers и LATE

На маркетплейсе делают 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-identification и Sargan test

Если инструментов больше, чем эндогенных переменных — over-identified. Тест Sargan (Hansen J): проверяет, согласованы ли инструменты. Отвержение H₀ = хотя бы один невалиден. Но: низкая мощность, не указывает на конкретный инструмент.