음이항 분포로 과분산 카운트 데이터를 모델링하는 방법

음이항 분포의 실패 수 해석, 포아송-감마 혼합, NB2 분산 구조와 과분산 카운트 회귀의 진단·적용 방법을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

실패 수의 관점에서 보는 음이항 분포

음이항 분포는 성공확률 (p)인 시행에서 (r)번의 성공이 나타날 때까지 발생하는 실패 수를 다룬다. 확률변수 (X)가 실패 횟수일 때 확률질량함수는 다음과 같다.

[ P(X=k) = C(k+r-1, k) \cdot (1-p)^k \cdot p^r \quad (k=0,1,2,\ldots) ]

(r=1)이면 기하분포(geometric)와 같다. 이 정의는 반복 시행의 실패 수를 설명하지만, 실무에서는 평균과 과분산을 함께 표현하는 카운트 모형으로 더 자주 쓰인다.

((r,p)) 매개변수화에서 기댓값과 분산은 다음과 같다.

[ \mu = r(1-p)/p ]

[ Var[X] = r(1-p)/p^2 = \mu + \mu^2/r ]

분산은 항상 기댓값보다 크므로 (Var[X] > E[X])가 성립한다. 이 성질 때문에 평균과 분산이 같다는 제약을 가진 포아송 분포로는 설명하기 어려운 과분산 카운트 데이터에 적합하다.

NB2 형태의 GLM에서는 이를 다음처럼 표현한다.

[ Var[Y]=\mu+\alpha\mu^2 ]

여기서 (\alpha=1/r)이고, (p=r/(r+\mu))다.

포아송-감마 혼합이 설명하는 추가 분산

음이항 분포는 포아송-감마 혼합으로도 해석할 수 있다.

[ \lambda \sim Gamma(shape=r, rate=r/\mu) ]

[ Y|\lambda \sim Poisson(\lambda) \Rightarrow Y \sim NegBin(\mu,r) ]

관측 대상마다 (\lambda)가 달라지는 이질성이 있으면 포아송의 분산만으로는 설명되지 않는 변동이 생긴다. 이 무작위성이 (\alpha\mu^2)에 해당하는 추가 분산으로 나타난다.

회귀로 확장할 때는 로그 연결함수를 사용한다.

[ log(\mu)=X\beta+offset ]

노출량이 서로 다르면 (log) 노출량을 offset으로 넣을 수 있다. 영값이 특히 많이 나타나는 경우에는 ZINB(Zero-Inflated NB)로 확장할 수 있다.

과분산 강도와 회귀 모형의 해석

실무 회귀에서는 ((r,p))보다 ((\mu,r)), 또는 ((\mu,\alpha=1/r)) 형태가 주로 쓰인다. (r(=1/\alpha))가 커질수록 음이항 모형은 포아송에 수렴한다. 반대로 (\alpha)는 과분산의 강도를 읽는 지표가 된다.

NB2 회귀는 (Y \sim NB2(\mu,\alpha))로 두고, 설계행렬 (X)를 통해 공변량 효과를 추정한다.

[ \mu = exp(X\beta+offset) ]

추정은 최대우도추정(MLE)으로 (\beta)와 (\alpha)를 함께 구한다. 포아송과의 우도비 검정(LRT), AIC/BIC 비교는 모형 선택에 사용할 수 있다.

모형을 적합한 뒤에는 Pearson/Deviance 잔차, 분산-평균비, (\alpha) 추정치를 확인한다. 영향점(outlier), 레버리지, 영과잉도 함께 점검 대상이다. (\alpha \rightarrow 0)이면 포아송이 적절하다는 신호가 될 수 있다. 수렴 경고가 나오면 변수 표준화, 초기값 조정, 규제(정규화)를 검토한다.

이질성이 큰 카운트 데이터에 적용하는 경우

제조·품질에서는 배치당 불량 건수를 예측하거나 공정을 비교할 때 활용할 수 있다. 라인과 설비의 이질성을 반영하면 경보 임계치 설정에도 연결된다.

보험·리스크 영역에서는 청구 건수와 사고 빈도를 모델링할 수 있다. 피보험자 간 이질성을 반영해 위험기반 가격 산정에 활용한다.

디지털·마케팅 데이터에서는 세션당 클릭 수나 전환 수를 다룰 수 있다. 캠페인과 채널마다 변동성이 다른 상황에서 과분산을 반영하고 예산 배분을 검토하는 데 쓴다.

의료·공공 영역에서는 재입원 횟수나 사건 발생 카운트를 분석할 수 있다. 병원·지역 사이의 이질성을 포함해 정책 효과를 추정하는 방식이다.

입력은 카운트 (Y), 공변량 (X), 노출량 (E)다. 먼저 (Var[Y]/E[Y])를 확인하고 포아송을 초기 기준선으로 적합한다. 이후 LRT와 AIC로 음이항 모형의 필요성을 평가하고 (\alpha)를 추정한다. 잔차, 영과잉, 영향점을 진단한 뒤 필요하면 모형을 다시 구성한다. 결과물은 추정계수 (\beta), 과분산 (\alpha), 신뢰구간, 예측값, 요약지표다.

포아송과 NB2가 갈리는 지점

지표 포아송 음이항(NB2)
성능(적합도) 과분산 시 적합도 저하 경향 과분산 데이터에서 우수한 적합도
확장성(모형 유연성) 분산=평균 제약 Var=μ+αμ^2로 유연한 분산
일관성(추정 안정성) 가정 위반 시 SE 과소추정 위험 α 추정으로 SE 보정 효과
안정성(수렴/수치) 대체로 안정 초기값·스케일링 필요 경우 존재
운영 편의(해석·배포) 단순 해석·배포 용이 α 해석 추가, 그러나 산업 표준 툴 지원

적합과 진단을 연결하는 흐름

아니오(과분산)아니오수렴 경고영과잉 강함입력: 카운트 Y, 공변량 X, 노출E탐색: 평균·분산, 분산-평균비,영과잉 점검Var Mean?포아송 GLM 적합음이항 GLM(NB2) 적합진단: 잔차·AIC/BIC진단: 잔차·α 추정치·AIC/BIC적합 불량/과분산?출력: β, 예측, 배포수렴 경고/영과잉?대응: 표준화, 초기값 조정,최적화 변경대안: ZINB/허들 모형

Python으로 포아송과 음이항 회귀를 비교하기

전제조건: Python 3.11+, numpy/pandas, statsmodels 0.14+ 설치

과분산 데이터를 시뮬레이션한 뒤 포아송과 음이항의 AIC를 비교하고, (\alpha)와 예측값을 확인하는 예시다.

# Python 3.11, statsmodels 0.14+
import numpy as np
import pandas as pd
from statsmodels.discrete.discrete_model import Poisson, NegativeBinomial

rng = np.random.default_rng(42)
n = 2000
x = rng.normal(size=n)
offset = np.log(rng.uniform(0.5, 2.0, size=n))  # 노출량 E에 대한 log-offset

# 진실 모형: NB2, Var = mu + alpha * mu^2
beta0, beta1 = 0.2, 0.7
alpha_true = 0.6
mu = np.exp(beta0 + beta1 * x + offset)

# 포아송-감마 혼합으로 NB2 데이터 생성
# Gamma(shape=1/alpha, scale=alpha*mu) → 평균 mu, 분산 alpha*mu^2
lam = rng.gamma(shape=1/alpha_true, scale=alpha_true * mu)
y = rng.poisson(lam)

# 설계행렬 구성
X = np.column_stack([np.ones(n), x, offset])  # 절편, x, offset를 명시적 회귀항으로 포함
# 음이항: loglike_method='nb2' 지정
poisson_res = Poisson(y, X).fit(disp=False)
nb_res = NegativeBinomial(y, X, loglike_method='nb2').fit(disp=False)

print("요약: 포아송 vs 음이항")
print(f"- 평균={y.mean():.3f}, 분산={y.var():.3f}, 분산/평균={y.var()/y.mean():.2f}")
print(f"- AIC(Poisson)={poisson_res.aic:.1f}, AIC(NB)={nb_res.aic:.1f}")
print(f"- 추정 α(NB2)={nb_res.params_alpha:.3f}")  # statsmodels 0.14의 α 접근자

# 예측(새 데이터)
x_new = np.array([[-1.0], [0.0], [1.0]])
offset_new = np.log([1.0, 1.0, 1.0])
X_new = np.column_stack([np.ones(3), x_new.ravel(), offset_new])
mu_pred_nb = nb_res.predict(X_new)
print("NB 예측 평균(mu):", mu_pred_nb.round(3))

offset는 회귀항으로 직접 포함하거나 패밀리의 offset 인자로 전달하는 방식 가운데 하나만 사용하는 편이 좋다. 수렴 경고가 있으면 변수 표준화, 초기값 변경(method='newton' 등), 이상치 점검이 필요하다. (\alpha) 추정치가 0에 가까우면 포아송 모형의 적정성을 시사한다.

적합도와 운영 판단에 미치는 영향

과분산 데이터에서는 포아송 대비 AIC가 5~20% 개선될 수 있으며, 이 효과는 데이터에 의존한다. 음이항 모형은 표준오차의 과소추정을 완화해 유의성 판단 오류를 줄이고, RMSE/MAE 개선과 극단값 영향 완화에도 연결될 수 있다.

(\alpha)를 통해 데이터 이질성을 진단할 수 있다는 점도 실무적이다. 경보 임계치와 리스크 버퍼를 설정할 때 보수성을 확보하는 데 도움이 되며, 필요하면 ZINB/허들 모형이나 혼합효과 모형으로 확장할 수 있다.

분산-평균비가 1보다 크거나, 포아송 진단이 적합하지 않고 잔차에 과산포 패턴이 보이면 음이항 모형을 검토할 시점이다. 포아송 기준선을 세운 뒤 과분산 검정과 AIC 비교를 수행하고, NB2 적합 후 (\alpha)와 잔차를 확인한다. 영과잉이 강하면 ZINB 또는 허들 모형을 이어서 검토한다.

음이항 분포과분산포아송 회귀GLM통계 모델링