NHEFS 인과 질문과 IP 가중치 모델링 추정

Hernan Ch.12.1~12.2 — 흡연 중단의 체중 효과 + propensity score 추정

Hernan & Robins (2020) Ch.12.1~12.2 를 다룬다. NHEFS 데이터에서 흡연 중단 \(A\) 의 체중 변화 \(Y\) 에 대한 평균 인과 효과를 정의하고, 9 개 보정 변수의 logistic 회귀로 propensity score \(\Pr(A=1|L)\) 를 추정한 후, IP 가중치 \(W^A = 1/f(A|L)\) 를 가중 회귀에 적용해 점추정 3.4kg 을 얻는 전 과정을 정리한다.

Experimentation
Causal Inference
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: 평균 인과 효과 (Average Causal Effect, ATE)

이항 처치 \(A\) 와 결과 \(Y\) 에 대해

\[\mathrm{E}[Y^{a=1}] - \mathrm{E}[Y^{a=0}]\]

가 평균 인과 효과이다. \(Y^a\) 는 모든 사람이 처치 \(A=a\) 를 받았을 때의 잠재 결과 평균. 관찰 데이터에서 직접 관찰되지 않으므로 반사실적(counterfactual) 양이다.

정의: 성향 점수 (Propensity Score)

이항 처치의 조건부 처치 확률

\[e(L) = \Pr(A=1|L)\]

을 성향 점수라 한다 (Rosenbaum & Rubin 1983). \(L\) 의 차원이 클수록 직접 추정이 어려워 logistic 회귀 같은 모형을 활용한다.

직관 — 잠재 결과의 정체: 한 사람을 두 번 살게 하면 한 번은 처치, 한 번은 비처치 결과를 모두 관찰할 수 있다. 그러나 현실에서는 한 사람당 한 가지 잠재 결과만 관측된다 (“fundamental problem of causal inference”). 평균 인과 효과는 모집단 수준에서 두 평균의 차이를 묻는 양 — 개인 수준의 효과를 묻는 게 아니다.

2 12.1 NHEFS 인과 질문

2.1 데이터 설정

NHEFS (National Health and Nutrition Examination Survey I Epidemiologic Followup Study) 는 1971~75 baseline 과 1982 follow-up 의 두 시점 코호트이다. Hernan 의 Part II 분석은 다음 부분 표본을 사용한다.

변수 의미 형태
\(A\) baseline 흡연자 중 1982 까지 금연 여부 이항 (1: 금연, 0: 계속)
\(Y\) 1982 체중 - baseline 체중 (kg) 연속
\(L\) 9 개 보정 변수 혼합

\(L\) 의 9 개 변수는 성별, 나이, 인종, 교육 (5 범주), 흡연량(개비/일), 흡연 기간(년), 일상 신체활동 (3 범주), 여가 운동 (3 범주), baseline 체중 (kg) 이다.

2.2 처치군과 대조군의 baseline 차이

NHEFS 의 baseline 비대칭 (Hernan & Robins, 2020, Table 12.1)
특성 금연자 (A=1, n=403) 비금연자 (A=0, n=1163)
평균 나이 46.2 42.8
남성 % 54.6 46.6
백인 % 91.1 85.4
대학 교육 % 15.4 9.9
baseline 체중 (kg) 72.4 70.3
흡연량 (개비/일) 18.6 21.2
흡연 기간 (년) 26.0 24.1

직관 — 비대칭의 함의: 금연자가 비금연자보다 4 살 많고, 흡연량은 적고 기간은 길고, 더 부유하다(대학 교육 비율). 이런 차이가 결과에 영향을 미친다면 단순 비교는 인과 효과가 아니라 “이미 다른 사람들 사이의 차이”를 측정한 것에 불과하다.

2.3 보정 없는 단순 비교

표본 평균 차이로 보면

\[\widehat{\mathrm{E}}[Y|A=1] - \widehat{\mathrm{E}}[Y|A=0] = 4.5 - 2.0 = 2.5 \text{ kg},\]

95% CI = \((1.7, 3.4)\). 이 숫자는 연관성(association) 이다. 인과량 \(\mathrm{E}[Y^{a=1}] - \mathrm{E}[Y^{a=0}]\) 와 일반적으로 같지 않다.

직관 — 단순 비교가 위험한 구체적 시나리오: 금연자가 평균 4 살 많고, 나이 든 사람일수록 체중 증가폭이 작은 경향이 있다고 하자. 이 경우 금연이라는 효과가 “나이 든 그룹의 작은 체중 증가” 와 섞여 단순 비교 2.5kg 이 진짜 효과보다 작게 추정된다. 보정 후 추정값이 3.4kg 으로 0.9kg 늘어나는 이유가 바로 이것이다.

직관 — 같은 데이터, 두 가지 답: 같은 NHEFS 표본에서 단순 비교는 2.5kg, IP 가중은 3.4kg. 두 추정값 모두 데이터에 충실하지만 묻는 질문이 다르다. 단순 비교는 “관측된 두 그룹의 차이”, IP 가중은 “이 모집단에 가상으로 무작위 배정했을 때의 차이”. 후자가 의사결정에 의미 있는 양이다.

2.4 Fine Point 12.1 — Bad Example 의 인정

Hernan 은 이 데이터의 한계를 명시한다. 처치 \(A\) 가 baseline 에서 follow-up 까지의 행동(금연)을 설명하므로 follow-up 까지 살아남은 사람만 분석에 포함된다 — 일종의 immortal time biasselection bias 위험이 있다. 무작위 실험이라면 baseline 에서 처치를 배정하므로 이 문제가 없다.

직관 — 가용 데이터의 트레이드오프: 완벽한 데이터(금연 여부를 baseline 에 무작위 배정) 가 없으므로 “관찰 가능한 흡연 행동” 을 처치로 정의한다. 이 정의가 인과 분석에 부적절할 수 있음을 인정하면서도 교과서적 사례로 사용한다. 실무에서도 같은 trade-off 가 흔하다 — 이상적 인과 질문 vs 실제로 답할 수 있는 인과 질문 의 거리.

3 12.2 IP 가중치 모델링 추정

3.1 비모수 IPW 가 작동 안 하는 이유

Part I 에서는 \(\Pr(A=1|L)\) 를 셈으로 추정했다 — 각 \(L\) 셀에서 \(A=1\) 인 사람 수를 세어 전체 수로 나눈 비율. NHEFS 의 9 개 변수는 셀 수가 폭발한다.

변수 범주 수 누적 곱
성별 2 2
인종 2 4
교육 5 20
운동 3 60
활동 3 180
나이 (50 단계 가정) 50 9,000
흡연량 (50 단계) 50 450,000
흡연 기간 (50) 50 22,500,000
체중 (50) 50 1,125,000,000

직관 — 1566 명을 11 억 셀에 분산: 각 셀당 평균 0.0000014 명이다. 거의 모든 셀이 비고, 비율을 셀 수 없다. 셀이 많아야 6 단계로 추려도 200 만 셀 — 여전히 1566 명으로는 비모수 추정 불가능. 모형 도입이 선택이 아니라 필수가 된다.

3.2 Logistic 회귀로 propensity score 추정

Hernan 은 다음 logistic 모형을 사용한다.

\[\mathrm{logit}\, \Pr(A=1|L) = \alpha_0 + \alpha_1 \text{sex} + \alpha_2 \text{race} + \alpha_3 \text{age} + \alpha_4 \text{age}^2 + \cdots\]

핵심 모델링 결정:

결정 내용 함의
연속 변수 quadratic 항 추가 나이·체중·흡연량·기간 모두 \(A^2\) 항 포함 비선형 관계 일부 포착
상호작용 항 없음 변수 간 product term 모두 0 단순성 우선, misspecification 위험
범주 변수 dummy 교육 5 범주, 운동·활동 3 범주 셀별 baseline 차이 허용

직관 — quadratic 항의 의미: 나이 효과가 직선이라면 어린 사람과 노인의 효과 변화율이 같다. Quadratic 항은 “효과가 나이대에 따라 달라진다”는 약한 비선형성을 허용한다. Hernan 은 모든 연속 변수에 일관되게 quadratic 항을 추가해 모형의 유연성을 확보한다.

직관 — 상호작용 항 생략의 비용: “고령 + 비만” 이 “고령” 과 “비만” 의 단순 합보다 처치 확률에 더 큰 영향을 줄 수 있다. 상호작용 항 없는 모형은 이 효과를 포착 못 한다 — 그러나 모든 가능한 상호작용을 포함하면 모수 폭발과 동시에 다중공선성 위험. Hernan 의 선택은 “단순함을 잃지 않는 한도에서 충분히 유연하게” 라는 실용적 균형이다.

3.3 추정된 IP 가중치의 분포

NHEFS 의 추정 IP 가중치 (Hernan, Program 12.2)
  • 추정값 \(\widehat{W}^A = 1/\widehat{f}(A|L)\) 의 범위: 1.05 ~ 16.7
  • 평균: 2.00 (표본 크기의 두 배 → 가상 모집단 크기 약 3132)
  • 분포: 오른쪽 꼬리가 긴 비대칭

직관 — 가중치 16.7 의 의미: 어떤 환자가 자신의 \(L\) 조합에서 받은 처치를 받을 확률이 약 6% 였다는 의미 — 1/16.7 ≈ 0.06. 이런 사람이 “표본에 한 명 있어서 16.7 명처럼 가중되는” 가상 모집단을 만든다. 가중치가 클수록 그 한 사람의 결과가 추정에 큰 영향을 주므로, 이상치 한 명이 추정량을 흔들 위험이 커진다.

직관 — 평균이 2 인 이유: 비안정화 가중치 \(1/f(A|L)\) 의 모집단 기댓값은 항상 2 이다 (\(\mathrm{E}[1/f(A|L)] = \mathrm{E}[\mathrm{E}[1/f(A|L)|L]] = \sum_l 2 \Pr(L=l) = 2\) — 처치 가능 결과가 두 가지라서). 표본 평균 2.00 은 모형이 합리적임을 시사하는 sanity check.

3.4 가중 회귀로 ATE 추정

가상 모집단에서 saturated 선형 모형 \(\mathrm{E}[Y|A] = \theta_0 + \theta_1 A\) 를 weighted least squares 로 적합. 가중치는 추정된 \(\widehat{W}^A\).

\[\widehat{\theta}_1 = 3.4 \text{ kg}, \quad 95\%\text{ CI (robust SE)} = (2.4, 4.5)\]

직관 — 단순 비교 2.5 → IP 가중 3.4 의 차이: 약 0.9kg 의 증가는 9 개 보정 변수가 흡수한 교란의 양이다. 데이터 구조에서는 금연자가 더 나이 많은 인구이고, 나이 든 사람일수록 체중 증가가 작으므로, 보정 시 효과가 더 크게 추정된다.

직관 — robust SE 의 필요성: 일반 OLS 의 표준오차는 IID 가정에 의존. 가중치는 이 가정을 깨므로 표준 SE 가 부정확. Robust (Huber-White) SE 또는 GEE 의 sandwich estimator 가 conservative 신뢰구간을 제공 — 명목보다 약간 넓지만 calibration 을 안전하게 유지.

3.5 Conservative 신뢰구간의 의미

Hernan 의 95% CI 는 robust SE 기반으로 conservative 이다. 즉 명목 95% 보다 더 자주 진짜 모수를 덮는다 (실제 coverage > 95%). 정확한 분산 추정은 다음 세 가지 방식 중 하나로 가능.

  1. Influence function 기반 분석적 분산: 통계 이론에서 유도. 표준 패키지에 없음.
  2. Bootstrap: 데이터를 재추출해 추정값의 표본 분포를 직접 추정. 계산 비용.
  3. Robust SE: GEE 의 sandwich estimator. 가장 흔하지만 conservative.

직관 — 세 방법의 절충: 분석적 SE 가 가장 정확하지만 직접 코드를 짜야 한다. Bootstrap 은 가정이 적고 정확하지만 시간 비용. Robust SE 는 즉시 사용 가능하지만 약간 보수적. 실무에서는 robust SE 가 표준 첫 시도, 결과가 의사결정에 임계적이면 bootstrap 으로 보강.

4 모형 misspecification 의 영향

Logistic 모형이 잘못되면

만약 \(\Pr(A=1|L)\) 의 진짜 형태가 logistic 의 quadratic 다항 모형이 아니면

  1. 추정된 가중치가 진짜 가중치와 다르다.
  2. 가상 모집단에서 \(A \perp\!\!\!\perp L\) 이 정확히 성립하지 않는다.
  3. 가중 회귀의 점추정이 진짜 ATE 와 다르게 수렴 — 일치성 손실.
  4. 신뢰구간 calibration 도 깨진다.

이 위험을 줄이는 방법: - 더 유연한 함수 형태 (cubic spline, 상호작용 항). - ML 기반 propensity 추정 (Random Forest, gradient boosting). - Doubly robust 추정량으로 결과 모형까지 결합.

직관 — 가중치 진단의 표준 절차: (1) 가중치 분포의 히스토그램 — 극단치 존재 여부. (2) 가중 후 공변량 평균이 처치군·대조군에서 일치하는지 점검 (covariate balance). (3) Effective sample size = \((\sum w)^2 / \sum w^2\) — 큰 가중치 몇 개에 추정이 의존하는지. (4) 다른 모형 specification 으로 sensitivity analysis.

5 응용 분야

  • 임상시험의 per-protocol 분석: 비순응 보정에 IPW
  • 관찰 코호트의 처치 효과: 의료 기록 데이터의 인과 분석
  • 온라인 자연 실험: 정책 변경 전후 비교에 propensity 보정
  • 정책 평가: 보조금 프로그램 자기 선택 보정
  • 마케팅 인과 분석: 광고 노출의 매출 효과

6 가중치 trimming 의 역할

가중치 분포가 매우 비대칭이거나 극단치가 있으면 추정량이 소수의 큰 가중치 환자들에게 과도하게 의존한다. 이를 줄이는 표준 절차가 trimming 이다.

방법 절차 트레이드오프
Truncation 가중치를 상한·하한에 잘라냄 (예: 99 percentile) 분산 ↓, 편향 ↑
Stabilization 분자를 \(f(A)\) 로 변경 분산 ↓, 편향 변화 없음
Doubly robust 결과 모형과 결합 한 모형 옳으면 일치
ML propensity 비선형성 더 정확히 추정 정규화 편향 위험

직관 — Trimming 의 안전 비용: 99 percentile 에서 truncate 하면 분산이 줄지만 진짜 가중치를 인위적으로 잘라낸 만큼 점추정이 약간 편향된다. 양 끝을 잘라낸 데이터로 평균을 구하는 trimmed mean 과 같은 발상 — robust 하지만 진짜 평균과 약간 다른 양을 추정한다.

7 양의 확률 점검의 실무 절차

Positivity 진단 체크리스트
  1. 추정된 propensity 의 히스토그램: 처치군과 대조군의 propensity 분포 overlap 점검. 양 극단(0 또는 1 근처)에서 한쪽 군만 있으면 양의 확률 위반.
  2. Common support 영역 식별: 두 군이 모두 있는 propensity 범위.
  3. 그 영역으로 분석 제한: ATT (treated 의 평균 효과) 또는 ATE on common support 추정.
  4. Sensitivity analysis: 다른 trim 임계값으로 결과 안정성 점검.

직관 — Common support 의 의미: 어떤 환자의 propensity 가 0.95 인데 그 영역에 비처치자가 한 명도 없다면, 그 환자에 대한 반사실(비처치 결과) 은 데이터에서 추론할 수 없다 — 외삽에 의존해야 한다. 이런 환자들을 분석에서 제외하면 추정 대상이 “ATE 전체” 가 아닌 “common support 영역의 ATE” 로 좁아진다.

8 코드 — NHEFS 재현

import pandas as pd
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf

nhefs = pd.read_csv("nhefs.csv").dropna(subset=["wt82_71"]).reset_index(drop=True)

# Step 1: propensity score model — 9 confounders + quadratic
ps_formula = (
    "qsmk ~ sex + race + C(education) "
    "+ age + I(age**2) "
    "+ smokeintensity + I(smokeintensity**2) "
    "+ smokeyrs + I(smokeyrs**2) "
    "+ C(exercise) + C(active) "
    "+ wt71 + I(wt71**2)"
)
ps_model = smf.logit(ps_formula, data=nhefs).fit(disp=False)
nhefs["ps"] = ps_model.predict()

# Step 2: 비안정화 IP 가중치
nhefs["W"] = np.where(
    nhefs["qsmk"] == 1,
    1 / nhefs["ps"],
    1 / (1 - nhefs["ps"]),
)
print(nhefs["W"].describe())   # min ~1.05, max ~16.7, mean ~2.00

# Step 3: 가중 회귀 (saturated linear model)
X = sm.add_constant(nhefs["qsmk"])
gee = sm.WLS(nhefs["wt82_71"], X, weights=nhefs["W"]).fit(
    cov_type="HC0"   # robust SE
)
print(gee.params)              # const ~1.78, qsmk ~3.44
print(gee.conf_int(alpha=0.05))   # (~2.4, ~4.5)

# Step 4: covariate balance check
def std_diff(x, w, treat):
    m1, m0 = np.average(x[treat == 1], weights=w[treat == 1]), np.average(x[treat == 0], weights=w[treat == 0])
    s = np.sqrt((x[treat == 1].var() + x[treat == 0].var()) / 2)
    return (m1 - m0) / s

for col in ["age", "smokeintensity", "smokeyrs", "wt71"]:
    before = std_diff(nhefs[col], np.ones(len(nhefs)), nhefs["qsmk"])
    after = std_diff(nhefs[col], nhefs["W"], nhefs["qsmk"])
    print(f"{col}: before={before:.3f}, after={after:.3f}")

가중 후 표준화 평균 차이 (standardized mean difference) 가 0 에 가까워지면 covariate balance 가 회복된 것이다 — 일반적으로 |SMD| < 0.1 이면 양호.

9 ATE, ATT, ATC 의 구분

세 가지 평균 인과 효과
  • ATE (Average Treatment Effect): 모집단 전체의 평균 효과 — \(\mathrm{E}[Y^{a=1} - Y^{a=0}]\)
  • ATT (Average Treatment effect on the Treated): 처치 받은 사람들의 평균 효과 — \(\mathrm{E}[Y^{a=1} - Y^{a=0} | A=1]\)
  • ATC (Average Treatment effect on the Controls): 비처치 사람들의 평균 효과 — \(\mathrm{E}[Y^{a=1} - Y^{a=0} | A=0]\)

직관 — 세 양이 일반적으로 다른 이유: 처치 받은 사람과 받지 않은 사람의 baseline 분포가 다르면, 평균 효과도 그룹별로 다를 수 있다. 정책 평가에서 ATT 가 중요할 때가 많다 — “이미 정책을 받은 사람들에게 그 정책이 평균적으로 얼마나 효과 있었나?”. ATC 는 “정책 미수혜자 에게 적용했다면 효과가 어땠을까?” 의 외삽적 질문에 답한다.

직관 — 가중치 분자 선택과 추정 대상: \(W^A = 1/f(A|L)\) 의 분자를 1 → \(f(A)\)\(\Pr(A=1|L)\) 로 바꾸면 추정 대상이 ATE → ATE → ATT 로 변한다. 분자 함수가 가상 모집단의 분포를 결정하므로, 어떤 모집단의 평균 효과를 묻느냐를 분자로 선택할 수 있다.

10 한 줄 요약

NHEFS 9 개 보정 변수에서 비모수 IPW 는 셀 폭발로 무력. Logistic 회귀로 propensity score \(\widehat{e}(L)\) 를 추정하고, \(W^A = 1/\widehat{e}(L)\) 로 가중하면 가상 모집단에서 \(A \perp\!\!\!\perp L\) 이 회복된다. 가중 회귀의 점추정 3.4kg (95% CI 2.4~4.5) 가 단순 비교 2.5kg 보다 큰 이유는 보정 변수가 흡수한 교란이다. Robust SE 가 conservative 신뢰구간을 보장한다.

11 관련 주제

선행 지식

후속 주제

다른 카테고리 연결

12 작업 단계 정리

Step 작업 산출물
1 \(L\) 변수 선택 (DAG·도메인 지식) 보정 변수 명단
2 \(L\) 의 함수 형태 결정 (선형·quadratic·spline) propensity 모형 specification
3 Logistic 회귀 적합 \(\widehat{e}(L)\)
4 Propensity overlap 점검 히스토그램, common support
5 가중치 계산 (\(W^A\) 또는 \(SW^A\)) 환자별 가중치
6 Covariate balance 점검 SMD before/after
7 가중 회귀로 ATE 추정 \(\widehat{\theta}_1\)
8 Robust SE 또는 bootstrap 으로 신뢰구간 95% CI
9 Sensitivity analysis 다른 모형으로 결과 안정성 점검

직관 — 9 단계 중 통계 이론은 6~9 단계뿐: 1~5 단계는 도메인 지식·DAG·진단 도구의 영역. 통계 패키지가 6~9 단계를 자동화하더라도 1~5 단계의 품질이 추정량의 신뢰성을 결정한다. “회귀 한 줄로 인과 효과 추정” 이 위험한 이유는 1~5 단계가 시각화되지 않기 때문이다.

13 흔한 오류 패턴

IPW 분석에서 자주 마주치는 함정
  1. Outcome 을 propensity 모형에 포함: \(\Pr(A|L,Y)\) 같은 모형은 결과 변수를 처치 모형에 끼워 넣어 추정량의 인과 의미를 깨뜨린다.
  2. 처치 후 변수 보정: 처치가 영향을 준 변수(\(L\) 의 일부) 를 propensity 모형에 포함하면 매개 효과를 차단해 over-adjustment.
  3. 충돌자(collider) 보정: Berkson 편향 도입.
  4. 모형 적합 후 가중치 점검 생략: 극단치·overlap 점검 없이 추정값을 보고.
  5. 단일 specification 만 사용: sensitivity analysis 없이 결과 강건성 미점검.

직관 — 이 함정들의 공통 원인: 회귀를 “예측 도구” 로만 보는 습관에서 비롯된다. 예측에서는 상관 있는 변수를 모두 넣는 게 좋지만, 인과에서는 변수의 인과적 역할 (교란자 vs 매개자 vs 충돌자) 에 따라 포함 여부가 달라진다. DAG 분석이 변수 선택의 첫 도구가 되어야 한다 — Ch.7, Ch.8, Ch.18 의 핵심 메시지이다.

Subscribe

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