1 정의
Confounder: \(A\) 와 \(Y\) 의 공통 원인 (또는 그 surrogate). 보정 시 backdoor 차단 → 편향 감소.
Bias-Inducing Variable: 보정 시 새 편향을 도입하거나 기존 편향을 증폭 하는 변수. 5 종류: - 충돌자 (Collider) - 매개자 (Mediator) - 충돌자의 후손 - M-bias 변수 (pre-treatment 충돌자) - 도구 (Instrument)
직관 — 보정의 양면성: “변수를 더 보정하면 편향 감소” 는 일반적으로 틀린 직관. Confounder 보정 → 편향 감소. 충돌자 보정 → 편향 증가. 변수의 인과적 역할에 따라 보정의 방향이 정반대 — DAG 분석으로 결정.
2 18.1 인과 분석과 예측 분석의 변수 선택
2.1 두 분석의 본질적 차이
| 측면 | 예측 분석 | 인과 분석 |
|---|---|---|
| 목표 | \(\widehat{Y}\) 가 \(Y\) 와 가까움 | \(\widehat{\mathrm{E}}[Y^{a=1} - Y^{a=0}]\) 가 진짜 ATE 와 가까움 |
| 모수의 의미 | 예측 도구 — 인과 의미 X | 인과 효과 — 직접 해석 가능 |
| 변수 선택 기준 | 예측 정확도 (cross-validation) | DAG 분석 (도메인 지식) |
| 표준 도구 | Lasso, RF, NN, Boosting | g-method, IV, DR + DAG |
| 평가 지표 | RMSE, AUC, log-loss | E-value, sensitivity, robustness |
| 변수 추가 | 정확도 향상 시 추가 | 인과 역할 따라 결정 |
직관 — Heart Failure 예측의 함정: 환자 데이터로 heart failure 예측 모형 — “prior hospitalization” 이 강한 예측자. 결론: “병원 입원시키지 말라” → nonsense. 입원이 결과를 예측 하지 원인이 아님. 예측 알고리즘이 자동으로 인과 변수 선택 안 함.
직관 — Smoking cessation 의 다른 시나리오: 데이터에서 흡연 중단이 체중 증가와 연관 → 예측 모형이 흡연 중단을 강한 예측자로 선택. 인과 분석에서는 confounder (나이, 이전 건강 상태) 보정 후 ATE 추정. 두 분석이 같은 데이터에서 같은 도구로 다른 결론 — 목표가 결정.
2.2 Tuning Parameters 와 Cross-Validation
ML 알고리즘은 hyperparameter 가 있음:
- Lasso/Ridge: regularization parameter \(\lambda\) (계수 shrinkage 정도).
- Random Forest: number of trees, max depth, min samples per leaf.
- Neural Network: layer 수, layer 당 unit 수, learning rate.
Cross-validation 으로 예측 정확도 최적화 → \(\lambda\) 선택. 그러나 인과 분석에서 같은 \(\lambda\) 가 confounder 를 zero 로 shrunk 시킬 수 있음 → 보정 안 된 상태.
직관 — Lasso 의 위험: Lasso 는 weak predictor 의 계수를 정확히 0 으로 만듦. 진짜 confounder 가 weak predictor 면 lasso 가 자동 제외 → 보정 안 됨. 인과 분석에서 lasso 는 신중히 사용.
직관 — CV 의 한계: CV 는 예측 정확도 최적화, 인과 추정 정확도 최적화 아님. 인과 분석 의 목표 (편향 감소) 에 직접적으로 작동 안 함. CV 가 적용 가능한 영역은 nuisance 모형의 근사 정확도, 인과 추정량 자체 아님.
2.3 Black-Box Algorithms 의 위험
Black-box ML (deep neural net, complex random forest 등) 의 단점:
해석 어려움: 어떤 변수가 어떻게 사용됐는지 추적 어려움. Confounder 보정 검증 불가.
새 환경에서 성능 저하: training set 의 국소 패턴 (often non-causal) 에 의존. 다른 환경에 transport 시 실패.
차별 패턴 학습: training data 의 사회적 차별 패턴 (예: 인종별 다른 진료) 을 그대로 학습 → 정책 적용 시 차별 재생산.
Confounder 의 implicit 처리: ML 이 confounder 를 명시적으로 보정 안 하고 데이터의 noise 를 fit → 인과 의미 없는 결과.
직관 — Deep Learning 의 매력 vs 위험: 음성 인식, 이미지 분류 같은 영역에서 인간 수준 정확도. 그러나 인과 분석에서 같은 도구가 다른 데이터 분포 에 transport 안 됨. NHEFS 사례에 deep learning 적용해도 confounder 보정 자동화 안 됨 — DAG 가 first authority.
직관 — 의료 AI 의 차별 위험: 인종별 다른 진료 패턴이 training data 에 있으면 ML 이 “흑인 환자에게는 통증약 적게” 같은 차별 패턴 학습. 정책 결정에 적용 시 차별 재생산. 인과 분석은 차별 메커니즘 식별 + 제거 도구, 단순 ML 은 차별 증폭 도구.
3 18.2 편향 유발 변수의 종류
3.1 (1) Collider — Figure 18.1
DAG: \(A \to L \leftarrow Y\) (또는 \(A \to L \leftarrow U \to Y\))
\(L\) 은 \(A\) 와 \(Y\) (또는 \(Y\) 의 원인 \(U\)) 의 공통 결과.
보정 안 함: \(A\) 와 \(Y\) 사이 backdoor 없음 → \(\mathrm{E}[Y|A=1] - \mathrm{E}[Y|A=0]\) 가 ATE 의 일치 추정.
보정 함: \(A \to L \leftarrow Y\) 의 collider path 활성화 → \(A\)-\(Y\) 가짜 연관 도입 → \(A=0\) 일 때 \(\mathrm{E}[Y^{a=1}] - \mathrm{E}[Y^{a=0}] = 0\) 인데도 추정값 비영. selection bias under the null.
직관 — Berkson’s bias 의 일반화: 의학에서 “병원 입원자는 두 질병이 함께 있는 비율이 일반 인구보다 높다” — 입원 (collider) 으로 conditioning. 두 질병이 인구 수준에서 무관해도 입원 환자 중에서는 가짜 연관. Conditioning on collider = selection bias 의 일반 메커니즘.
직관 — NHEFS 의 잠재 충돌자: “병원 방문 빈도” — 흡연 중단 (건강 의식) 의 결과이자 사망 (건강 악화) 의 결과. 보정 시 \(A\)-\(Y\) 가짜 연관. post-treatment 변수 보정의 흔한 함정.
3.2 (2) Descendant of Collider — Figure 18.2
DAG: \(A \to B \leftarrow U \to Y\), 그리고 \(B \to L\)
\(B\) 는 충돌자, \(L\) 은 \(B\) 의 후손.
\(L\) 보정: \(B\) 의 정보를 부분적으로 전달 → 충돌자 보정과 비슷한 편향 도입.
직관 — 충돌자 후손도 위험: 직접 충돌자 아니지만 충돌자의 정보 전달자. 보정 시 부분적 편향 — 충돌자 직접 보정보다 약하지만 무시 안 됨. DAG 에서 충돌자 후손도 식별 + 제외.
3.3 (3) Mediator — Figure 18.3, 18.4
DAG: \(A \to L \to Y\)
\(L\) 은 처치 효과의 일부를 매개.
\(L\) 보정: - \(A \to L \to Y\) 경로 차단 → 매개 효과 추정 안 됨. - \(A \to Y\) 직접 효과만 추정 → ATE 가 아닌 direct effect. - ATE 가 목표면 매개자 보정 안 함.
직관 — Mediation 분석의 위치: ATE = direct effect + indirect effect (매개자 통과). 매개자 보정 시 indirect 차단 → direct effect 만 측정. 연구 질문이 “총 효과” 면 매개자 제외, “직접 효과” 면 매개자 포함. Ch.23 의 mediation 분석.
직관 — NHEFS 의 매개자 가능성: 흡연 중단 → 신체활동 변화 → 체중 변화. “1971-82 사이 신체활동 변화” 가 매개자. NHEFS 의 9 변수는 baseline 만 → 매개자 자동 제외. 좋은 설계 결정.
3.4 (4) Pre-treatment Variable that Blocks Backdoor — Figure 18.5
DAG: \(A\) 는 \(L\) 에 영향 안 줌, \(L\) 이 \(A \to Y\) 의 backdoor 차단.
(시간상 \(A\) 후이지만 \(A\) 가 \(L\) 의 원인 아님 — DAG 에서는 \(L \leftarrow U \to Y\) 같은 path)
\(L\) 보정: backdoor 차단 → 편향 감소.
핵심: DAG 가 시간 순서 무관 — \(A\) 가 \(L\) 에 영향 안 주면 \(L\) 보정 가능.
직관 — 시간 순서의 미묘함: “Post-treatment 변수는 보정 안 함” 은 대략 맞지만 절대 아님. \(A\) 가 \(L\) 에 인과적으로 영향 안 주면 (시간상 후라도) 보정 가능. DAG 분석이 시간 순서보다 우선.
직관 — 데이터로 결정 불가: 시간 순서 \(A \to L \to Y\) 같아 보여도 \(A\) 가 진짜 \(L\) 의 원인인지 데이터로 판단 불가 (인과 그래프는 데이터에서 직접 추출 안 됨). 도메인 지식 + DAG 가 first authority.
3.5 (5) M-Bias Variable — Figure 18.6
DAG: \(L \leftarrow U_1 \to A\), \(L \leftarrow U_2 \to Y\)
\(L\) 은 시간상 \(A\) 전에 측정 (pre-treatment) 이지만 \(U_1\) 과 \(U_2\) 의 충돌자.
\(L\) 보정: \(A \leftarrow U_1 \to L \leftarrow U_2 \to Y\) 의 path 활성화 → 가짜 연관.
M-Bias 라 부르는 이유: 화살표 그림이 M 자 모양.
직관 — Pre-treatment 도 충돌자 가능: 시간상 처치 전이라고 보정 안전한 게 아님. 두 미관측 원인의 충돌자면 같은 위험. Greenland (2003), Pearl (2009) 의 강한 경고.
직관 — M-bias 의 검증 어려움: \(U_1, U_2\) 는 미관측 → 데이터로 M-bias 검증 불가. 도메인 지식으로 \(L\) 이 두 미관측 원인의 결과인지 추론. 확실하지 않으면 sensitivity analysis.
3.6 (6) Instrument (Z-Bias) — Figure 18.7
DAG: \(Z \to A \to Y\), \(A \leftarrow U \to Y\) (미관측 교란 \(U\))
\(Z\) 는 도구 — backdoor 차단에 도움 안 됨.
\(Z\) 보정: (a) 미관측 교란 \(U\) 의 효과 증폭 (Pearl 2011) — Z-bias. (b) 일부 시나리오에서는 편향 감소 — 사전 결정 불가.
일반 권장: 도구는 보정 제외. 미관측 교란 처리는 IV 분석 (Ch.16) 으로 별도.
직관 — Z-bias 의 메커니즘: \(Z\) 가 처치의 외생적 변동. \(Z\) 보정 시 처치의 내생적 부분 (\(U\) 가 만든 부분) 이 결과와 더 강하게 연관 보임 → \(U\) 의 confounding 효과 과대. 외생적 변동을 보정하면 내생적 변동의 영향이 부풀려짐.
직관 — Bias amplification 의 일반성: 선형 SCM 에서 보장 (Pearl 2011), 일반 비선형에서도 흔함 (Ding et al. 2017). 약한 instrument 일수록 bias amplification 강함.
직관 — IV 와 보정의 분리: \(Z\) 가 도구로 식별되면 (a) 보정에서 제외, (b) 별도 IV 분석으로 미관측 교란 우회. 둘 다 같은 \(Z\) 를 사용하지만 다른 분석. NHEFS 의 담배 가격이 도구 후보 — 보정에 안 넣고 Ch.16 의 IV 분석으로 별도.
4 변수 선택의 의사결정 트리
변수 L 발견
↓
$L$ 이 $A$ 와 $Y$ 모두에 인과적으로 영향?
├─ 예 (Confounder) → 보정 포함
└─ 아니오 → 다음 질문
↓
$L$ 이 $A$ 의 결과?
├─ 예
│ └─ $L$ 이 $Y$ 에도 영향?
│ ├─ 예 (Mediator) → ATE 면 제외, mediation 분석이면 포함
│ └─ 아니오 (단순 후속) → 보정 무관 또는 제외
└─ 아니오
↓
$L$ 이 두 미관측 원인의 충돌자 (M-bias)?
├─ 예 → 보정 안 함
└─ 아니오 → 다음 질문
↓
$L$ 이 $A$ 와 $Y$ 의 공통 결과 (Collider)?
├─ 예 → 보정 안 함
└─ 아니오 → 다음 질문
↓
$L$ 이 $A$ 만의 원인 (Instrument)?
├─ 예 → 보정 제외 (Z-bias 위험), IV 분석에 사용 가능
└─ 아니오 → 다음 질문
↓
$L$ 이 $Y$ 만의 원인 (Predictor of Y, not confounder)?
├─ 예 → 보정 시 분산 감소, 편향 영향 미미. Optional 포함.
└─ 아니오 → 보정 무관
직관 — 의사결정의 본질: 모든 결정이 DAG 분석 에 기반. 통계 도구 (lasso, stepwise) 는 어디에도 사용 안 됨. 인과 변수 선택은 통계 외부의 영역.
5 코드 — 시뮬레이션으로 편향 메커니즘 확인
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
# === Collider 시뮬레이션 ===
np.random.seed(42)
n = 5000
# Sharp null: A 가 Y 에 영향 없음
A = np.random.binomial(1, 0.5, n)
Y = np.random.normal(0, 1, n)
# Collider: A 와 Y 가 모두 L 의 원인
L = A + Y + np.random.normal(0, 0.5, n)
df = pd.DataFrame({"A": A, "Y": Y, "L": L})
# 보정 안 함 → 편향 0
m1 = smf.ols("Y ~ A", data=df).fit()
print(f"Sharp null + No adjustment: A 효과 = {m1.params['A']:.3f} (진짜 = 0)")
# Collider 보정 → selection bias under null
m2 = smf.ols("Y ~ A + L", data=df).fit()
print(f"Sharp null + Collider 보정: A 효과 = {m2.params['A']:.3f} (편향 발견)")
# === Mediator 시뮬레이션 ===
np.random.seed(42)
n = 5000
A = np.random.binomial(1, 0.5, n)
M = 2 * A + np.random.normal(0, 1, n) # 매개자
Y_direct = A + np.random.normal(0, 1, n) # A 의 직접 효과 = 1
Y = Y_direct + M # 총 효과 = 1 + 2 = 3
df2 = pd.DataFrame({"A": A, "M": M, "Y": Y})
# 보정 안 함 → 총 효과 ~3
m3 = smf.ols("Y ~ A", data=df2).fit()
print(f"\nMediator + No adjustment: A 효과 = {m3.params['A']:.3f} (총 효과 ~3)")
# Mediator 보정 → 직접 효과 ~1
m4 = smf.ols("Y ~ A + M", data=df2).fit()
print(f"Mediator + 보정: A 효과 = {m4.params['A']:.3f} (직접 효과 ~1)")
# === Z-bias 시뮬레이션 ===
np.random.seed(42)
n = 5000
U = np.random.normal(0, 1, n) # 미관측 교란
Z = np.random.binomial(1, 0.5, n) # 도구
A = (0.3 * Z + 0.5 * U + np.random.normal(0, 1, n) > 0).astype(int)
Y = 1 * A + 1 * U + np.random.normal(0, 1, n) # 진짜 효과 1
df3 = pd.DataFrame({"Z": Z, "A": A, "Y": Y, "U": U})
# 보정 안 함 → 편향 (U 의 confounding)
m5 = smf.ols("Y ~ A", data=df3).fit()
print(f"\nNo Z, No U adj: A 효과 = {m5.params['A']:.3f} (진짜 1, U confounding 으로 편향)")
# Z 보정 → bias amplification
m6 = smf.ols("Y ~ A + Z", data=df3).fit()
print(f"Z 보정: A 효과 = {m6.params['A']:.3f} (Z-bias 증폭 가능)")
# U 도 보정 (가상 — 실제로는 미관측)
m7 = smf.ols("Y ~ A + U", data=df3).fit()
print(f"U 보정 (가상): A 효과 = {m7.params['A']:.3f} (~1 — 진짜)")6 한 줄 요약
인과 분석의 변수 선택은 예측 분석과 본질적으로 다르다 — DAG 가 first authority. 5 종류의 편향 유발 변수: collider, descendant of collider, mediator, M-bias 변수, instrument. 각각 보정 시 다른 메커니즘으로 새 편향 도입 또는 기존 편향 증폭. 시간 순서만으로 변수 역할 결정 불가 — \(L\) 이 pre-treatment 라도 M-bias 위험, post-treatment 라도 안전한 경우 가능. ML 의 자동 변수 선택은 인과 분석에 직접 적용 위험 — 도메인 지식 + DAG 의 결합이 표준.
7 관련 주제
선행 지식
후속 주제
- DR ML + Sample Splitting — Ch.18.3-18.4
- 변수 선택의 어려움 — Ch.18.5
- 시간변동 처치 — Ch.19
- Causal Mediation — Ch.23
다른 카테고리 연결