1 10.8 Confounding — 통제의 표준 도구
다중 모형: \[\text{logit}(r) = \beta_0 + \beta_X X + \beta_C C\]
여기서 \(C\) 는 confounder. \(\exp(\beta_X)\) = “C 일정” 의 X 효과.
Confounder 정의 (재확인): - \(X\) 와 \(Y\) 모두에 영향. - \(X\) 와 \(Y\) 의 인과 경로 위에 있지 않음 (mediator 아님).
(Woodward, 2014, Ch.10.8).
1.1 Change-in-Estimate 기준
- 추상: 변수 \(C\) 추가 시 \(\hat\beta_X\) 가 ≥ 10% 변화 → confounder 후보.
- 일상어 비유: 흡연-폐암 분석에 연령 추가 → OR 가 3.0 → 2.5 로 변화. 연령이 confounder 후보.
- 반사실: 변화 < 10% 면 confounder 영향 약함. 변수 제외 가능 (단 인과 그래프 분석 우선).
임계값 10% 는 관행 — 일부 분야는 5% 또는 20% 사용.
1.2 Confounder 통제 4 가지 방법 (재확인)
| 방법 | 단계 | 강점 |
|---|---|---|
| Restriction | 설계 | 완전 제거 |
| Matching | 설계 | 강한 통제 |
| Stratification (MH) | 분석 | 비모수 |
| Regression (logistic) | 분석 | 다중 보정 |
Logistic 이 일반화된 도구 — 다중 변수 + 연속 변수 + 상호작용 모두 가능.
1.3 잔여 Confounding (Residual Confounding)
가설: 흡연을 “ever / never” 로만 측정 → heavy smoker 와 occasional smoker 가 같은 카테고리. 모형에 포함해도 진성 dose 효과 미반영 → 잔여 confounding.
3 단계 직관:
- 추상: \(\tilde C\) (측정) 가 진성 \(C\) 의 noise 있는 추정 → 부분 보정 only.
- 일상어 비유: 음주를 “마신다 / 안 마신다” 만 측정 — 1 잔 / 일 vs 10 잔 / 일 같이 처리.
- 반사실: 정량적 측정 (개비 / 일) → 진성 dose 보정. 또는 객관 자료 (cotinine 검사).
1.4 미측정 Confounder
가장 어려운 함정 — 측정 안 된 confounder 의 효과는 보정 불가.
예시: 식이가 측정 안 됨. 흡연자 ↔︎ 식이 ↔︎ 폐암 의 confounding path.
3 단계 직관:
- 추상: 미측정 변수의 효과는 logistic 으로 통제 불가. 진성 효과의 systematic bias.
- 일상어 비유: 보이지 않는 변수의 영향 — 도구로 측정 못함.
- 반사실: Sensitivity analysis (E-value) 로 잠재 영향 추정. RCT 만이 미측정 confounder 자동 통제.
2 10.9 Interaction — Effect Modification
\[\text{logit}(r) = \beta_0 + \beta_X X + \beta_Z Z + \beta_{XZ} (X \times Z)\]
여기서 \(X\) = 위험 인자, \(Z\) = effect modifier.
해석: \(X\) 의 OR 가 \(Z\) 의 함수.
\(Z = 0\) 에서 \(X\) 의 OR: \(\exp(\beta_X)\). \(Z = 1\) 에서 \(X\) 의 OR: \(\exp(\beta_X + \beta_{XZ})\).
2.1 직관 — Confounding vs Interaction
- 추상: Confounding 은 X 의 진성 효과를 가짜로 만듦 (통제 필요). Interaction 은 X 의 효과가 다른 변수에 의존 (보고 필요).
- 일상어 비유: Confounding = 안경의 흐림 (제거 후 진성 시야). Interaction = 안경 종류별로 다른 시야 (각각 보고).
- 반사실: Confounding 만 처리하고 interaction 무시 → 평균 효과만 보고, segment 별 차이 가림. 두 처리 모두 필요.
2.2 Interaction 의 검정
\[M_0: \text{logit}(r) = \beta_0 + \beta_X X + \beta_Z Z\] \[M_1: \text{logit}(r) = \beta_0 + \beta_X X + \beta_Z Z + \beta_{XZ} (X \times Z)\]
\[\Lambda = -2(\log L_0 - \log L_1) \sim \chi^2_1\]
\(\Lambda\) 큼 → interaction 유의.
2.3 Multiplicative vs Additive Interaction
Logistic 의 interaction 항 \(\beta_{XZ}\) 는 multiplicative scale (log OR scale).
Multiplicative (logistic 자연): \[\text{OR}_{XZ} = \frac{\text{OR}_{X | Z=1}}{\text{OR}_{X | Z=0}}\]
Additive (RD scale): \[\text{RD}_{XZ} = \text{RD}_{X | Z=1} - \text{RD}_{X | Z=0}\]
3 단계 직관:
- 추상: 같은 자료에서 multiplicative interaction 없어도 additive interaction 있을 수 있음 (역도 가능).
- 일상어 비유: 두 약의 효과가 OR 단위에서 곱셈, RD 단위에서 합산. 두 단위에서 보는 패턴이 다를 수 있음.
- 반사실: 임상 의사 결정에는 additive (RD) 가 흔히 더 의미. Logistic 은 multiplicative 만 자연 산출 → 변환 필요.
RERI (Relative Excess Risk due to Interaction) 가 additive 평가 도구.
3 사례 — 흡연 × 성별 Interaction
가설: - 남성 흡연자 OR (vs 비흡연 남성) = 10. - 여성 흡연자 OR (vs 비흡연 여성) = 25.
Multiplicative interaction: \(25/10 = 2.5 \neq 1\) → 유의.
해석: 흡연이 여성에게 더 큰 상대 효과.
3 단계 직관:
- 추상: 같은 흡연이 두 군에 다른 강도. 단일 OR 보고가 정보 손실.
- 일상어 비유: 같은 약이 남녀에 다른 효과 — gender-specific dosing 필요.
- 반사실: Interaction 무시 시 “흡연 OR ≈ 17” 같은 평균 보고 → 실제 효과 패턴 가림.
4 A/B 테스트의 HTE — Heterogeneous Treatment Effect
\[\text{logit}(\text{conversion}) = \beta_0 + \beta_T T + \beta_S S + \beta_{TS} (T \times S)\]
여기서 \(T\) = treatment, \(S\) = segment.
각 segment 의 lift = \(\exp(\beta_T + \beta_{TS} \cdot S)\).
4.1 HTE 분석의 가치
- 추상: ATE (Average Treatment Effect) 는 인구 평균. Segment 별 효과 가림. CATE (Conditional Average) 가 정직.
- 일상어 비유: 광고 캠페인의 평균 효과 +5% — 단 일부 segment 에서 +30%, 다른 segment 에서 -2%. 평균이 결정 도구로 부족.
- 반사실: HTE 분석 없으면 모든 사용자에게 균일 처치. HTE 가 personalization 의 통계 기초.
4.2 A/B 의 HTE 코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
np.random.seed(42)
n = 5000
df = pd.DataFrame({
"treatment": np.random.binomial(1, 0.5, n),
"is_heavy_user": np.random.binomial(1, 0.3, n),
})
# 진성: heavy user 에서 treatment 효과 ↑
# Light: log OR 0.1, Heavy: log OR 0.5
log_odds = (-2.5 + 0.1 * df["treatment"]
+ 0.4 * df["treatment"] * df["is_heavy_user"]
+ 1.0 * df["is_heavy_user"])
df["conversion"] = np.random.binomial(1, 1/(1+np.exp(-log_odds)), n)
# Interaction 모형
X = sm.add_constant(pd.DataFrame({
"treatment": df["treatment"],
"is_heavy": df["is_heavy_user"],
"T_x_heavy": df["treatment"] * df["is_heavy_user"],
}))
m = sm.Logit(df["conversion"], X).fit(disp=0)
print(m.summary())
# Segment 별 OR
OR_light = np.exp(m.params["treatment"])
OR_heavy = np.exp(m.params["treatment"] + m.params["T_x_heavy"])
print(f"\nLight user OR: {OR_light:.2f}")
print(f"Heavy user OR: {OR_heavy:.2f}")
print(f"Multiplicative interaction: {OR_heavy / OR_light:.2f}")해석: Heavy user 의 OR 가 Light 보다 ↑ → 기능이 heavy user 에 더 효과적. Personalization 정책의 근거.
5 다중 Confounder + Interaction
# 다중 confounder + interaction
X_full = sm.add_constant(pd.DataFrame({
"treatment": df["treatment"],
"is_heavy": df["is_heavy_user"],
"T_x_heavy": df["treatment"] * df["is_heavy_user"],
"age": np.random.normal(35, 10, n), # confounder
"sex": np.random.binomial(1, 0.5, n), # confounder
}))
m_full = sm.Logit(df["conversion"], X_full).fit(disp=0)이 모형이 confounder 보정 + segment 별 lift 를 한 번에 산출.
6 Stratified Analysis vs Interaction Term
Stratified: Segment 별 별도 모형 → 각 segment 의 OR 따로. Interaction Term: 한 모형 + interaction → segment 의 OR 함께.
수학적으로 동등 (단 strata 변수가 모형의 다른 변수와 상관 없을 때).
- Stratified: 각 segment 가 큰 표본일 때, segment 별 다른 모형 구조.
- Interaction: Segment 표본 작을 때, 모형 구조 같음.
A/B 테스트의 분석에서 interaction term 이 표준 — 검정력 ↑ + 통계 유의성 검정 직접 가능.
7 RERI — Additive Interaction 의 정량
\[\text{RERI} = \text{RR}_{11} - \text{RR}_{10} - \text{RR}_{01} + 1\]
여기서: - \(\text{RR}_{11}\): 두 인자 모두 노출 vs 둘 다 비노출. - \(\text{RR}_{10}\): 첫 인자 만 노출. - \(\text{RR}_{01}\): 두 번째 인자 만 노출.
해석: - RERI = 0: Additive interaction 없음. - RERI > 0: Synergistic. - RERI < 0: Antagonistic.
(Rothman, 1986).
- 추상 정의: Additive scale 의 effect modification 정량. Multiplicative interaction 과 다른 정보.
- 일상어 비유: 두 약의 결합 효과 — additive (효과 합산) vs synergistic (시너지 효과).
- 반사실 시나리오: Multiplicative interaction 없어도 additive interaction 있을 수 있음. 임상 의사 결정에 additive 가 직관.
8 Confounding by Indication — 처방 약 분석의 함정
가설: Statin-CV 사망 분석. Statin 처방받은 사람이 baseline CV 위험 ↑.
문제: Confounding by indication — 처방 자체가 위험의 신호.
3 단계 직관:
- 추상 정의: Treatment 와 결과의 공통 원인 = 처방 결정 인자 (의사의 판단).
- 일상어 비유: 약을 받은 사람이 약을 안 받은 사람보다 baseline 더 아픔.
- 반사실 시나리오: 표준 confounder 보정 부족 — propensity score, instrumental variable 등 인과 도구.
8.1 Propensity Score Matching (PSM)
Treatment 받을 확률 (propensity score) 을 logistic 으로 모형.
\[e(X) = P(T = 1 \mid X)\]
활용: - Matching: 같은 PS 의 treated vs control 매칭. - IPW: \(1/e\) 또는 \(1/(1-e)\) 가중. - Stratification: PS quintile 별 분석.
- 추상 정의: 다중 confounder 를 단일 score 로 요약. 매칭이 단순.
- 일상어 비유: 학생들의 다중 변수 (성적·성격·가정) 를 단일 비교 도구로.
- 반사실 시나리오: 미측정 confounder 가 있으면 PSM 도 부정확. RCT 가 표준.
9 Q&A — Confounding & Interaction 의 흔한 오해
A: 아니다. 미측정 confounder + 측정 오차 잔존.
3 단계 직관:
- 추상 정의: 보정은 측정된 confounder 만. 미측정 / 부정확 측정 잔존.
- 일상어 비유: 시험 채점에서 측정된 부정 행위만 보정 — 안 본 부정 행위 잔존.
- 반사실 시나리오: Sensitivity analysis (E-value) 로 미측정 confounder 의 잠재 영향 평가.
A: 아니다. Power 부족 가능.
3 단계 직관:
- 추상 정의: Interaction 검정의 power 가 main effect 보다 작음 (보통 4 배 작은 표본).
- 일상어 비유: 작은 차이의 차이 — 큰 자료 필요.
- 반사실 시나리오: Interaction 의 검정력 분석 후 결론. 사전 가설 + 큰 표본.
A: 권장. 두 척도가 다른 정보.
3 단계 직관:
- 추상 정의: Logistic 의 자연 = multiplicative. 임상 의사 결정 = additive.
- 일상어 비유: 환율과 RERI — 두 표현이 다른 의미.
- 반사실 시나리오: 한 척도만 보고 시 misleading. 둘 다 보고가 정직.
10 결론
Confounding 은 X 의 진성 효과 통제, interaction 은 X 의 효과 의 의존성 식별. 두 처리 모두 logistic 의 다중 모형 도구로 가능. A/B 테스트의 HTE 분석이 interaction 의 직접 응용. Multiplicative vs additive 척도 구분 주의 (RERI 가 additive 도구). Confounding by indication 의 인과 분석은 PSM/IPW 가 표준.
다음 글 (H-WOO10-7) 에서 양적 변수의 처리 (linear vs spline) 를 본다.
11 관련 주제
- Logistic 개관
- 다중 logistic
- 가설검정
- 1111-11-11, 양적 설명 변수 처리
Statistics 크로스링크