1 Poisson Regression 의 정체성
사건 수 \(D\) (count) 를 모형화. Person-time (PT) 가 분모.
\[D \sim \text{Poisson}(\lambda \cdot \text{PT})\]
\[\log E[D] = \log(\text{PT}) + \beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p\]
\(\log(\text{PT})\) 는 offset — 계수 1 고정.
\(\exp(\beta_j)\) = Incidence Rate Ratio (IRR).
1.1 직관 — Person-time 의 의미
- 추상 정의: \(D / \text{PT}\) 가 incidence rate. Poisson 회귀가 이 rate 의 covariate 효과 모형.
- 일상어 비유: 회사의 연간 사고 발생률 = 사고 수 / 직원-년. Poisson 이 이 비율의 부서·조건 효과 분석.
- 반사실 시나리오: PT 무시하고 단순 사건 수 비교 → 추적 길이 차이의 confounding. PT 분모가 통제.
1.2 Offset 의 역할
\(\log(\text{PT})\) 가 offset (계수 1 고정) 인 이유:
\[E[D] = \text{PT} \cdot e^{\beta^T X} \quad \Rightarrow \quad \log E[D] = \log(\text{PT}) + \beta^T X\]
만약 \(\log(\text{PT})\) 의 계수가 자유라면 모형이 PT 의 효과를 \(\beta_{\text{PT}}\) 로 추정. 우리가 원하는 것은 PT 가 선형 분모라는 가정 — 따라서 계수 1 고정.
3 단계 직관:
- 추상 정의: PT 와 사건 수의 관계가 정비례 가정. 이 가정 하에 offset 사용.
- 일상어 비유: 사고 수가 운전 시간에 정비례 가정 — 1 시간 운전이 0.5 시간의 2 배 사고 위험.
- 반사실 시나리오: 만약 비-선형 (예: 피로 누적) 이라면 offset 부적절. 비선형 PT 효과 모형 필요.
2 Cox PH 와의 관계
Hazard 가 시간 + covariate 에 일정 (\(h(t \mid X) = \lambda e^{\beta^T X}\)) 이면:
\[D_i \mid X_i \sim \text{Poisson}(\lambda e^{\beta^T X_i} \cdot \text{PT}_i)\]
Cox PH (exponential baseline) 와 Poisson regression 거의 동치.
- 추상 정의: Cox = 사건 시점 단위 분석, Poisson = 사람-시간 합산 분석. 일정 hazard 가정 충족 시 동등.
- 일상어 비유: Cox = “각 사건이 언제 발생했는가” 분석. Poisson = “총 몇 건이 얼마의 시간 동안” 분석.
- 반사실 시나리오: 시간 의존성 강하면 Cox 가 정밀. 인구 단위 분석 (전염병학·routine) 이면 Poisson 이 효율 ↑.
3 단순 Poisson — 단일 변수
\[\log E[D \mid X] = \log(\text{PT}) + \beta_0 + \beta_1 X\]
\(\exp(\beta_1)\) = X 1 단위 증가당 IRR.
3.1 Person-time 자료의 형식
Long-format (각 개인 + 시간 구간):
| Person | X | PT | Events |
|---|---|---|---|
| 1 | 0 | 5.2 | 0 |
| 2 | 1 | 3.7 | 1 |
| … | … | … | … |
Aggregated (categorical X):
| X | Total PT | Total Events |
|---|---|---|
| 0 | 5240 | 80 |
| 1 | 3710 | 95 |
Aggregated 로 합산해도 IRR 동일 — 자료 효율 ↑.
3 단계 직관:
- 추상 정의: Poisson 의 sufficient statistic 이 (Total PT, Total Events) 만 — 개별 자료 정보 손실 없이 합산 가능.
- 일상어 비유: 마라톤 결승 시간 평균 — 모든 주자의 개별 시간 vs 합산 평균. Poisson 의 합산이 비슷.
- 반사실 시나리오: Continuous covariate 에서는 합산 어려움 — long-format 사용.
4 SHHS 사례 — 흡연-CV 사망 IRR
가설: SHHS 의 흡연자 vs 비흡연자의 CV 사망 IRR.
| 흡연 | Person-years | Deaths | Rate (per 1000 PY) |
|---|---|---|---|
| 비흡연 | 25,000 | 50 | 2.0 |
| 흡연 | 15,000 | 75 | 5.0 |
Crude IRR: \(5.0 / 2.0 = 2.5\).
Poisson regression: \[\log D = \log \text{PY} + \beta_0 + \beta_1 \cdot \text{smoke}\]
\(\hat\beta_1 = \log(2.5) = 0.916\) → IRR = 2.5.
95% CI for IRR: \[\exp(\hat\beta_1 \pm 1.96 \cdot \text{se}(\hat\beta_1))\]
\(\text{se} = \sqrt{1/D_{\text{smoke}} + 1/D_{\text{nonsmoke}}} = \sqrt{1/75 + 1/50} = 0.183\)
CI: \(\exp(0.916 \pm 1.96 \cdot 0.183) = (1.74, 3.58)\).
3 단계 직관:
- 추상 정의: Poisson 이 이 단순 IRR 추정을 회귀 형태로 일반화. 다중 covariate 시 자연 확장.
- 일상어 비유: 두 회사의 사고율 비교 (사고/직원-년) — Poisson 이 이 비교의 보정·검정 도구.
- 반사실 시나리오: 직접 IRR 산출보다 Poisson 이 confounder 보정 가능 + Wald CI 자동.
5 다중 Poisson — Confounder 통제
\[\log E[D] = \log \text{PT} + \beta_0 + \beta_1 \text{smoke} + \beta_2 \text{age} + \beta_3 \text{sex}\]
\(\exp(\beta_1)\) = age + sex 보정 후 흡연 IRR.
Cox PH 와 동치 (일정 hazard 가정 하).
5.1 직관 — Confounder 통제의 IRR 변화
- 추상 정의: Crude IRR 이 confounder 효과 포함. Adjusted IRR 이 conditional — confounder 일정.
- 일상어 비유: 흡연-CV 사망에서 연령 보정 시 IRR ↓ — 흡연자가 평균 더 노년이라 crude 가 부풀려짐.
- 반사실 시나리오: Crude IRR 만 보면 흡연 효과 + 연령 효과 결합. Adjusted 가 진성 흡연 효과 추정.
5.2 Wald 와 LR Test
import statsmodels.api as sm
# Poisson regression
df = pd.DataFrame({"D": [50, 75], "PT": [25000, 15000], "smoke": [0, 1]})
# Long-form needed for individual analysis
# Aggregated form:
model = sm.GLM(df["D"], sm.add_constant(df[["smoke"]]),
family=sm.families.Poisson(),
offset=np.log(df["PT"])).fit()
print(f"IRR = {np.exp(model.params['smoke']):.2f}")
print(f"CI: {np.exp(model.conf_int().loc['smoke']).values}")
print(f"Wald p: {model.pvalues['smoke']:.4f}")6 SER (Standardised Event Ratio) 와의 비교
\[\text{SER} = \frac{\text{Observed events}}{\text{Expected events}}\]
Expected = \(\sum_a \text{PT}_a \cdot \text{rate}_a^{\text{ref}}\).
(B45 의 SMR 와 동일 개념 — survival 자료 일반화.)
- 추상 정의: SER 은 외부 reference rate 와 비교. Poisson 은 자료 내 비교.
- 일상어 비유: SER = “이 회사의 사고율이 산업 평균의 몇 배”. Poisson = “이 회사의 부서별 사고율 비교”.
- 반사실 시나리오: 외부 rate 가 표준 (예: 인구 통계) 이면 SER 효율. 자료 내 비교라면 Poisson 우월.
7 Routine Data 활용
지역별 + 연령별 + 성별 + 사망 원인별 자료가 routine 으로 수집되는 경우 (인구 통계).
# 예: 지역 × 연령 × 성별 × 사인 합산 자료
df = pd.DataFrame({
"deaths": [100, 200, 50, 80, ...],
"PY": [50000, 100000, 20000, 30000, ...],
"region": [1, 1, 2, 2, ...],
"age_group": [...],
"sex": [...],
})
# Region 효과 (age + sex 보정)
model = sm.GLM(df["deaths"],
sm.add_constant(df[["region", "age_group", "sex"]]),
family=sm.families.Poisson(),
offset=np.log(df["PY"])).fit()
IRR_region = np.exp(model.params["region"])3 단계 직관:
- 추상 정의: 합산 자료 + Poisson = 인구 단위 비교의 표준 도구.
- 일상어 비유: 정부 인구 통계의 회귀 분석 — region·age·sex 매트릭스.
- 반사실 시나리오: 자세한 자료 (개별 사건 시점) 없는 경우 Poisson 이 거의 유일한 도구. Cox 는 자세한 자료 필요.
8 Generic Data 와 Poisson
| Cell | X 값 | PT | Events |
|---|---|---|---|
| (i, j, k) | (i, j, k) 의 covariate 조합 | \(\sum\) PT | \(\sum\) events |
각 cell 이 한 행. 큰 자료를 합산하여 분석 효율 ↑.
9 Overdispersion 의 위험
Poisson 가정 — \(\text{Var}(D) = E[D]\) (분산 = 평균).
실제 자료에서 \(\text{Var}(D) > E[D]\) — overdispersion. 원인: - 군집 (clustering). - 미관측 heterogeneity. - 사건 간 의존.
결과: SE 과소 추정 → CI 너무 narrow → 가짜 유의.
3 단계 직관:
- 추상 정의: Poisson 의 분산-평균 동등 가정 위반.
- 일상어 비유: 측정 도구의 정밀도 가정 — 실제 noise 가 가정보다 크면 결과 부풀려짐.
- 반사실 시나리오: Negative binomial 또는 quasi-Poisson 이 overdispersion 처리. SE 보정.
9.1 Overdispersion 의 검출
# Pearson chi-square / df
pearson_chi2 = ((df["D"] - model.predict())**2 / model.predict()).sum()
dispersion = pearson_chi2 / model.df_resid
print(f"Dispersion: {dispersion:.2f}")
print(f" > 1 → overdispersion")dispersion > 1.5 → quasi-Poisson 또는 NB 권장.
10 A/B 테스트의 Poisson
A/B 테스트: - \(D\): 사용자별 클릭 수. - PT: 노출 시간.
# A/B 의 Poisson
df["log_PT"] = np.log(df["exposure_time_min"])
model = sm.GLM(df["clicks"], sm.add_constant(df[["treatment", "age"]]),
family=sm.families.Poisson(),
offset=df["log_PT"]).fit()
IRR_treat = np.exp(model.params["treatment"])
print(f"Treatment IRR (clicks per minute): {IRR_treat:.3f}")3 단계 직관:
- 추상 정의: A/B 의 사건 수 결과 (구매 횟수, 클릭 수, 페이지 뷰) 가 Poisson 자연.
- 일상어 비유: 두 매장의 매출 (= 거래 횟수) 비교 — Poisson 이 표준.
- 반사실 시나리오: Overdispersion 흔함 (클릭 수의 군집) → quasi-Poisson 또는 NB 권장.
11 Negative Binomial — Overdispersion 의 표준
\[D \sim \text{NB}(\mu, k)\]
\[\text{Var}(D) = \mu + \mu^2 / k\]
여기서 \(k\) = dispersion parameter. \(k \to \infty\) 면 Poisson.
활용: Overdispersion 의 표준 처리.
- 추상 정의: 추가 분산 모수 \(k\) 로 overdispersion 처리.
- 일상어 비유: 측정 도구의 정밀도 ↓ 보정.
- 반사실 시나리오: Quasi-Poisson 도 SE 보정 가능. NB 가 likelihood 기반 — AIC 비교 가능.
12 Zero-Inflated Poisson (ZIP)
자료에 0 이 과다.
\[P(D = 0) = \pi + (1 - \pi) e^{-\lambda}\] \[P(D = k) = (1 - \pi) \frac{\lambda^k e^{-\lambda}}{k!}, \quad k > 0\]
\(\pi\) = “structural zero” 비율.
- 추상 정의: 두 source 의 0 — Poisson 의 “운 좋게 0” + structural “절대 0”.
- 일상어 비유: 결제 수 0 — “이번엔 안 사줌” vs “절대 안 사는 사용자”.
- 반사실 시나리오: 단순 Poisson 시 0 의 source 무시 → SE 부정확. ZIP 이 정직.
13 결론
Poisson regression 은 person-time 자료의 IRR 분석 도구. Offset 으로 PT 통제, \(\exp(\beta)\) 가 IRR. Cox PH 의 일정 hazard 특수 경우. NB 가 overdispersion 의 표준, ZIP 이 zero 과다의 표준. Routine 자료에서 표준 도구.
다음 글 (H-WOO11-9) 에서 pooled logistic regression 을 본다.
14 관련 주제
- 경쟁 위험
- 1111-11-11, 풀링 로지스틱 회귀
- Logistic 개관
Statistics 크로스링크
Phase B 크로스링크