Условие
Регрессия sales ~ price даёт β_price = +0.5 (выручка растёт с ценой). Странно. Что не так?
Решение
Проблема: endogeneity
Cov(X, ε) ≠ 0 — X коррелирует с error term. OLS оценка β смещена.
В нашем случае: цена устанавливается не случайно. В сезоны высокого спроса цена выше и продажи выше. → Цена и unobserved «спрос» скоррелированы → β врёт.
Источники endogeneity
- Omitted variable bias: важная переменная не включена и коррелирует с X. Спрос → цена и продажи.
- Reverse causality: Y влияет на X. Маркетинг тратится больше там, где продажи и так выше.
- Measurement error in X: X измерен с шумом → attenuation bias (β смещён к 0).
- Simultaneity: цена и продажи определяются одновременно в equilibrium.
- Selection bias: выборка не случайна.
Решения
1. Add omitted variable — самое простое, если переменная наблюдается.
# Добавить сезон, регион, маркетинговый бюджет
model = sm.OLS(sales, sm.add_constant(df[['price', 'season', 'region', 'marketing']])).fit()2. Instrumental Variables (IV) / 2SLS
Инструмент Z должен:
- Relevance: коррелировать с X (
Cov(Z, X) ≠ 0). - Exclusion: не влиять на Y напрямую (
Cov(Z, ε) = 0).
from linearmodels.iv import IV2SLS
# Stage 1: X ~ Z (+ controls)
# Stage 2: Y ~ X_hat (+ controls)
model = IV2SLS(sales, controls, price, instrument).fit()Инструмент для цены: cost of goods (зависит от поставщиков, не от спроса).
3. Fixed effects для panel data:
# Контролировать unobserved time-invariant характеристики
from linearmodels.panel import PanelOLS
model = PanelOLS(df['sales'], df['price'], entity_effects=True).fit()4. Diff-in-Diff для policy interventions:
Y = α + β1·treated + β2·post + β3·(treated × post) + ε
β3 — causal эффект treatment.
5. Regression Discontinuity при наличии порога.
6. Randomized experiment — золотой стандарт, устраняет endogeneity by design.
Тесты на endogeneity
Hausman test:
# H_0: OLS consistent (нет endogeneity)
# H_1: только IV consistent
hausman_stat, p = ...Качество инструмента
# Weak instrument: F-stat первой стадии < 10 → IV unreliableПодводные камни
- Endogeneity не диагностируется residual plot'ом — нужна теория предметной области.
- Weak instruments дают bias хуже OLS. F-stat > 10 для one IV, иначе не использовать.
- Exclusion restriction не тестируется напрямую — это assumption. Аргументировать содержательно.
- Fixed effects убирают time-invariant confounders, но не time-varying.
- Randomized experiment не всегда возможен (этика, стоимость) — обычно прибегают к IV/DiD.
Эталонный ответ
Endogeneity = X коррелирует с ε (omitted var, reverse causality, measurement error). OLS смещён. Лечение: добавить omitted var, IV/2SLS с релевантным+exclusion-валидным инструментом, fixed effects для panel, DiD для interventions, RCT — лучший.