변수 선택은 어려운 문제이다

Hernan Ch.18.5 — DR ML 의 한계, 분산-편향 trade-off, 다중 sensitivity 의 우선

Hernan & Robins (2020) Ch.18.5 를 다룬다. DR ML 도 풀지 못하는 세 문제 — 도메인 지식 한계, 시간변동 처치의 구현 어려움, 분산-편향 trade-off. Confounder 추가가 분산을 폭발시키는 메커니즘, 변수 throw out 의 통계적 함정, 다중 분석 + sensitivity analysis 의 우선, 그리고 Hernan 의 마지막 메시지를 정리한다.

Experimentation
Causal Inference
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: 변수 선택의 본질적 어려움

DR ML 도 다음 세 문제는 해결 못 함:

  1. 도메인 지식 한계: 모든 confounder 식별 + 편향 유발 변수 제외에는 강한 도메인 지식 필요.

  2. 시간변동 처치의 고차원: Part III 의 시간변동 처치에서 DR ML 구현 어려움. Single-robust 추정량이 흔함.

  3. 분산-편향 trade-off: Confounder 추가 → 편향 감소, 그러나 PS 가 0/1 에 가까워져 분산 폭발. 변수 throw out → 분산 감소하지만 통계적 보장 무효.

직관 — 변수 선택의 종착점: DR ML 같은 첨단 도구도 도구의 한계 가 있음. 인과 분석은 통계 + 인과 추론 + 도메인 지식 + 인식적 정직성의 결합. 단일 분석으로 결정 불가, 다중 분석 + sensitivity 가 표준.

2 18.5 변수 선택의 세 어려움

2.1 (1) 도메인 지식 한계

도메인 지식이 부족한 상황

Confounder 식별 + 편향 유발 변수 제외에는 도메인 지식 이 first authority. 그러나 실무에서:

  1. 새로운 분야 (genomics, social media 행동) 에서 인과 메커니즘 이해 부족.

  2. 측정되지 않은 변수 (가족력, 정신 건강, 사회 네트워크) 가 confounder 일 가능성.

  3. 같은 변수가 다른 도메인 전문가에게 다른 해석 (collider vs confounder).

  4. 시간변동 처치의 매개자 vs confounder 구분 어려움.

DR ML 의 통계적 보장은 “\(L\) 이 모든 confounder 포함 + 편향 유발 변수 없음” 가정 위에서만 valid. 이 가정 자체는 데이터로 검증 불가.

직관 — DAG 의 도메인 의존성: DAG 그리기는 인과 메커니즘 이해의 결과 — 도메인 전문가의 의견에 따라 다른 DAG 가능. 같은 데이터에 다른 DAG → 다른 confounder 집합 → 다른 결과. 다중 도메인 가정 시나리오의 sensitivity 가 정직성.

직관 — NHEFS 의 미관측 confounder 위험: 9 변수 baseline 외에 측정 안 된 confounder 가능성: 가족력 (유전적 사망 위험), 정신 건강 (스트레스 → 흡연 + 사망), 직업 노출 (공해 작업). 이 변수들이 흡연 결정 + 사망에 모두 영향이면 9 변수 보정도 부족. E-value 같은 sensitivity 도구로 미관측 confounding 의 정도 정량화.

2.2 (2) 시간변동 처치의 구현 어려움

시간변동 + DR ML 의 격차

Part III 의 시간변동 처치 분석:

  • 매 시점의 처치 모형 + 결과 모형 + censoring 모형 = \(T\) 시점이면 모형 \(3T\) 개.
  • 각 모형에 ML 적합 + cross-fitting → 계산 비용 폭발.
  • 시간변동 g-formula 의 Monte Carlo 시뮬레이션 + ML 결합은 표준 구현 부재.
  • 시간변동 g-estimation + ML 은 더 복잡.

→ 대부분의 발표된 시간변동 분석은 single-robust 추정량 (IPW MSM 또는 g-formula) + 단순 logistic 또는 Cox.

직관 — 시간변동에서 도구의 단순화: 단일 시점은 DR ML 의 이론적 보장 풍부. 시간변동은 복잡성 으로 인해 단순 도구가 표준. 이론과 실무의 격차 — Hernan 의 솔직한 인정.

직관 — 시간변동 + 고차원의 미래: 활발한 연구 분야. 신경망 기반 g-formula, deep reinforcement learning 결합, transformer 기반 처치 sequence 모형링 등. 2025 년 이후 표준화 진행 중.

2.3 (3) 분산-편향 Trade-off

Confounder 추가의 양면성

Confounder \(X\) 추가 → 편향 감소 → 좋음.

그러나 일부 \(X\) 가 처치 \(A\)강한 연관:

  • Propensity \(\pi(X)\) 가 0 또는 1 에 가까움 → IPW 가중치 폭발.
  • DR ML 의 valid CI 도 매우 넓어짐 → 의사결정에 무용.

해결 시도: 강한 처치 예측자 일부 throw out → 분산 감소. 그러나: 통계적 보장 (95% CI valid) 깨짐. 데이터에서 변수 선택 = 새 post-data 결정.

직관 — Variance Inflation 의 메커니즘: 강한 처치 예측자 (예: 의사 선호도) 보정 → 처치- 대조의 PS 분포가 거의 안 겹침. PS 가 0.99 인 사람의 IPW weight = 100. 이런 사람이 한 명만 있어도 추정량이 그 사람의 결과에 좌우 → 분산 폭발.

직관 — Throw out 의 통계적 함정: 데이터에서 “이 변수가 분산 폭발 시킨다” 보고 제외 → post-data 변수 선택. CI 의 95% 보장은 pre-data 변수 집합에서만 valid. 데이터를 보고 변수 선택하면 CI 가 거짓.

2.4 Hernan 의 철학적 질문

깊은 모순 (Hernan, Ch.18.5)

“If the confidence interval is invalid when we use the data to rule out, say, 5 variables that make the variance too large, then why should the confidence interval be valid if we had happened to receive a dataset that did not include those 5 variables?”

= “데이터에서 5 변수를 throw out 하면 CI invalid, 그런데 그 5 변수를 처음부터 측정 안 했으면 CI valid? 그 차이는 무엇인가?”

= 모든 관찰 분석에서 측정되지 않은 confounder 가 항상 있음. 이 confounder 는 자동 throw out 됨. 그러면 모든 관찰 분석의 CI 는 invalid?

직관 — 통계적 정직성의 한계: 통계적 보장이 측정된 변수 에 한정. 미측정 변수의 영향은 sensitivity analysis 외에 정량화 불가. 모든 인과 분석이 가정 위에 build.

직관 — Frequentist CI 의 한계 인식: CI 의 95% 보장이 strict frequentist sense 에서는 거의 만족 안 됨. 그러나 가정 위에서의 95% 보장 은 의사결정 도구로 유용. CI 를 절대적 진리로 받아들이지 말고 가정의 강건성과 함께 해석.

3 Sensitivity Analysis 의 우선

Hernan 의 결론적 권장

“Implement several analytic methods and inspect the resulting effect estimates. If the various effect estimates are compatible, we will be more confident in the results. If the various effect estimates are not compatible, our job as researchers is to try to understand why.”

다중 분석의 종류:

  1. 다른 도구: IPW, 표준화, g-estimation, PS matching, IV, DR ML — 각 가정이 다름.

  2. 다른 변수 specification: linear vs spline, with/without 효과 수정, 다른 confounder 집합.

  3. 다른 ML 알고리즘: lasso, random forest, gradient boosting, neural net.

  4. 다른 K-fold: \(K=2, 5, 10\).

  5. 다른 sensitivity: E-value, tipping point, Manski bound, Rosenbaum bound.

→ 결과의 robust 일치성 이 confidence 의 진짜 신호.

직관 — 일치성이 robustness 의 신호: 5 가지 도구가 다른 가정에 의존. 모두 비슷한 결과 → 모든 가정 위반 가능성 작음. 단일 도구의 좁은 CI 보다 5 가지 도구의 일치한 점추정이 더 신뢰.

직관 — 불일치가 신호로: 도구 간 결과 차이 → 적어도 한 가정 위반. 도메인 지식으로 어느 가정이 위반될 가능성 평가 + 추가 sensitivity. NHEFS 사례에서 IV 만 다른 결과 (3.4 vs 2.4) → IV 의 weak instrument 문제로 설명 가능.

4 NHEFS 종합 분석 — 모든 도구의 결과

NHEFS 의 11 도구 결과 (Ch.12-18 종합)

체중 효과 (kg, 95% CI): - IPW MSM (12-1): 3.4 (2.4, 4.5) - 안정화 IPW MSM (12-2): 3.4 (2.4, 4.5) - 표준화 (13-2): 3.5 (2.6, 4.5) - G-estimation single (13-3): 3.45 (2.5, 4.5) - G-estimation 다중: \(\beta_1=2.86, \beta_2=0.03\) → ATE ≈ 3.49 - Outcome regression (15-1): 3.5 (2.6, 4.3) - PS 층화 (15-2): 3.5 (2.6, 4.4) - PS 표준화 (15-2): 3.6 (2.7, 4.6) - PS 매칭 (15-2): ~3.5 (matched 부분군) - IV — Wald (15-1): 2.4 (-36.5, 41.3) — weak IV - DR ML (가상, 17-2): ~3.5 (보수적 추정)

일치성 평가: 10/11 도구가 3.4-3.6kg 로 robust 일치. IV 만 weak instrument 로 다름.

사망 효과 (% 차이, 120 month): - IPW MSM (16-2): +0.2% (-4.1, +3.7) - g-formula (16-3): +0.3% (-3.9, +4.1)

일치성: 두 도구 모두 거의 0 효과 — robust.

직관 — NHEFS 결론의 robustness: 11 도구 중 10 이 일치 → 결과 매우 robust. 다중 도구가 가정 위반 위험을 분산. IV 만 다른 이유는 weak instrument 의 통계적 문제 (가정 위반 아님) 로 설명 가능.

직관 — 사망 분석의 한계: 사망 효과 거의 0 인 결론은 추적 기간 10 년 의 한계. 흡연으로 인한 만성 질환 (폐암, COPD, 심혈관 질환) 의 효과 발현은 더 긴 기간 필요. 인과 결론은 추적 기간에 의존.

5 변수 선택의 실무 가이드 (종합)

인과 분석의 변수 선택 5 단계 (Hernan 종합)

Step 1: DAG 그리기 (도메인 지식) - 처치 \(A\), 결과 \(Y\), 가능한 confounder 와 매개자·충돌자·도구를 노드로. - 화살표는 인과 메커니즘 표현. - 미관측 confounder \(U\) 도 노드로 (sensitivity 용).

Step 2: 각 변수의 인과적 역할 식별 - Backdoor criterion: \(A\) 에서 \(Y\) 로의 backdoor 경로 차단할 변수 집합. - Confounder, mediator, collider, instrument, outcome predictor 분류.

Step 3: 보정 집합 결정 - Confounder 포함, 편향 유발 변수 제외. - 미측정 confounder 가능성 평가 → sensitivity bound (E-value).

Step 4: 분석 도구 선택 - 저차원 + 자신: outcome regression, IPW - 고차원 + 큰 표본: DR ML - 미관측 교란 의심: IV - Robustness: 다중 도구

Step 5: 결과 + sensitivity 보고 - 점추정 + CI + sensitivity (E-value, multiple methods 일치성) - 가정 명시 + 한계 인식 - 다중 분석 시나리오 결과 비교

직관 — 5 단계의 본질: Step 1-3 은 데이터 보지 않고 결정 (DAG 분석). Step 4 는 도구 선택. Step 5 는 결과 + 강건성. 데이터를 보면서 변수 선택 결정 = post-data, 통계적 보장 무효.

6 Hernan 의 마지막 메시지

Ch.18 의 결론

“Developing a clear set of general guidelines for variable selection may not be possible.”

= 변수 선택의 명확한 일반 가이드는 불가능. 이유:

  1. 인과 메커니즘은 도메인마다 다름.
  2. DAG 분석은 도메인 지식 의존.
  3. Sensitivity analysis 가 단일 절차로 통합 안 됨.
  4. 도구 선택은 데이터 + 가정 + 목표 trade-off.

“The best scientific advice for causal inference may be to carry out multiple sensitivity analyses: implement several analytic methods and inspect the resulting effect estimates.”

= 인과 분석의 최고의 조언은: 다중 분석 + sensitivity. 결과 일치 → robust. 불일치 → 이해 시도.

직관 — 인과 분석의 본질적 겸손: “쉬운 답은 없다” 는 정직한 인정. 통계 도구로 모든 문제 해결 안 됨. 도메인 지식 + 다중 도구 + sensitivity + 가정 명시 의 결합이 표준. 단일 분석 + 단일 점추정에 의존하는 분석은 기각.

7 DR ML 의 적절한 위치

DR ML 은 도구 중 하나, 만능 솔루션 아님:

  • DR ML 의 강점: 고차원 + 큰 표본 + 도메인 지식 부족 환경에서 valid CI.
  • DR ML 의 한계: 도메인 지식 한계, 시간변동 구현 어려움, 분산 폭발.
  • DR ML 의 적절한 위치: 다중 분석의 한 도구, 결과 일치성으로 robustness 검증.

직관 — 첨단 도구의 겸손한 사용: DR ML 이 2018 년 이후 인과 분석의 핵심 도구가 됐지만, 단일 도구로 모든 문제 해결 안 됨. 도구 box 안의 하나 로 사용하면서 다른 도구의 결과와 비교가 표준.

8 응용 분야

  • EHR 코호트 + ML: 다중 도구 + DR ML + sensitivity
  • 공중보건 정책 평가: 다중 분석 시나리오
  • 약물 안전성 분석: PS matching + DR ML + sensitivity
  • 마케팅 attribution: 다중 도구 + bootstrap
  • A/B 테스트 비순응 처리: per-protocol + IV + ITT 비교

9 코드 — 다중 도구 결과 비교

import pandas as pd
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier
from sklearn.model_selection import KFold
import statsmodels.formula.api as smf

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"]

# === 도구 1: Outcome Regression ===
formula = f"wt82_71 ~ qsmk + " + " + ".join(L_cols + [f"I({c}**2)" for c in ["age", "smokeintensity", "smokeyrs", "wt71"]])
m_or = smf.ols(formula, data=nhefs).fit()
ate_or = m_or.params["qsmk"]

# === 도구 2: IPW ===
ps_formula = "qsmk ~ " + " + ".join(L_cols + [f"I({c}**2)" for c in ["age", "smokeintensity", "smokeyrs", "wt71"]])
ps_model = smf.logit(ps_formula, data=nhefs).fit(disp=False)
nhefs["ps"] = ps_model.predict()
nhefs["w"] = np.where(nhefs["qsmk"]==1, 1/nhefs["ps"], 1/(1-nhefs["ps"]))
m_ipw = smf.wls("wt82_71 ~ qsmk", data=nhefs, weights=nhefs["w"]).fit()
ate_ipw = m_ipw.params["qsmk"]

# === 도구 3: PS Stratification ===
nhefs["ps_decile"] = pd.qcut(nhefs["ps"], 10, labels=False)
ate_strata = []
for d in range(10):
    sub = nhefs[nhefs["ps_decile"]==d]
    if (sub["qsmk"]==1).sum() > 0 and (sub["qsmk"]==0).sum() > 0:
        ate_strata.append(smf.ols("wt82_71 ~ qsmk", data=sub).fit().params["qsmk"])
ate_ps_strat = np.mean(ate_strata)

# === 도구 4: DR ML ===
def dr_ml(X, A, Y, K=5):
    n = len(X)
    kf = KFold(n_splits=K, shuffle=True, random_state=42)
    psi1, psi0 = [], []
    for train, est in kf.split(X):
        ps = GradientBoostingClassifier(n_estimators=100).fit(X[train], A[train])
        pi = np.clip(ps.predict_proba(X[est])[:, 1], 0.05, 0.95)
        b1 = GradientBoostingRegressor(n_estimators=100).fit(X[train][A[train]==1], Y[train][A[train]==1]).predict(X[est])
        b0 = GradientBoostingRegressor(n_estimators=100).fit(X[train][A[train]==0], Y[train][A[train]==0]).predict(X[est])
        psi1.append(np.mean(b1 + (A[est]/pi)*(Y[est] - b1)))
        psi0.append(np.mean(b0 + ((1-A[est])/(1-pi))*(Y[est] - b0)))
    return np.mean(psi1) - np.mean(psi0)

ate_drml = dr_ml(nhefs[L_cols].values, nhefs["qsmk"].values, nhefs["wt82_71"].values)

print("=== NHEFS 다중 도구 ATE 결과 ===")
print(f"Outcome Regression: {ate_or:.2f}")
print(f"IPW:                {ate_ipw:.2f}")
print(f"PS Stratification:  {ate_ps_strat:.2f}")
print(f"DR ML:              {ate_drml:.2f}")
print()
print("결과의 일치성 → 결과 robust")

# === Sensitivity: E-value 계산 ===
import math
def evalue(rr):
    return rr + math.sqrt(rr * (rr - 1))

# 체중 효과를 RR 형태로 변환 (가정)
mean_y_treated = nhefs[nhefs.qsmk==1].wt82_71.mean()
mean_y_untreated = nhefs[nhefs.qsmk==0].wt82_71.mean()
rr_approx = mean_y_treated / mean_y_untreated if mean_y_untreated != 0 else float('inf')
print(f"\nE-value (체중 RR 기준): {evalue(rr_approx):.2f}")

10 한 줄 요약

DR ML 도 풀지 못하는 세 문제 — 도메인 지식 한계, 시간변동 구현 어려움, 분산-편향 trade-off. 변수 throw out 의 통계적 함정 (post-data 결정 → CI invalid). Hernan 의 결론은 다중 분석 + sensitivity analysis 의 우선. 11 도구의 NHEFS 결과 일치 (체중 3.5kg, 사망 ~0%) 가 robust 신호. 인과 분석은 통계 + 인과 추론 + 도메인 지식 + 인식적 정직성의 결합. 단일 분석에 의존 금지, 다중 도구 + 가정 명시 + 한계 인식 = 표준.

11 관련 주제

선행 지식

후속 주제 — Part III

다른 카테고리 연결

Subscribe

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