1 정의
Augmented IPW (AIPW) 형태의 DR 추정량에 ML 을 결합한 형태:
\[\widehat{\psi} = \frac{1}{n} \sum_{i=1}^{n} \left[\widehat{b}(X_i) + \frac{A_i}{\widehat{\pi}(X_i)} \{Y_i - \widehat{b}(X_i)\}\right]\]
- \(\widehat{b}(x) = \widehat{\mathrm{E}}[Y | X=x, A=1]\): 결과 모형 (ML).
- \(\widehat{\pi}(x) = \widehat{\Pr}(A=1 | X=x)\): 처치 모형 (ML).
두 모형 중 한쪽만 옳아도 \(\widehat{\psi}\) 가 \(\mathrm{E}[Y^{a=1}]\) 의 일치 추정.
- 데이터를 두 (또는 \(K\)) 부분으로 나눔.
- 한 부분 (\(training\)) 으로 ML 모형 적합 → \(\widehat{b}, \widehat{\pi}\).
- 다른 부분 (\(estimation\)) 에서 추정량 계산.
- Roles 바꿔 반복 → cross-fitting 으로 효율 회복.
핵심: ML 모형 적합과 추정량 계산이 통계적으로 독립 → 추정량 분산 정직.
직관 — DR ML 의 마법: 두 모형의 곱 형태 편향 → 한 모형이 정확하면 다른 모형의 오차가 추정량에 영향 안 줌. ML 의 \(n^{-1/4}\) 수렴 속도가 두 모형에 결합되면 \(n^{-1/2}\) 수렴 → 95% Wald CI valid. ML 의 느린 수렴 속도를 DR 이 가속.
2 18.3 인과 추론과 머신러닝
2.1 고차원에서 단순 추정량의 한계
고차원 \(X\) 에서 ML 로 \(\widehat{\pi}(x)\) 또는 \(\widehat{b}(x)\) 추정 후 단순 IPW 또는 g-formula 적용:
문제: ML 모형이 느리게 수렴 — 일반적으로 \(n^{-1/4}\) 수렴 (low-dim 모수의 \(n^{-1/2}\) 보다 느림).
결과: - IPW 추정량 편향 \(\sim n^{-1/4}\) → 표준오차 \(n^{-1/2}\) 보다 큼 → 95% CI invalid. - g-formula 도 동일.
결론: 단순 ML 적용은 95% CI 의 under-coverage (실제 coverage < 95%).
직관 — 왜 ML 이 \(n^{-1/4}\) 인가: ML 은 매우 유연한 함수 클래스 적합 (수천 개 모수). 표본 크기 \(n\) 대비 모수 수가 많아 적합 정확도 향상이 표본 늘어나는 속도보다 느림. 유연성의 댓가가 수렴 속도 손실.
직관 — 단순 회귀의 \(n^{-1/2}\) vs ML 의 \(n^{-1/4}\): \(n=10000\) 에서 단순 회귀 오차 ~0.01, ML 오차 ~0.1. ML 이 10 배 부정확. 이 부정확성이 IPW 추정량으로 전달 → 추정량 분산보다 큰 편향. CI 가 진짜 효과 위 또는 아래 에 형성 — coverage 손실.
2.2 Regularization Bias 의 메커니즘
ML 알고리즘은 분산 감소를 위해 정규화 적용:
- Lasso: 계수를 0 으로 shrunk.
- Ridge: 계수를 0 방향으로 shrunk.
- Random Forest: 트리 적합에 randomization (variance reduction).
- Deep Learning: dropout, weight decay.
→ 추정값이 진짜 모수 방향으로 shrunk (regularization bias).
이 편향이 인과 추정량 (\(\widehat{\psi}\)) 으로 전파 — 단순 ML 적용은 인과 결과 bias toward zero.
직관 — Shrinkage 의 인과 분석 영향: Lasso 가 confounder 의 계수를 0 으로 shrunk → 보정 안 된 효과로 추정. 일부 confounder 가 강한 처치 예측자면 lasso 가 선택 → 좋은 보정. 하지만 weak confounder 를 lasso 가 zero 로 만들면 → 보정 안 됨.
직관 — Black-box 의 위험: Random forest, neural net 같은 black-box 는 어떤 변수가 어떻게 사용됐는지 추적 어려움 → confounder 보정 검증 불가. DR + sample splitting 이 이 위험을 통계적으로 통제.
2.3 Generalized Linear Models with High-Dimensional Splines
대안: 고차원 splines + GLM (linear, logistic, log link):
\[\widehat{b}(x) = \mathrm{expit}(\widehat{\theta}^\top s(x)), \quad \widehat{\pi}(x) = \mathrm{expit}(\widehat{\alpha}^\top s(x))\]
여기서 \(s(X)\) 는 \(X\) 의 cubic spline + cross-product 변환.
- 모수 수가 \(n\) 보다 많아질 수 있음 → 적합 불안정.
- Lasso 또는 ridge penalty 추가로 적합.
- Random forest 또는 deep learning 의 대안.
직관 — Spline GLM 의 trade-off: 해석 가능 + cross-validation 자연 적용. 그러나 random forest 보다 예측 정확도 낮을 수 있음. 단순함 vs 정확도 의 절충.
3 18.4 Doubly Robust ML 의 정확한 절차
3.1 Second-Order Bias 의 직관
DR 추정량 \(\widehat{\psi}\) 의 conditional bias (training set \(T_r\) 에 조건부):
\[\mathrm{E}[\widehat{\psi} - \psi | T_r] \approx \mathrm{E}\left[\pi(X) \left(\frac{1}{\widehat{\pi}(X)} - \frac{1}{\pi(X)}\right) \{b(X) - \widehat{b}(X)\}\right]\]
= 두 모형 오차의 곱의 기댓값.
- 한 모형이 정확 (\(\widehat{b}\) 또는 \(\widehat{\pi}\) 의 오차 = 0) → 곱 = 0 → bias = 0.
- 두 모형 모두 부정확하지만 각각 \(n^{-1/4}\) 보다 빠르게 수렴 → 곱이 \(n^{-1/2}\) 보다 빨라 bias 무시 가능.
→ DR 의 bias 는 second-order — ML 의 느린 수렴을 보완.
직관 — 곱 형태의 마법: 단순 IPW 의 bias 는 \(\widehat{\pi}\) 오차 직접 비례. 단순 g-formula 는 \(\widehat{b}\) 오차 직접. DR 는 두 오차의 곱 — 한쪽이 0 이면 곱 0, 둘 다 작으면 곱 더 작음. 곱 구조가 두 ML 모형의 오차를 자동 상쇄.
직관 — Cross-product 가 줄이는 이유: 두 오차가 독립적 이면 곱의 평균이 작아짐. 한 모형 의 오차가 다른 모형으로 전파 안 되도록 sample splitting 이 보장. 독립성이 second-order bias 의 핵심.
3.2 Sample Splitting 의 필요성
같은 데이터로 ML 모형 적합 + 추정량 계산:
- ML 모형이 데이터에 과적합 — \(\widehat{b}, \widehat{\pi}\) 의 변동이 추정량과 상관.
- 추정량의 분산이 작아 보임 (실제로는 큼) — under-coverage.
해결: 데이터를 둘로 나눔. - Training half: ML 모형 적합 → \(\widehat{b}, \widehat{\pi}\). - Estimation half: 추정량 계산. - 두 half 가 통계적으로 독립 → 정직한 분산.
직관 — 과적합의 분산 underestimation: ML 이 training data 에 과적합 → 추정량의 변동이 훈련 data 의 노이즈 와 상관. 표본 다시 뽑으면 추정값이 예상보다 더 변동. 일반 분산 추정은 이 추가 변동을 반영 못 함. Sample splitting 이 이 상관을 절단.
직관 — 절반의 데이터로 분석한다는 것: Sample splitting 의 댓가는 절반 데이터로 분석 → 분산 √2 배 큼. 이를 회복하기 위해 cross-fitting 사용.
3.3 Cross-fitting 의 효율 회복
- 데이터를 \(K\) 등분 (보통 \(K=5\) 또는 \(10\)).
- Fold \(m\) 을 estimation, 나머지 \(K-1\) fold 를 training.
- 각 fold \(m\) 에서 추정량 \(\widehat{\psi}^{(m)}\) 계산.
- 평균: \(\widehat{\psi}_\text{cross-fit} = \frac{1}{K} \sum_{m=1}^{K} \widehat{\psi}^{(m)}\).
→ 모든 데이터 사용 + sample splitting 의 정직성 유지.
직관 — Cross-fitting vs Cross-validation 의 차이: CV 는 예측 정확도 평가, cross-fitting 은 통계적 정직성 확보. 같은 도구 (K-fold) 가 다른 목표. DR ML 의 cross-fitting 은 CV 의 인과 분석 적응.
직관 — \(K=2\) vs \(K=5\) vs \(K=10\): \(K=2\) 는 절반 데이터로 적합 — variance loss 큼. \(K=10\) 은 90% 로 적합 — variance loss 작지만 계산 10 배. \(K=5\) 가 균형. 더 큰 \(K\) 는 finite- sample 에서 안정성 향상 — 표본 작으면 큰 \(K\) 권장.
3.4 Double/Debiased Machine Learning (DDML)
이론적 근거 + 실무 가이드를 통합한 framework:
전제: - 두 ML 모형이 \(n^{-1/4}\) 보다 빠르게 수렴 (smooth 또는 sparse 함수에서 만족). - DR (AIPW) 형태 사용. - Cross-fitting 적용.
보장: - 추정량 편향 \(o(n^{-1/2})\). - 점근 정규성. - 95% Wald CI valid.
Software: DoubleML (R, Python), EconML.
직관 — DDML 의 학제적 영향: 통계학 + 계량경제학 + 머신러닝의 결합. 2018 년 이후 인과 분석 + ML 의 표준 도구로 자리잡음. 이론적 보장 + 실무 도구 + 다양한 software 패키지.
직관 — Smooth 또는 Sparse 가정: 진짜 함수 \(\pi(x), b(x)\) 가 매끄러우면 ML 이 빠르게 수렴 (\(n^{-1/4}\) 이상). 또는 함수가 sparse (중요 변수 적음) — lasso 가 빠르게 수렴. 두 가정 중 하나 합리적이면 DDML valid.
4 NHEFS 사례에 DR ML 적용
NHEFS 9 변수 → 다항식·spline·교호항 확장 시 50~100 모수. 일반 logistic 으로 적합 가능.
더 고차원: 만약 NHEFS 에 100+ 변수 (유전자 score, lab values 추가) 가 있다면: - 단순 logistic: misspecification 위험. - DR ML: gradient boosting 으로 \(\widehat{\pi}, \widehat{b}\) 추정 + 5-fold cross-fitting.
기대 결과: 표준 분석 (Ch.12-13) 의 3.4-3.5kg 와 비슷한 추정. 단순 모형이 합리적이면 DR ML 의 추가 가치 작음.
직관 — NHEFS 가 DR ML 에 ideal 아닌 이유: 9 변수 + quadratic 으로 충분히 specifiable. DR ML 의 진가는 수백 변수 + 비선형 효과 가 있는 데이터 (예: EHR 코호트, 유전자 + lab data). 이런 데이터에서 표준 logistic 은 misspecification, DR ML 이 valid.
직관 — 작은 데이터에서 DR ML 의 함정: NHEFS 1566 명에서 5-fold cross-fitting → 1252 명 적합. ML 적합 정확도 표본 부족으로 떨어짐 → DR ML 의 이론적 보장이 작은 표본에서 성립 안 할 수 있음. DR ML 은 큰 표본 + 고차원 + 도메인 지식 부족 시나리오에 최적.
5 DR ML 의 5 단계 절차
Step 1: DAG 분석 → confounder 변수 \(X\) 결정 (편향 유발 변수 제외).
Step 2: 데이터를 \(K\) fold 로 분할.
Step 3: 각 fold \(m\) 에 대해 - Training fold (\(K-1\) 개): \(\widehat{b}^{(m)}, \widehat{\pi}^{(m)}\) 적합 (ML). - Estimation fold (\(1\) 개): \(\widehat{\psi}_1^{(m)} = \frac{1}{|m|} \sum_{i \in m} [\widehat{b}^{(m)}(X_i) + \frac{A_i}{\widehat{\pi}^{(m)}(X_i)} (Y_i - \widehat{b}^{(m)}(X_i))]\).
Step 4: 평균: \(\widehat{\psi}_1 = \frac{1}{K} \sum_{m=1}^{K} \widehat{\psi}_1^{(m)}\). (\(\widehat{\psi}_0\) 도 동일).
Step 5: ATE = \(\widehat{\psi}_1 - \widehat{\psi}_0\). 분산은 bootstrap 또는 influence function.
직관 — 절차의 통합: 표준 ML pipeline + cross-validation + AIPW 의 결합. 각 단계가 익숙한 도구이지만 통합 이 인과 분석의 새 기여. 2018 년 이후 인과 ML 의 표준.
직관 — Influence Function 분산 추정: AIPW 의 영향 함수 (influence function) 로 분산 직접 계산 가능 — bootstrap 보다 빠름. 큰 데이터에서 권장. NHEFS 같은 작은 데이터는 bootstrap 도 합리적.
6 도구 비교 — 단순 ML vs DR ML
| 측면 | 단순 ML 적용 | DR ML |
|---|---|---|
| 추정량 형태 | IPW 또는 g-formula | AIPW (DR) |
| 모형 적합 | ML 단독 | ML + Cross-fitting |
| 95% CI Coverage | < 95% (under-coverage) | 95% 보장 |
| 수렴 속도 | \(n^{-1/4}\) | \(n^{-1/2}\) (DR + cross-fit) |
| 정규화 편향 | 인과 추정량으로 전파 | 자동 상쇄 |
| 구현 비용 | 낮음 | 중간 (cross-fitting) |
| 인과 분석 추천 | NO | YES |
직관 — 통합의 가치: 단순 ML + 인과 절차의 단순 결합은 위험. DR + cross-fitting 의 결합이 안전. 올바른 도구 선택 = 정확도 보장.
7 Sensitivity 와 Robustness 점검
DR ML 사용 시에도 다음 점검 필수:
- PS Overlap: 추정된 \(\widehat{\pi}(X)\) 분포가 [0.05, 0.95] 범위. 극단치는 trim.
- Multiple ML algorithms: gradient boosting + random forest + lasso 비교. 결과 일치 → robust.
- Multiple K: \(K=2, 5, 10\) 결과 비교. 안정성 점검.
- Influence function 분산 vs Bootstrap: 두 분산 비슷한지.
- Sensitivity to misspecification: 다른 변수 specification 으로 결과 변동.
직관 — DR ML 의 강건성 검증: 단일 ML 알고리즘 + 단일 \(K\) 의 결과만 보면 위험. 다중 시도 + 결과 일치성으로 robust 검증. DR ML 은 마법 아닌 도구의 묶음.
8 응용 분야
- EHR 코호트 인과 분석: 수백 변수 + ML 적합
- Genome-wide 분석: SNP 변수 + Mendelian Randomization + DR ML
- 마케팅 attribution: 사용자 features 수백 개 + 캠페인 효과
- Online experimentation: pre-experiment 변수 풍부한 환경
- 공중보건 정책: 정책 효과의 robust 추정 + 강건성 다중 검증
9 코드 — DR ML with EconML / DoubleML
# === EconML 패키지 사용 (Microsoft Research) ===
import pandas as pd
import numpy as np
from econml.dml import DML
from econml.dml import LinearDML
from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier
nhefs = pd.read_csv("nhefs.csv").dropna(subset=["wt82_71"]).reset_index(drop=True)
L_cols = ["sex", "race", "education", "age", "smokeintensity",
"smokeyrs", "exercise", "active", "wt71"]
X = nhefs[L_cols].values
A = nhefs["qsmk"].values
Y = nhefs["wt82_71"].values
# === LinearDML — Chernozhukov 의 DDML 표준 구현 ===
est = LinearDML(
model_y=GradientBoostingRegressor(n_estimators=200, max_depth=4),
model_t=GradientBoostingClassifier(n_estimators=200, max_depth=4),
discrete_treatment=True,
cv=5 # 5-fold cross-fitting
)
est.fit(Y=Y, T=A, X=None, W=X) # W: confounder 만 (X 는 effect modifier 용)
ate = est.const_marginal_effect()
print(f"DR ML ATE: {ate.mean():.2f}")
print(f"95% CI: {est.const_marginal_effect_interval(alpha=0.05)}")
# === DoubleML 패키지 (R port to Python) ===
from doubleml import DoubleMLPLR
import doubleml as dml
# Data 준비
df_dml = pd.DataFrame(np.column_stack([Y, A, X]),
columns=["Y", "A"] + L_cols)
data = dml.DoubleMLData(df_dml, y_col="Y", d_cols="A", x_cols=L_cols)
# 모형 설정
ml_l = GradientBoostingRegressor(n_estimators=200)
ml_m = GradientBoostingClassifier(n_estimators=200)
dml_plr = dml.DoubleMLPLR(data, ml_l=ml_l, ml_m=ml_m,
n_folds=5, n_rep=1)
dml_plr.fit()
print(dml_plr.summary)
# === 직접 구현 (5-fold cross-fitting) ===
from sklearn.model_selection import KFold
def dr_ml(X, A, Y, K=5):
n = len(X)
kf = KFold(n_splits=K, shuffle=True, random_state=42)
psi1_estimates = []
psi0_estimates = []
for train_idx, est_idx in kf.split(X):
X_tr, X_es = X[train_idx], X[est_idx]
A_tr, A_es = A[train_idx], A[est_idx]
Y_tr, Y_es = Y[train_idx], Y[est_idx]
# 처치 모형 (ML)
ps_model = GradientBoostingClassifier(n_estimators=200).fit(X_tr, A_tr)
pi_hat = np.clip(ps_model.predict_proba(X_es)[:, 1], 0.05, 0.95)
# 결과 모형 — 처치군과 대조군 별로 적합
b1_model = GradientBoostingRegressor(n_estimators=200).fit(
X_tr[A_tr == 1], Y_tr[A_tr == 1]
)
b0_model = GradientBoostingRegressor(n_estimators=200).fit(
X_tr[A_tr == 0], Y_tr[A_tr == 0]
)
b1_hat = b1_model.predict(X_es)
b0_hat = b0_model.predict(X_es)
# AIPW 추정
psi1 = np.mean(b1_hat + (A_es / pi_hat) * (Y_es - b1_hat))
psi0 = np.mean(b0_hat + ((1 - A_es) / (1 - pi_hat)) * (Y_es - b0_hat))
psi1_estimates.append(psi1)
psi0_estimates.append(psi0)
return np.mean(psi1_estimates) - np.mean(psi0_estimates)
ate_dr = dr_ml(X, A, Y)
print(f"\nManual DR ML ATE: {ate_dr:.2f}")10 한 줄 요약
DR ML 은 second-order bias 형태로 두 ML 모형의 오차를 곱으로 묶어 ML 의 느린 수렴을 보완한다. Sample splitting 이 ML 모형 적합과 추정량 계산을 통계적으로 분리해 정직한 분산 보장. Cross- fitting 으로 절반 데이터의 효율 손실 회복 + 모든 데이터 사용. Chernozhukov et al. (2018) 의 DDML 이 이론적 보장 + 실무 표준. NHEFS 사례는 9 변수로 단순 모형 충분 — DR ML 의 진가는 수백 변수 + 도메인 지식 부족 환경에서. EconML, DoubleML 같은 software 가 표준 구현 제공.
11 관련 주제
선행 지식
후속 주제
다른 카테고리 연결