1 10.5 Generic Data — 개별 vs 집계 자료의 동치성
Individual data: 각 개인 \((x_i, y_i)\), \(y_i \in \{0, 1\}\).
Grouped data: 각 distinct \(x\) 값마다 \((x_i, e_i, n_i)\), \(e_i\) = 발병자, \(n_i\) = 전체.
두 형식의 logistic 적합 결과 (계수, OR, CI) 동일 (Woodward, 2014, Ch.10.5).
1.1 직관 — 같은 likelihood
- 추상: Binomial likelihood 가 분포 형태 무관 동일. \(\prod_{i=1}^n p^{y_i}(1-p)^{1-y_i} = p^e (1-p)^{n-e}\) where \(e = \sum y_i\), \(n\) 은 전체.
- 일상어 비유: 100 회 동전 던지기의 likelihood 를 “각 결과 곱” 또는 “성공 수 + 실패 수” 로 표현 — 같은 결과.
- 반사실: 만약 \(x\) 가 연속 변수라면 grouping 이 정보 손실. 그러나 logistic 는 continuous \(x\) 도 individual 자료로 처리 — 정보 보존.
1.2 어느 형식이 좋은가
| 시나리오 | 형식 |
|---|---|
| Continuous \(x\) | Individual |
| Categorical / discrete \(x\) + 큰 표본 | Grouped (계산 효율 ↑) |
| 모형 진단 (residual) | Grouped (deviance residual 의미 명확) |
| 다중 변수 | Individual (필연) |
- 추상: Grouped 는 각 cell 의 binomial 분산 \(r_i(1-r_i)/n_i\) 가 명시 → deviance residual 직접 산출.
- 일상어 비유: 학년별 평균 점수 분포가 명확 → 어느 학년이 outlier 인지 시각화.
- 반사실: Individual 자료에서는 deviance residual 이 0 또는 1 에 가까운 값 — 의미 약함.
2 10.6 Multiple Logistic Regression
다변량 위험 인자 \(\mathbf{X} = (X_1, X_2, \ldots, X_p)\):
\[ \text{logit}(r) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p \]
각 \(\exp(\beta_j)\) = 변수 \(X_j\) 1 단위 증가당 OR (다른 변수 일정 가정).
2.1 “다른 변수 일정” 의 의미
다중 logistic 의 OR 는 다른 변수가 같을 때 의 효과 — marginal 이 아닌 conditional.
3 단계 직관:
- 추상: \(\exp(\beta_j) = E[\Psi \mid X_j +1, X_{-j}] / E[\Psi \mid X_j, X_{-j}]\). 다른 변수의 분포 통제.
- 일상어 비유: 흡연-폐암 분석에서 “연령·성별·SES 가 같을 때” 의 흡연 효과. Marginal 흡연 효과와 다를 수 있음.
- 반사실: 다른 변수와의 상관이 0 이면 conditional ≈ marginal. 강한 상관이면 두 해석 갈라짐.
2.2 Confounding vs Mediator — 변수 선택의 기준
다중 변수 모형에 어떤 변수를 넣을 것인가.
인과 그래프
X (treatment) ──→ M (mediator) ──→ Y (outcome)
↑ ↑
└──── C (confounder) ─────┘
| 변수 | 다중 모형 포함? |
|---|---|
| Confounder (C) | 포함 — bias 제거 |
| Mediator (M) | 제외 — total effect 분리 |
| Effect modifier (E) | 포함 + interaction |
| Collider | 제외 — bias 유발 |
- 추상: 변수 포함이 진성 인과 효과 추정에 유리한지 결정 — 통계 적합도 (AIC) 만이 아닌 DAG 분석.
- 일상어 비유: 두 변수 간 매개 변수를 통제하면 매개 효과가 사라짐. 음악 듣기-시험 성적 분석에서 “공부 시간” 통제하면 음악의 학습 동기 효과 가림.
- 반사실: 통계 적합도만 보고 변수 추가하면 mediator·collider 추가로 bias 만들 위험.
2.3 변수 선택 알고리즘
| 알고리즘 | 메커니즘 |
|---|---|
| Forward selection | 빈 모형 + 한 변수씩 추가 (가장 유의한) |
| Backward elimination | 모든 변수 + 한 변수씩 제거 (가장 비-유의한) |
| Stepwise | Forward + backward 결합 |
| All-subsets | 모든 가능한 부분집합 비교 (작은 변수 수에서만) |
| Lasso / Elastic Net | 정규화로 자동 선택 |
Stepwise 가 자동·객관적으로 보이지만 함정 다수: - 동일 자료 반복 적합 → multiple testing. - 변수 간 상관 시 결과 불안정. - p-value, CI 가 selection 후 부정확.
3 단계 직관:
- 추상: 자료 본 후 모형 선택 → post-selection inference 문제.
- 일상어 비유: 시험 답안 본 후 채점 기준 결정 — 점수 부풀려짐.
- 반사실: Cross-validation 또는 정규화 (Lasso) 가 더 robust. 단 인과 분석에서는 DAG 기반 사전 변수 선택 우선.
2.4 Lasso 의 logistic 적용
\[ \hat\beta = \arg\min_\beta \left\{ -\log L(\beta) + \lambda \sum_j |\beta_j| \right\} \]
L1 penalty 가 일부 \(\beta_j\) 를 정확히 0 으로 → 자동 변수 선택.
- 추상: \(\lambda\) 큼 → 더 많은 변수 0 → 더 단순 모형. CV 로 최적 \(\lambda\) 선택.
- 일상어 비유: 짐 가방의 무게 제한 → 가장 중요한 짐만 선택.
- 반사실: Lasso 가 예측 모형에 적합. 인과 추정에는 OLS/GLM + DAG 기반 변수 선택이 표준.
3 다중 모형의 적합 진단
| 도구 | 점검 |
|---|---|
| Pearson residual | 각 관측의 표준화 잔차 |
| Deviance residual | Likelihood 기반 잔차 |
| Cook’s distance | 영향력 큰 관측 |
| VIF (Variance Inflation Factor) | 다중공선성 |
| Hosmer-Lemeshow | 적합도 |
3.1 VIF — 다중공선성 점검
VIF > 10 (또는 5) 이면 강한 다중공선성. 결과: - 계수 추정 불안정. - SE 폭증 → CI wide. - 한 변수의 효과가 다른 변수에 흡수.
3 단계 직관:
- 추상: \(X_1, X_2\) 강한 상관이면 \(\beta_1, \beta_2\) 식별 어려움 — 자료가 분리 못함.
- 일상어 비유: 키와 체중이 강한 상관 — 두 변수 모두 입력하면 어느 것이 결과의 진성 원인인지 분리 어려움.
- 반사실: 한 변수 제거 또는 PCA 같은 차원 축소. 또는 더 큰 표본.
4 코드 예시 — 다중 logistic + 변수 선택
import numpy as np
import pandas as pd
import statsmodels.api as sm
np.random.seed(42)
n = 1500
# 가상 자료: 다중 위험 인자
df = pd.DataFrame({
"smoke": np.random.binomial(1, 0.35, n),
"age": np.random.normal(50, 10, n),
"bmi": np.random.normal(25, 4, n),
"exercise": np.random.binomial(1, 0.5, n),
"sex": np.random.binomial(1, 0.5, n),
})
# 진성 모형: smoke + age + bmi 가 위험, exercise 가 보호
log_odds = (-5 + 0.7 * df["smoke"] + 0.04 * df["age"]
+ 0.05 * df["bmi"] - 0.5 * df["exercise"])
df["disease"] = np.random.binomial(1, 1/(1+np.exp(-log_odds)), n)
# 다중 logistic
X = sm.add_constant(df[["smoke", "age", "bmi", "exercise", "sex"]])
model = sm.Logit(df["disease"], X).fit(disp=0)
print(model.summary())
# OR 표
print("\n=== OR (95% CI) ===")
for var in ["smoke", "age", "bmi", "exercise", "sex"]:
OR = np.exp(model.params[var])
lo = np.exp(model.conf_int().loc[var, 0])
hi = np.exp(model.conf_int().loc[var, 1])
print(f" {var}: OR = {OR:.3f} ({lo:.3f}, {hi:.3f})")
# VIF 점검
from statsmodels.stats.outliers_influence import variance_inflation_factor
X_vif = df[["smoke", "age", "bmi", "exercise", "sex"]]
print("\n=== VIF ===")
for i, var in enumerate(X_vif.columns):
vif = variance_inflation_factor(X_vif.values, i)
print(f" {var}: VIF = {vif:.2f}")해석: 진성 효과가 있는 smoke·age·bmi·exercise 의 계수가 진성에 가깝게 추정. sex 는 진성 효과 0 → CI 가 1 포함. VIF 모두 < 5 → 다중공선성 약함.
5 A/B 테스트의 다중 logistic — CUPED Analog
A/B 테스트의 분산 감소 도구 CUPED 의 logistic 판:
# A/B 테스트의 다중 logistic
df["treatment"] = np.random.binomial(1, 0.5, n)
df["pre_engagement"] = np.random.normal(0, 1, n) # 사전 활동량
df["pre_purchase"] = np.random.binomial(1, 0.2, n) # 사전 구매 여부
# 진성: treatment 가 0.3 log OR 효과
log_odds = (-2 + 0.3 * df["treatment"] + 0.5 * df["pre_engagement"]
+ 1.0 * df["pre_purchase"])
df["conversion"] = np.random.binomial(1, 1/(1+np.exp(-log_odds)), n)
# 단순 모형
m1 = sm.Logit(df["conversion"], sm.add_constant(df[["treatment"]])).fit(disp=0)
# 보정 모형
m2 = sm.Logit(df["conversion"],
sm.add_constant(df[["treatment", "pre_engagement", "pre_purchase"]])).fit(disp=0)
print(f"단순 OR (treatment): {np.exp(m1.params['treatment']):.3f}")
print(f" SE: {m1.bse['treatment']:.3f}")
print(f"보정 OR (treatment): {np.exp(m2.params['treatment']):.3f}")
print(f" SE: {m2.bse['treatment']:.3f} ← 분산 ↓")해석: 사전 변수 보정으로 SE ↓ → 같은 표본에서 더 정밀한 lift 추정.
6 DAG 기반 변수 선정 — 인과 우선
인과 효과 \(X \to Y\) 를 식별하기 위해 다음 조건의 변수 set \(\mathbf{Z}\) 를 보정:
- \(\mathbf{Z}\) 는 \(X\) 의 후손 아님.
- \(\mathbf{Z}\) 가 \(X\) 와 \(Y\) 사이의 모든 backdoor path 를 차단.
- 추상 정의: DAG 가 인과 그래프 시각. Backdoor criterion 이 정확한 confounder set 식별.
- 일상어 비유: 학력-소득 분석 — 학력의 후손 (직업 선택) 보정 안 함, 학력·소득 모두에 영향 (가정 환경) 보정.
- 반사실 시나리오: DAG 없이 stepwise 사용 시 mediator·collider 자동 포함 → bias.
예시: - 흡연-폐암: 연령·성별 (confounder) 포함, 폐 기능 (mediator) 제외. - 학력-소득: 가정 환경 포함, 직업 (mediator) 제외.
7 VIF 와 다중공선성
| VIF | 해석 |
|---|---|
| < 5 | 무관 |
| 5~10 | 경계 |
| > 10 | 강한 다중공선성 |
(O’Brien, 2007).
VIF 큼 시: - \(\hat\beta\) 추정 불안정. - SE 폭증. - 한 변수의 효과가 다른 변수에 흡수.
3 단계 직관:
- 추상 정의: 두 변수가 강한 상관 → 별도 효과 분리 어려움.
- 일상어 비유: 키와 체중 비교 — 둘 다 입력하면 어느 것이 진성 원인인지 모호.
- 반사실 시나리오: 한 변수 제거 또는 PCA 차원 축소.
8 Q&A — 다중 logistic 의 흔한 오해
A: 아니다. Bias-variance trade-off.
3 단계 직관:
- 추상 정의: 변수 ↑ → train AUC ↑ but test AUC ↓ 가능.
- 일상어 비유: 시험 답안에 모든 정보 — 답안에 적합 ↑ but 새 시험엔 부정확.
- 반사실 시나리오: Cross-validation 또는 Lasso 가 자동 균형.
A: 아니다. Multiple testing + 변수 간 상관 → 결과 불안정.
3 단계 직관:
- 추상 정의: 자료 본 후 모형 선택 → post-selection inference 부정확.
- 일상어 비유: 시험 답안 본 후 채점 기준 변경.
- 반사실 시나리오: 사전 등록 + DAG 기반 변수 선택이 표준.
A: 아니다. Confounding 통제의 정상 결과.
3 단계 직관:
- 추상 정의: Crude = 평균 효과, adjusted = conditional 효과.
- 일상어 비유: 흡연-폐암 — 연령 보정 후 OR ↓ 자연.
- 반사실 시나리오: 차이 ↑ 면 강한 confounding 의심. DAG 점검 + sensitivity.
9 결론
다중 logistic 은 confounder 통제 + HTE 분석의 표준 도구. 변수 선택은 통계 알고리즘 (stepwise) 보다 인과 그래프 (DAG) 기반 사전 결정. VIF 로 다중공선성 점검. Backdoor criterion 이 정확한 confounder set 식별 도구.
다음 글 (H-WOO10-5) 에서 가설 검정 (GoF, LR, AIC) 을 본다.
10 관련 주제
- Logistic 개관
- Logistic 과 계수 해석 (1)
- 계수 해석 (2)
- 1111-11-11, 가설검정 (적합도·효과·IC)
Statistics 크로스링크