Собесов

Сценарий: DAG для causal анализа — как нарисовать и читать

Статистика и теорверCausal inferenceСложнаяSenior

Условие

Что такое DAG в causal inference, как использовать для выбора контролов в регрессии?

Решение

DAG (Directed Acyclic Graph)

Граф, где узлы — переменные, рёбра — causal arrows. Не циклов (acyclic).

weather → ads → conversion
                ↑
            user_intent

Типы переменных

Роль Что
Confounder Влияет и на treatment X, и на outcome Y. Контролировать обязательно.
Mediator На пути X → M → Y. Контроль закрывает part of effect.
Collider X → C ← Y. Контроль создаёт spurious correlation (selection bias).
Instrument Z → X, но не Z → Y напрямую.

Backdoor criterion

Чтобы получить causal effect X → Y:

  • Заблокировать все backdoor paths от X к Y.
  • Не открывать новых через контроль collider'ов.

Backdoor — путь X ← ... → Y (стрелка в X на старте).

Пример: эффект рекламы на покупку

season → ads
season → purchase
ads → purchase
ad_clicked → purchase
ads → ad_clicked
  • season — confounder (влияет и на ads, и на purchase) → контролировать.
  • ad_clicked — mediator (ads → ad_clicked → purchase) → НЕ контролировать, если хотите total effect.
  • Если будете контролировать ad_clicked, измерите только direct effect ads → purchase, не через клики.

Collider bias

talent → success
luck → success

Если у вас выборка успешных людей и вы спрашиваете «как соотносится талант и удача» — увидите negative correlation. На самом деле они независимы; селекция по success открыла collider.

Известно как Berkson's paradox. Знаменитый кейс: «среди опубликованных исследований негативная корреляция между новизной и качеством» — потому что обозреватели селективно публикуют.

dagitty / DoWhy

# pip install dowhy
from dowhy import CausalModel
 
model = CausalModel(
    data=df,
    treatment='ads',
    outcome='purchase',
    graph="""
        ads -> purchase;
        season -> ads; season -> purchase;
        ads -> click; click -> purchase;
    """,
)
identified = model.identify_effect()
estimate = model.estimate_effect(identified, method_name="backdoor.linear_regression")

dagitty автоматически найдёт min adjustment set.

Что контролировать

Правило: минимальный backdoor adjustment set. Не «всё подряд» — лишний контроль может открыть collider.

Подводные камни

  1. Включение mediator в регрессию убирает indirect effect (если хотите total — не включать).
  2. Включение collider создаёт bias из ничего.
  3. Bad controls — переменные после treatment, которые сами causally зависят от X.
  4. DAG — это assumption, не observable. Делайте явно, обсуждайте с предметом.
  5. Cycle (feedback) — DAG не позволяет; для feedback нужны structural equation models или dynamic models.

Эталонный ответ

DAG — узлы переменные, рёбра causal arrows. Контролировать confounders, не контролировать mediators (если total effect) и colliders (создают bias). Backdoor criterion: блокировать все X ← ... → Y пути. Инструменты — dagitty / DoWhy.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти