Logistic Regression 과 계수 해석 (1) — Binary·Quantitative

Woodward Ch.10.3~10.4.2 — Logistic Regression & Binary/Quantitative Predictors

Logistic regression 의 핵심 수식 (logit 함수, MLE 추정), binary 위험 인자의 OR 산출, quantitative 위험 인자의 단위당 OR 해석을 추상 → 일상어 → 반사실 3 단계 직관으로 풀어낸다. EGAT 흡연-CV 사망 + SHHS 연령 사례로 임상 활용을 본다.

Experimentation
Modeling
저자

Kwangmin Kim

공개

2026년 05월 08일

1 10.3 Logistic Regression — 핵심 수식

정의: Logistic 함수

\[ y = \frac{1}{1 + \exp(-b_0 - b_1 x)} \]

S 모양 곡선 (Figure 10.3). 양 끝 asymptotes: - \(x \to -\infty\)\(y \to 0\). - \(x \to +\infty\)\(y \to 1\).

\(y \in (0, 1)\) 범위 내 — risk \(r\) 의 적합 곡선.

1.1 Logit 변환 형태

\[ \text{logit}(\hat r) = \log\left(\frac{\hat r}{1 - \hat r}\right) = b_0 + b_1 x \]

좌변: log odds (= logit). 우변: linear predictor (선형 회귀 형태).

직관 3 단계: 두 형태의 동치성
  • 추상: \(\hat r = 1/(1 + e^{-(b_0 + b_1 x)})\)\(\text{logit}(\hat r) = b_0 + b_1 x\) 는 대수적으로 동등.
  • 일상어 비유: 같은 사실을 두 언어로 표현 — risk 단위 (0~1) 와 logit 단위 (\(-\infty, \infty\)).
  • 반사실: Risk 형태는 직관적, logit 형태는 모형 적합 + 추론에 유리. 두 형태를 자유롭게 변환.

1.2 MLE 추정

정의: Maximum Likelihood Estimation

Likelihood: \[L(b_0, b_1) = \prod_{i=1}^n \hat r_i^{e_i} (1 - \hat r_i)^{n_i - e_i}\]

여기서 \(\hat r_i = 1/(1 + \exp(-b_0 - b_1 x_i))\).

Log-likelihood 최대화 → IRLS (Iteratively Reweighted Least Squares) 알고리즘.

R: glm(y ~ x, family=binomial). Python: statsmodels.api.Logit(y, X).fit().

1.3 직관 — IRLS 의 본질

직관: 가중 최소제곱의 반복
  • 추상: Logistic 의 likelihood 가 closed form 해 없음 → 반복적으로 가중치 갱신하며 적합.
  • 일상어 비유: 처음 추정 → 그 추정의 정밀도로 가중치 부여 → 더 정확한 추정 → 반복. 점점 안정 해에 수렴.
  • 반사실: IRLS 가 수렴 안 하면 (예: complete separation) 모형 부적합 신호.

2 10.4.1 Binary Risk Factor — OR 직접 산출

정의: Binary \(x\) 의 OR

\(x \in \{0, 1\}\) 일 때:

\[ \log(\hat\Psi) = \text{logit}(\hat r_1) - \text{logit}(\hat r_0) = b_1 \cdot 1 - b_1 \cdot 0 = b_1 \]

\[ \hat\Psi = \exp(b_1) \]

slope \(b_1\) 이 그대로 log OR, \(\exp(b_1)\) 이 OR.

95% CI: \[ \exp\left(b_1 \pm 1.96 \cdot \widehat{\text{se}}(b_1)\right) \]

(Woodward, 2014, eq. 10.4~10.6).

2.1 EGAT 사례 — Example 10.4

사례: EGAT 흡연-CV 사망

태국 EGAT (Electricity Generating Authority of Thailand) 코호트, Table 3.2 자료.

적합된 logistic: \[\text{logit} = -4.8326 + 1.0324 \cdot \text{smoke}\]

여기서 \(\text{smoke} = 1\) (흡연자), 0 (비흡연자).

OR 산출: \[\hat\Psi = \exp(1.0324) = 2.808\]

해석: 흡연자의 CV 사망 odds 가 비흡연자의 약 2.8 배.

3 단계 직관:

  • 추상: 회귀 출력 한 줄 → OR 직접 산출. 별도 표 만들기 불필요.
  • 일상어 비유: 흡연이 “OR 단위” 로 2.8 배 — 1 배가 “효과 없음”, 2.8 배가 “흡연자가 거의 3 배 위험”.
  • 반사실: 만약 직선 회귀를 강제로 적용했다면 risk difference 0.06 (가상) 만 산출 → OR 또는 RR 산출에 추가 변환 필요.

2.2 Constant \(b_0\) 의 해석

\(b_0 = -4.8326\) 의 의미: \(x = 0\) (비흡연자) 의 log odds.

\[\text{logit}(\hat r_0) = b_0 = -4.8326\] \[\hat r_0 = \frac{1}{1 + \exp(4.8326)} = \frac{1}{1 + 125.7} \approx 0.79\%\]

비흡연자의 baseline CV 사망률 약 0.79%.

흡연자의 risk: \[\text{logit}(\hat r_1) = -4.8326 + 1.0324 = -3.8002\] \[\hat r_1 = \frac{1}{1 + \exp(3.8002)} \approx 2.18\%\]

RR: \(0.0218 / 0.0079 \approx 2.76\) — OR 2.81 와 비슷 (희귀 결과 가정 충족).

직관: OR vs RR 의 거리
  • 추상: Risk < 5% 면 OR ≈ RR. EGAT 의 0.8% vs 2.2% 가 이 영역.
  • 일상어 비유: 작은 비율의 비교에서는 OR 와 RR 가 거의 동일. 큰 비율 (예: 30% vs 60%) 에서는 차이 큼.
  • 반사실: 만약 결과가 흔하면 (50% 등) OR 가 RR 보다 부풀려져 보임. 보고 시 metric 정의 명확.

3 10.4.2 Quantitative Risk Factor — 단위당 OR

정의: 양적 변수의 OR

\(x\) 가 양적 (예: 연령, 혈압, 콜레스테롤) 일 때:

\[ \log(\hat\Psi) = b_1 (x_1 - x_0) \]

\[ \hat\Psi = \exp\{b_1 (x_1 - x_0)\} \]

해석: \(x_1 - x_0\) 차이당 OR. 1 단위 증가당 OR = \(\exp(b_1)\).

3.1 SHHS 사례 — 연령 단위당 OR

가설 적합: \(\text{logit}(\text{death}) = -10.0 + 0.10 \cdot \text{age}\).

1 살 증가당 OR = \(\exp(0.10) = 1.105\) — 1 살 늘면 사망 odds 10.5% 증가.

10 살 증가당 OR = \(\exp(0.10 \times 10) = \exp(1.0) = 2.72\).

40 → 59 세 (19 살 차이): \(\exp(0.10 \times 19) = \exp(1.9) = 6.69\).

직관 3 단계: 단위 선택의 자유도
  • 추상: \(x\) 의 단위가 OR 의 의미를 결정. 1 살당 OR 와 10 살당 OR 는 같은 자료, 다른 표현.
  • 일상어 비유: 환율 변환 — “1 달러당 원” vs “100 달러당 원” 같은 정보.
  • 반사실: 임상 실무에서는 의미 있는 단위 (예: BMI 5 단위, 콜레스테롤 1 mmol/L) 로 보고. 1 단위 미세 변화 OR 는 직관 어려움.

3.2 선형성 가정 — 양적 변수의 함정

가정 위반: Logit 선형성

\(\text{logit}(r) = b_0 + b_1 x\)logit 단위에서의 선형성을 가정. Risk 단위에서는 비선형.

진성 패턴이 비선형이면: - 연령 60~70 사이 효과 ↑ (가속). - 70~80 사이 효과 ↓ (saturation).

→ 단일 \(b_1\) 가 평균 효과만 잡고 패턴 가림.

3 단계 직관:

  • 추상: 진성 \(f(\text{age})\) 가 비선형이면 선형 모형 misspecified.
  • 일상어 비유: 학년-점수 관계가 1~6 학년에서 ↑, 7~12 학년에서 plateau, 13 학년 이상에서 ↓ 라면 단일 기울기 부적합.
  • 반사실: 비선형 변환 (log age, age², spline) 으로 적합. 자세한 분석은 H-WOO10-7 (양적 변수) 에서.

4 표준오차와 신뢰구간

정의: \(\log\hat\Psi\) 의 SE

Binary 변수: \[\widehat{\text{se}}(\log\hat\Psi) = \widehat{\text{se}}(b_1)\]

Quantitative 변수: \[\widehat{\text{se}}(\log\hat\Psi) = (x_1 - x_0) \cdot \widehat{\text{se}}(b_1)\]

95% CI for OR: \[\exp\left(b_1 (x_1 - x_0) \pm 1.96 (x_1 - x_0) \widehat{\text{se}}(b_1)\right)\]

4.1 Wald CI 의 한계

가정 위반: 작은 표본 + Wald CI

Wald CI 는 대표본 정규 근사 — 작은 표본에서 부정확.

3 단계 직관:

  • 추상: \(\log\hat\Psi\) 의 분포가 정규로 근사 — 작은 표본에서 노이즈.
  • 일상어 비유: 100 회 동전 던지기 평균 vs 5 회 평균. 후자의 정규 근사 부정확.
  • 반사실: Profile likelihood CI 또는 exact CI 가 작은 표본에 정확. R 의 MASS::confint.glm() 또는 Python statsmodels 의 LR-based CI.

5 코드 예시 — Logistic 적합 + OR 추출

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

np.random.seed(42)
n = 1000

# 가상 자료: 흡연-CV 사망
smoke = np.random.binomial(1, 0.30, n)

# 진성 OR=2.8, baseline risk 0.008
log_odds = -4.83 + 1.03 * smoke
prob = 1 / (1 + np.exp(-log_odds))
death = np.random.binomial(1, prob, n)

# Logistic 적합
df = pd.DataFrame({"smoke": smoke, "death": death})
X = sm.add_constant(df[["smoke"]])
model = sm.Logit(df["death"], X).fit(disp=0)

print(model.summary())
print(f"\nOR (smoker vs nonsmoker) = {np.exp(model.params['smoke']):.2f}")
print(f"95% CI: ({np.exp(model.conf_int().loc['smoke', 0]):.2f}, "
      f"{np.exp(model.conf_int().loc['smoke', 1]):.2f})")

해석: 진성 OR=2.8 에 가까운 추정 + Wald CI. 표본 충분하면 정확.

6 실험 분석 lens — A/B 테스트의 logistic

A/B 테스트 자료의 logistic 적합 패턴.

# A/B 테스트의 logistic
df["treatment"] = np.random.binomial(1, 0.5, n)  # 50% A/B
df["pre_engagement"] = np.random.normal(0, 1, n)  # 사전 활동량 (CUPED)

# 기능: treatment 가 0.2 log OR 효과
log_odds = -2.0 + 0.2 * df["treatment"] + 0.5 * df["pre_engagement"]
df["conversion"] = np.random.binomial(1, 1/(1+np.exp(-log_odds)), n)

# Logistic 적합 (단순)
X1 = sm.add_constant(df[["treatment"]])
m1 = sm.Logit(df["conversion"], X1).fit(disp=0)
OR_simple = np.exp(m1.params["treatment"])

# Logistic 적합 (CUPED 식 보정)
X2 = sm.add_constant(df[["treatment", "pre_engagement"]])
m2 = sm.Logit(df["conversion"], X2).fit(disp=0)
OR_adj = np.exp(m2.params["treatment"])

print(f"단순 OR: {OR_simple:.3f}")
print(f"CUPED 보정 OR: {OR_adj:.3f}")

해석: 사전 활동량 보정으로 분산 ↓ → 더 정밀한 OR 추정.

7 Centering 과 Scaling — 양적 변수의 활용

정의: Centering 과 Scaling

Centering: 평균 (또는 임상 표준값) 빼기. \[X' = X - \bar X\]

Scaling: 표준편차 또는 IQR 로 나눔. \[X'' = (X - \bar X) / s_X\]

Z-score (standardization): 두 변환 결합.

직관 3 단계: Centering 의 가치
  • 추상 정의: Intercept \(\beta_0\) = “X = 0 의 logit”. X = 0 이 자연스럽지 않으면 (예: age 0) 의미 없음. Centering 후 \(\beta_0\) = 평균 X 의 logit.
  • 일상어 비유: 시험 점수 비교 시 평균 0 으로 정렬 — intercept 가 평균 학생 수준.
  • 반사실 시나리오: Centering 안 함 시 intercept + 다른 계수의 해석 어려움. Centering 이 표준.

7.1 사례 — Age 의 Centering

사례: Age vs (Age - 50)

가설: \(\text{logit}(\hat r) = -3 + 0.05 \cdot \text{age}\).

Centered: \(\text{logit}(\hat r) = -0.5 + 0.05 \cdot (\text{age} - 50)\). - Intercept -0.5 = 50 세의 logit → risk = 0.378. - Slope 동일.

3 단계 직관:

  • 추상 정의: 같은 모형, 다른 intercept 해석. Age = 50 baseline.
  • 일상어 비유: 환율표의 baseline 변경 — 같은 정보, 다른 표현.
  • 반사실 시나리오: 환자 의사소통 시 centered intercept 가 직관 (“50 세 baseline”).

8 Q&A — OR 해석의 흔한 오해

Q1: OR 가 RR 의 약 2 배 — 부풀려진?

A: 아니다. OR > RR 는 결과 흔할 때 자연.

3 단계 직관:

  • 추상 정의: \(\text{OR} = \text{RR} \cdot (1 - r_0) / (1 - r_1)\). Risk 흔하면 OR 가 RR 보다 큼.
  • 일상어 비유: 50% 결과의 OR 와 RR — 큰 차이.
  • 반사실 시나리오: 보고 시 metric 명시. 결과 흔함 (10%+) 시 RR 이 임상 직관 우월.
Q2: 1 단위 OR 1.05 — 작은 효과?

A: 단위 의존. 의미 있는 단위 변환 후 평가.

3 단계 직관:

  • 추상 정의: 1 단위 차이의 효과. 의미 있는 차이는 더 클 수 있음.
  • 일상어 비유: 1 mmHg vs 10 mmHg — 임상 의의 다름.
  • 반사실 시나리오: 1 mmHg OR 1.05 → 10 mmHg OR = \(1.05^{10} = 1.63\). 임상 단위로 보고.

9 결론

Binary 변수의 OR 는 logistic 의 slope 자체. Quantitative 변수의 OR 는 단위당 또는 의미 있는 차이당. Logit 의 선형성 가정이 양적 변수의 함정 — 비선형 패턴 의심 시 spline. Centering 이 intercept 해석 도구. Metric (OR vs RR) 명시 + 의미 있는 단위 보고가 임상 표준.

다음 글 (H-WOO10-3) 에서는 categorical, ordinal 변수와 floating absolute risk 를 본다.

10 관련 주제

Statistics 크로스링크

Subscribe

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