Причинно-наслідковий аналіз відповідає на питання "що якщо": Що б сталося, якби ми змінили ціну? Чи маркетингова кампанія дійсно збільшила продажі? Стандартний ML передбачає кореляції, але бізнес-рішення вимагають розуміння причин. Причинні методи оцінюють ефекти treatment, коли рандомізовані експерименти неможливі.
Де використовується
Причинний аналіз забезпечує прийняття рішень у різних галузях:
- Маркетинг: Атрибуція кампаній, ефективність каналів
- Продукт: Аналіз впливу фіч, ефекти рекомендацій
- Медицина: Ефективність лікування, безпека ліків
- Політика: Оцінка програм, ефекти інтервенцій
- Фінанси: Вплив кредитних рішень, стратегія ціноутворення
- HR: Ефективність програм навчання
Типові дані
| Аспект | Типові значення |
|---|---|
| Розмір вибірки | 10K до 10M спостережень |
| Treatment rate | 1% до 50% |
| Confounders | 10 до 100+ змінних |
| Типи outcome | Binary, continuous, time-to-event |
| Джерела даних | Observational, quasi-experimental |
Структура даних:
user_id | treatment | outcome | confounder_1 | confounder_2 | ... | timestamp
Ключова проблема: Confounding - змінні, що впливають і на присвоєння treatment, і на outcome.
Що робимо на практиці
- Визначити причинне питання - Який treatment, який outcome, яке порівняння?
- Намалювати причинну діаграму (DAG) - Відобразити зв'язки між змінними
- Ідентифікувати confounders - Що впливає на treatment і outcome?
- Перевірити ідентифікацію - Чи можемо оцінити причинний ефект?
- Обрати метод оцінки - Matching, weighting, IV, DiD
- Оцінити propensity scores - Якщо використовуємо weighting/matching
- Перевірки балансу - Верифікувати covariate balance
- Оцінити treatment effect - ATE, ATT, CATE
- Аналіз чутливості - Робастність до unmeasured confounding
- Комунікація невизначеності - CI, зроблені припущення
Baseline спочатку
Почніть з простого порівняння, потім додайте причинні коригування:
import pandas as pd
from sklearn.linear_model import LogisticRegression
# Крок 1: Наївне порівняння (зміщене)
naive_effect = df[df['treatment']==1]['outcome'].mean() - \
df[df['treatment']==0]['outcome'].mean()
# Крок 2: Оцінка propensity score
ps_model = LogisticRegression()
ps_model.fit(df[confounders], df['treatment'])
df['propensity'] = ps_model.predict_proba(df[confounders])[:, 1]
# Крок 3: IPW оцінка
df['weight'] = df['treatment'] / df['propensity'] + \
(1 - df['treatment']) / (1 - df['propensity'])
Методи причинної оцінки
| Метод | Припущення | Найкраще для |
|---|---|---|
| Propensity Score Matching | Selection on observables | Схожі одиниці доступні |
| Inverse Probability Weighting | Selection on observables | Всі одиниці враховуються |
| Doubly Robust | PS або outcome модель правильна | Робастність |
| Difference-in-Differences | Паралельні тренди | Зміни політики |
| Regression Discontinuity | Присвоєння на основі порогу | Порогові правила |
| Instrumental Variables | Валідний інструмент існує | Unmeasured confounding |
Ключові концепції
Average Treatment Effect (ATE):
ATE = E[Y(1)] - E[Y(0)]
Ефект для всієї популяції.
Average Treatment Effect on Treated (ATT):
ATT = E[Y(1) - Y(0) | T=1]
Ефект для тих, хто отримав treatment.
Propensity Score:
e(x) = P(T=1 | X=x)
Ймовірність treatment за умови ковариат.
Валідація
| Підхід валідації | Опис |
|---|---|
| Перевірки балансу | Ковариати збалансовані після weighting/matching |
| Плацебо тести | Немає ефекту на outcomes, що не повинні бути affected |
| Аналіз чутливості | Скільки unmeasured confounding для nullify ефекту |
| A/B тест порівняння | Порівняти причинну оцінку з RCT |
Типові проблеми та дебагінг
- [ ] Unmeasured confounding: Ключовий confounder не в даних
- [ ] Positivity violation: Немає overlap у propensity scores
- [ ] Model misspecification: Propensity/outcome модель неправильна
- [ ] Selection bias: Вибірка не репрезентативна
- [ ] Reverse causality: Outcome впливає на treatment
- [ ] Interference: Treatment однієї одиниці впливає на іншу
Чекліст продакшену
Перед прийняттям рішень: - [ ] Причинна діаграма перевірена доменними експертами - [ ] Confounders ідентифіковані та виміряні - [ ] Propensity overlap верифіковано - [ ] Баланс досягнуто після adjustment - [ ] Множинні методи дають консистентні результати - [ ] Аналіз чутливості проведено
Інструменти
| Категорія | Інструменти |
|---|---|
| Python | DoWhy, CausalML, EconML, causalinference |
| R | MatchIt, WeightIt, CausalImpact, grf |
| Причинні графи | DAGitty, pgmpy |
| CATE оцінка | EconML (DML, Causal Forest), CausalML |
Пов'язані сторінки
- Індекс: ML Field Guide
- A/B тестування для ML
- Feature Engineering основи
Додаткове читання
Спробуйте наживо
Дослідіть пов'язану модель на практиці: відкрийте Causal Inference Lab — Confounding, Naive vs. Adjusted Effects і змінюйте параметри під час роботи. Усе лишається у вашому браузері.
▶ Відкрити симуляцію Causal Inference Lab — Confounding, Naive vs. Adjusted Effects