일반 데이터와 다중 로지스틱

Woodward Ch.10.5~10.6 — Generic Data & Multiple Logistic Regression

개별 자료 (Table 10.1) 와 집계 자료 (Table 10.2) 의 적합 결과 동치성, 다중 logistic regression 의 표준 수식, 변수 선택의 기준 (forward, backward, stepwise) 을 추상 → 일상어 → 반사실 3 단계 직관으로 풀어낸다. 다중 변수 모형의 OR 해석은 “다른 변수 일정” 이라는 조건부 의미.

Experimentation
Modeling
저자

Kwangmin Kim

공개

2026년 05월 08일

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

직관 3 단계: 동치의 본질
  • 추상: 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 의 진단 우위
  • 추상: Grouped 는 각 cell 의 binomial 분산 \(r_i(1-r_i)/n_i\) 가 명시 → deviance residual 직접 산출.
  • 일상어 비유: 학년별 평균 점수 분포가 명확 → 어느 학년이 outlier 인지 시각화.
  • 반사실: Individual 자료에서는 deviance residual 이 0 또는 1 에 가까운 값 — 의미 약함.

2 10.6 Multiple Logistic Regression

정의: 다중 logistic

다변량 위험 인자 \(\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 “다른 변수 일정” 의 의미

가정 위반: Conditional 해석

다중 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 의 함정

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 으로 → 자동 변수 선택.

직관: Lasso 의 양면성
  • 추상: \(\lambda\) 큼 → 더 많은 변수 0 → 더 단순 모형. CV 로 최적 \(\lambda\) 선택.
  • 일상어 비유: 짐 가방의 무게 제한 → 가장 중요한 짐만 선택.
  • 반사실: Lasso 가 예측 모형에 적합. 인과 추정에는 OLS/GLM + DAG 기반 변수 선택이 표준.

3 다중 모형의 적합 진단

정의: 다중 logistic 진단 도구
도구 점검
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 기반 변수 선정 — 인과 우선

정의: Pearl 의 Backdoor Criterion

인과 효과 \(X \to Y\) 를 식별하기 위해 다음 조건의 변수 set \(\mathbf{Z}\) 를 보정:

  1. \(\mathbf{Z}\)\(X\) 의 후손 아님.
  2. \(\mathbf{Z}\)\(X\)\(Y\) 사이의 모든 backdoor path 를 차단.
직관 3 단계: DAG 의 활용
  • 추상 정의: DAG 가 인과 그래프 시각. Backdoor criterion 이 정확한 confounder set 식별.
  • 일상어 비유: 학력-소득 분석 — 학력의 후손 (직업 선택) 보정 안 함, 학력·소득 모두에 영향 (가정 환경) 보정.
  • 반사실 시나리오: DAG 없이 stepwise 사용 시 mediator·collider 자동 포함 → bias.

예시: - 흡연-폐암: 연령·성별 (confounder) 포함, 폐 기능 (mediator) 제외. - 학력-소득: 가정 환경 포함, 직업 (mediator) 제외.

7 VIF 와 다중공선성

정의: VIF 의 임계값
VIF 해석
< 5 무관
5~10 경계
> 10 강한 다중공선성

(O’Brien, 2007).

가정 위반: VIF > 10

VIF 큼 시: - \(\hat\beta\) 추정 불안정. - SE 폭증. - 한 변수의 효과가 다른 변수에 흡수.

3 단계 직관:

  • 추상 정의: 두 변수가 강한 상관 → 별도 효과 분리 어려움.
  • 일상어 비유: 키와 체중 비교 — 둘 다 입력하면 어느 것이 진성 원인인지 모호.
  • 반사실 시나리오: 한 변수 제거 또는 PCA 차원 축소.

8 Q&A — 다중 logistic 의 흔한 오해

Q1: 더 많은 변수가 더 나은 모형?

A: 아니다. Bias-variance trade-off.

3 단계 직관:

  • 추상 정의: 변수 ↑ → train AUC ↑ but test AUC ↓ 가능.
  • 일상어 비유: 시험 답안에 모든 정보 — 답안에 적합 ↑ but 새 시험엔 부정확.
  • 반사실 시나리오: Cross-validation 또는 Lasso 가 자동 균형.
Q2: Stepwise 가 객관적인가?

A: 아니다. Multiple testing + 변수 간 상관 → 결과 불안정.

3 단계 직관:

  • 추상 정의: 자료 본 후 모형 선택 → post-selection inference 부정확.
  • 일상어 비유: 시험 답안 본 후 채점 기준 변경.
  • 반사실 시나리오: 사전 등록 + DAG 기반 변수 선택이 표준.
Q3: 보정 OR 와 crude OR 큰 차이 — 의심?

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 관련 주제

Statistics 크로스링크

Subscribe

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