인과 추론과 머신러닝 + Doubly Robust ML

Hernan Ch.18.3~18.4 — 고차원 ML 의 인과 분석 적용 + sample splitting · cross-fitting

Hernan & Robins (2020) Ch.18.3~18.4 를 다룬다. 고차원 보정 변수에서 단순 ML 적용의 위험, Doubly Robust 추정량의 second-order bias 가 ML 의 느린 수렴을 보완하는 메커니즘, sample splitting 의 통계적 정직성 확보, cross-fitting 으로 효율 회복, 그리고 Chernozhukov et al. (2018) 의 Double/Debiased ML 표준 절차를 정리한다.

Experimentation
Causal Inference
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: Doubly Robust ML 추정량

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}]\) 의 일치 추정.

정의: Sample Splitting + Cross-fitting
  1. 데이터를 두 (또는 \(K\)) 부분으로 나눔.
  2. 한 부분 (\(training\)) 으로 ML 모형 적합 → \(\widehat{b}, \widehat{\pi}\).
  3. 다른 부분 (\(estimation\)) 에서 추정량 계산.
  4. Roles 바꿔 반복 → cross-fitting 으로 효율 회복.

핵심: ML 모형 적합과 추정량 계산이 통계적으로 독립 → 추정량 분산 정직.

직관 — DR ML 의 마법: 두 모형의 형태 편향 → 한 모형이 정확하면 다른 모형의 오차가 추정량에 영향 안 줌. ML 의 \(n^{-1/4}\) 수렴 속도가 두 모형에 결합되면 \(n^{-1/2}\) 수렴 → 95% Wald CI valid. ML 의 느린 수렴 속도를 DR 이 가속.

2 18.3 인과 추론과 머신러닝

2.1 고차원에서 단순 추정량의 한계

단순 IPW · g-formula 의 ML 적용 위험

고차원 \(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 의 메커니즘

Lasso · Ridge · Boosting 의 정규화 편향

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 추정량의 편향 분석

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 의 필요성

Full-Sample 의 함정

같은 데이터로 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\)-Fold Cross-fitting
  1. 데이터를 \(K\) 등분 (보통 \(K=5\) 또는 \(10\)).
  2. Fold \(m\) 을 estimation, 나머지 \(K-1\) fold 를 training.
  3. 각 fold \(m\) 에서 추정량 \(\widehat{\psi}^{(m)}\) 계산.
  4. 평균: \(\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)

Chernozhukov et al. (2018) 의 표준 절차

이론적 근거 + 실무 가이드를 통합한 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 의 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 적용 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 사용 시에도 다음 점검 필수:

  1. PS Overlap: 추정된 \(\widehat{\pi}(X)\) 분포가 [0.05, 0.95] 범위. 극단치는 trim.
  2. Multiple ML algorithms: gradient boosting + random forest + lasso 비교. 결과 일치 → robust.
  3. Multiple K: \(K=2, 5, 10\) 결과 비교. 안정성 점검.
  4. Influence function 분산 vs Bootstrap: 두 분산 비슷한지.
  5. 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 관련 주제

선행 지식

후속 주제

다른 카테고리 연결

Subscribe

Enjoy this blog? Get notified of new posts by email: