GLM 적합도 측정 — Deviance·Pearson·Analysis of Deviance

McCullagh & Nelder §2.3 — Measuring the goodness of fit

McCullagh & Nelder (1989) §2.3 의 적합도 측정 이론을 전개한다. null 모형·full 모형·중간 모형의 3단 구도에서 적합의 불일치(discrepancy)를 로그우도비로 정의하고, 이탈도(deviance)와 일반화 Pearson \(X^2\) 통계량의 수식·분포·비교·ANOVA 확장인 analysis of deviance 를 직관과 함께 정리한다.

Statistics
GLM
저자

Kwangmin Kim

공개

2026년 04월 14일

1 왜 “적합도 측정” 이 별도 주제인가

GLM 의 추정은 MLE·IRLS 로 모수 \(\hat{\boldsymbol{\beta}}\) 를 내놓는다. 그러나 “추정했다” 는 사실이 “모형이 데이터를 잘 설명한다” 를 의미하지 않는다. 회귀의 실무 질문은 늘 세 단계로 쪼개진다.

  1. 모수를 어떻게 추정했는가 (estimation)
  2. 적합된 값 \(\hat\mu_i\) 가 관측값 \(y_i\) 와 얼마나 가까운가 (goodness of fit)
  3. 이 모형보다 간단하거나 복잡한 모형과 비교해 유의미한 개선이 있는가 (model comparison)

OLS 에서는 잔차제곱합(RSS, residual sum of squares) 이 이 세 질문을 한꺼번에 커버한다. \(\mathrm{RSS}\) 가 작으면 적합이 좋고, \(\Delta \mathrm{RSS}\) 가 크면 개선이 크다. 하지만 GLM 에서는 반응변수가 카운트·비율·양수·시간 등 제각각이고 분산 구조도 \(V(\mu)\) 로 이질적이라, 원시 잔차의 제곱합을 더한 양은 적합도의 공정한 척도가 되지 못한다. 포아송에서는 작은 잔차라도 \(\mu\) 가 작으면 상대적 오차가 크고, 이항에서는 \(\mu\) 가 끝단(0 또는 \(m\))에 붙으면 분산이 0 으로 수렴한다.

따라서 “모든 GLM 에서 공정하게 비교 가능한 적합도 척도” 가 필요하다. McCullagh & Nelder §2.3 의 답이 이탈도(deviance)일반화 Pearson \(X^2\) 이다.

직관: RSS 의 역할을 “포화 모형과의 우도 차이” 로 치환한다. 분포마다 잔차의 의미는 달라도, “가장 잘 맞는 모형(full)” 과 “지금 모형” 의 로그우도 차이는 분포에 관계없이 공정한 거리(distance) 가 된다.


2 세 단계 모형: Null, Full, Intermediate

적합도를 이야기하려면 먼저 비교 대상을 정리해야 한다. McCullagh 는 \(n\) 개 관측을 두고 모수 개수 순서로 세 모형을 세운다.

모형 모수 수 \(\hat\mu_i\) 역할
영 모형 (null model) 1 공통 \(\bar y\) 변동을 전부 확률 성분으로 본다 (하한)
중간 모형 (current model, \(p\) params) \(p\) \(g^{-1}(\mathbf{x}_i^\top \hat{\boldsymbol{\beta}})\) 실제 관심 모형
포화 모형 (full/saturated model) \(n\) \(y_i\) 변동을 전부 체계적 성분으로 본다 (상한)
  • Null 은 “공변량 없음, 상수 하나” 만 가진 가장 단순한 모형이다. 데이터의 평균 수준만 맞춘다.
  • Full 은 관측 수와 모수 수가 같아, \(\hat\mu_i = y_i\) 를 달성한다. 데이터를 “설명한다” 기보다 재현(reproduce) 한다. 정보 요약이 없어 실무적 의미는 없지만, 적합의 이론적 상한 으로 쓰인다.
  • Intermediate 는 현실에서 쓰는 모형이다. null 과 full 사이 어딘가에 있다.

직관: null 은 “아무것도 설명 못 했을 때의 출발점”, full 은 “완벽 재현 상태의 천장”. 우리 모형이 천장에서 얼마나 아래로 내려와 있는가 가 적합의 불일치(discrepancy) 다. 이 거리를 로그우도로 재면 이탈도가 된다.


3 Discrepancy of a Fit — 로그우도비로 본 불일치

정의: 적합의 불일치 (Discrepancy of a fit)

분산 모수 \(\phi\) 를 고정하고 \(\boldsymbol{\beta}\) 에 대해 최대화한 로그우도를 \(\ell(\hat{\boldsymbol\mu}, \phi; \mathbf{y})\) 라 하자. 포화 모형의 로그우도는 \(\ell(\mathbf{y}, \phi; \mathbf{y})\) 이다. 적합의 불일치는 두 로그우도의 차이에 2 를 곱한 양으로 정의한다.

\[ D^*(\mathbf{y}; \hat{\boldsymbol\mu}) \;=\; 2\,\{\ell(\mathbf{y},\phi;\mathbf{y}) \;-\; \ell(\hat{\boldsymbol\mu},\phi;\mathbf{y})\} \]

이것이 축척 이탈도 (scaled deviance) 이며, 이를 분산 모수로 나누기 전의 “분포별 핵심 부분” 만 뽑은 것이 이탈도(deviance) \(D(\mathbf{y};\hat{\boldsymbol\mu})\) 다.

\[ D^*(\mathbf{y};\hat{\boldsymbol\mu}) \;=\; \frac{D(\mathbf{y};\hat{\boldsymbol\mu})}{\phi} \]

지수족의 일반형 \(f(y;\theta,\phi) = \exp\{(y\theta - b(\theta))/a(\phi) + c(y,\phi)\}\) 에서 \(a_i(\phi) = \phi/w_i\) 를 가정하면, 포화 모형의 정준모수 추정치 \(\tilde\theta_i = \theta(y_i)\) 와 현재 모형의 추정치 \(\hat\theta_i = \theta(\hat\mu_i)\) 를 써서 다음이 성립한다.

\[ D^*(\mathbf{y};\hat{\boldsymbol\mu}) \;=\; \frac{1}{\phi}\sum_{i=1}^n 2\,w_i\,\{y_i(\tilde\theta_i - \hat\theta_i) - b(\tilde\theta_i) + b(\hat\theta_i)\} \]

직관: 가운데 중괄호 안의 양은 각 관측이 “완벽 재현” 과 “현재 적합” 사이에서 잃은 로그우도 다. 음이 아니며, \(y_i = \hat\mu_i\) 이면 0 이 된다. 모든 관측에 걸쳐 더하면 현재 모형이 전체 데이터에 대해 포화 모형 대비 얼마나 손해 보고 있는지가 나온다.


4 주요 분포의 Deviance 공식

\(D(\mathbf{y};\hat{\boldsymbol\mu})\) 는 분포를 대입하면 구체적으로 쓸 수 있다. 다섯 가지 표준 지수족의 결과를 모아 두면 전체 GLM 의 적합도를 한 눈에 비교할 수 있다.

분포 이탈도 \(D(\mathbf{y};\hat{\boldsymbol\mu})\)
Normal \(\sum (y_i - \hat\mu_i)^2\)
Poisson \(2\sum \{y_i \log(y_i/\hat\mu_i) - (y_i - \hat\mu_i)\}\)
Binomial (\(m\) 시행) \(2\sum \{y_i \log(y_i/\hat\mu_i) + (m-y_i)\log[(m-y_i)/(m-\hat\mu_i)]\}\)
Gamma \(2\sum \{-\log(y_i/\hat\mu_i) + (y_i - \hat\mu_i)/\hat\mu_i\}\)
Inverse Gaussian \(\sum (y_i - \hat\mu_i)^2 / (\hat\mu_i^2 y_i)\)

몇 가지 해석.

  • Normal 은 RSS 와 동치 다. \(D = \sum(y_i - \hat\mu_i)^2\) 이므로 이탈도는 OLS 잔차제곱합의 우도 기반 일반화임이 드러난다. “모든 분포에서 RSS 같은 역할을 할 단일 수치” 라는 설계 목적이 Normal 에서 자기 자신으로 환원된다는 일관성 테스트에 통과한다.
  • Poisson 의 첫 항 \(y_i\log(y_i/\hat\mu_i)\)\(G^2\) (log-likelihood-ratio chi-square) 로 Bishop–Fienberg–Holland 가 대중화한 지표와 동일하다. 절편을 포함한 모형에서는 둘째 항의 합이 0 이어서 보통 생략한다.
  • Binomial 의 형태 는 성공·실패 두 방향의 KL 거리 합이다. \(y_i/m\) 이 경험적 확률, \(\hat\mu_i/m\) 이 적합 확률이라 하면 \(D\) 는 두 이항 분포 사이 KL 거리의 \(2m\) 배이다.
  • Gamma·Inverse Gaussian 은 분산이 평균에 의존하므로 원시 잔차가 아닌 상대 편차 형태로 쓰인다. 작은 \(\hat\mu\) 에서 큰 \(\hat\mu\) 까지 공정하게 기여시키기 위한 스케일링이다.

직관: “같은 RSS 라도 포아송이면 큰 \(\hat\mu\) 구간에서는 관대하고 작은 \(\hat\mu\) 구간에서는 엄격하게” 와 같은 분포 특유의 가중이 수식에 자동으로 들어가 있다. 이것이 이탈도가 모든 GLM 에서 공통 지표로 기능할 수 있는 이유다.


5 Generalized Pearson \(X^2\) Statistic

이탈도가 유일한 적합도 지표는 아니다. 고전적인 Pearson 카이제곱 통계량 을 GLM 전체로 확장한 일반화 Pearson \(X^2\) 가 두 번째 표준이다.

정의: 일반화 Pearson \(X^2\)

\[ X^2 \;=\; \sum_{i=1}^n \frac{(y_i - \hat\mu_i)^2}{V(\hat\mu_i)} \]

여기서 \(V(\hat\mu_i)\) 는 해당 분포의 분산함수 (variance function) 를 추정치에 대입한 값이다.

  • Normal: \(V(\mu)=1\)\(X^2\) = RSS (이탈도와 일치).
  • Poisson: \(V(\mu)=\mu\)\(X^2 = \sum (y_i-\hat\mu_i)^2/\hat\mu_i\) — 전통적 카이제곱 “관측–기대 제곱/기대” 형태.
  • Binomial: \(V(\mu) = \mu(1-\mu/m)\) → 2×2 표의 Pearson 카이제곱으로 환원.
  • Gamma: \(V(\mu)=\mu^2\)\(X^2 = \sum (y_i-\hat\mu_i)^2/\hat\mu_i^2\) (상대오차 제곱합).

직관: \(X^2\) 는 “표준화된 잔차의 제곱합” 이다. 각 관측의 원시 편차를 자신의 분산으로 정규화해, 큰 분산 지점과 작은 분산 지점의 기여를 평평하게 만든다. 이탈도가 로그우도 기반 이라면 \(X^2\)2차 근사 기반 이다. 이탈도 수식을 \(\hat\mu_i\) 근방에서 테일러 전개하면 그 주요항이 \(X^2\) 가 된다는 관계가 둘의 친밀도를 설명한다.


6 Deviance vs Pearson \(X^2\) — 어느 것을 언제 쓰는가

두 통계량은 모두 Normal-이론 선형모형에서는 정확히 \(\chi^2\) 분포를 갖고, 그 밖에서는 점근 \(\chi^2\) 로 근사된다. 실무 선택 기준은 다음과 같다.

비교축 Deviance \(D\) Pearson \(X^2\)
기반 로그우도비 (likelihood ratio) 표준화 잔차 제곱합
중첩 모형 가산성 있음\(D(M_1) - D(M_2)\) 가 서브모형의 추가 설명력 일반적으로 없음
해석 “포화 모형 대비 정보 손실” “기대 대비 관측 편차” — 카이제곱 검정 친화
근사 품질 이산 데이터에서 \(n\to\infty\) 에도 \(\chi^2\) 근사가 불완전할 수 있음 희소 데이터에서 오히려 \(D\) 보다 나을 때가 있음
분산 모수 \(\phi\) 추정 가능 (Deviance/df) 더 표준적 (X^2/df, 모멘트 추정)

실무 규칙.

  1. 중첩 모형 비교 에는 거의 항상 이탈도를 쓴다. 가산성 덕분에 “항 하나 추가해서 얼마나 개선됐는가” 가 \(\Delta D\) 로 바로 읽힌다.
  2. 절대 적합도 검정 (H0: 모형이 참) 에는 \(X^2\) 가 종종 우선된다. 특히 이산 데이터에서 \(\chi^2\) 근사 품질이 더 안정적이다.
  3. 분산 모수 \(\phi\) 추정 에는 관행적으로 \(\hat\phi = X^2/(n-p)\) 를 쓴다. quasi-likelihood 와 호환이 좋다.

직관: 이탈도는 “모형끼리 싸움 붙이는 심판”, Pearson 은 “모형이 현실과 얼마나 어긋나는지 읽는 자” 라 기억하면 용도가 잘 구분된다.


7 Analysis of Deviance — ANOVA 의 일반화

전통적인 ANOVA 표는 “모형 1 → 1+A → 1+A+B → 1+A+B+A.B” 로 모형을 늘려가며 RSS 의 1 차 차분(first differences) 을 각 항의 s.s. 로 귀속시킨다. GLM 에서는 RSS 자리에 이탈도를 넣어 동일한 구조를 얻는다.

예시 (\(4\times 3\) 요인설계, 총 12 관측).

모형 d.f. Discrepancy 첫 차분 (s.s.) d.f.
1 (null) 11 1000 500 3 \(A\) ignoring \(B\)
\(A\) 8 500 300 2 \(B\) eliminating \(A\)
\(A+B\) 6 200 200 6 \(A.B\) eliminating \(A,B\)
\(A+B+A.B\) 0 0 (full)

여기서 discrepancy 를 “이탈도 \(D\)” 로 바꾸면 그대로 analysis of deviance 표가 된다. 각 행의 차분은 해당 항을 추가했을 때 설명 안 된 이탈도가 얼마나 줄어드는지를 나타내며, 점근적으로 \(\chi^2_{\Delta\mathrm{df}}\) 로 분포한다.

비직교 설계에서의 해석

공변량들이 직교하지 않으면 “항의 순서” 가 분해에 영향을 준다. 각 첫 차분은 그 위 항들의 효과를 제거한 후, 그 아래 항들의 효과를 무시한 기여다. 결과적으로 하나의 “정답 분해” 는 존재하지 않고, 여러 순서의 analysis-of-deviance 를 같이 봐야 한다. McCullagh 는 “복잡한 데이터에서 단일 최적 모형을 인용하는 것은 오도일 수 있고, 비슷한 적합도의 모형 여러 개를 함께 보고해야 한다” 고 경고한다.

직관: analysis of deviance 는 스크리닝 도구다. “유의 수준 \(p<.05\) 를 정확히 맞추는 기계” 가 아니라 중요한 항을 추려내는 체 로 봐야 정확한 쓰임이다.


8 점근 분포 — \(\chi^2\) 근사의 한계

Normal-이론 선형모형에서는 \(D\)\(X^2\) 가 모두 정확히 \(\chi^2_{n-p}\,\sigma^2\) 분포를 따른다. 그 외의 분포에서는 점근 결과에 의존한다. 실무에서 주의해야 할 포인트는 다음 세 가지다.

  1. 중첩 모형의 이탈도 차이 \(\Delta D = D(M_0) - D(M_1)\)\(H_0: M_0\) 이 참 아래에서 \(\chi^2_{\Delta p}\) 로 근사된다. 이 근사는 비교적 견고하다 — LRT 의 Wilks 정리가 적용되기 때문이다.
  2. 절대 이탈도 \(D\) 자체가 \(\chi^2_{n-p}\) 로 근사된다는 결과는 훨씬 약하다. 특히 이진·희소 카운트 데이터에서는 \(n\to\infty\) 여도 근사가 좋지 않을 수 있다. McCullagh: “이탈도 자체에 정밀한 유의수준을 붙이지 말라.”
  3. exact 결과 는 정규·지수·역가우스 분포의 단순 설계에서만 가능하다. 그 밖에서는 점근 또는 붓스트랩에 의존한다.

직관: 이탈도로 “두 모형 중 어느 쪽이 나은가” 는 꽤 신뢰할 수 있지만, “이 모형이 참인가” 는 이탈도만으로 판정하기 어렵다. 전자는 비교 문제라 공통 bias 가 상쇄되지만, 후자는 절대 척도 문제라 근사 편향을 그대로 받는다.


9 코드 예시 — Poisson 회귀의 적합도 평가

9.1 Step 1: numpy 로 이탈도·Pearson 직접 계산 (원리 확인)

import numpy as np

# 가상의 카운트 데이터
rng = np.random.default_rng(0)
n = 200
x = rng.normal(size=n)
mu_true = np.exp(0.5 + 0.8 * x)
y = rng.poisson(mu_true)

# 단순 Poisson GLM 을 IRLS 한 결과 (간략화 — 정답 계수로 대체)
beta_hat = np.array([0.48, 0.82])
X = np.column_stack([np.ones(n), x])
mu_hat = np.exp(X @ beta_hat)

# Poisson 이탈도: D = 2 sum{ y log(y/mu) - (y - mu) }
mask = y > 0                       # y=0 인 항은 y log y = 0 으로 처리
term1 = np.zeros(n)
term1[mask] = y[mask] * np.log(y[mask] / mu_hat[mask])
term2 = y - mu_hat
D = 2 * np.sum(term1 - term2)

# 일반화 Pearson X^2: sum (y - mu)^2 / V(mu), Poisson 은 V(mu)=mu
X2 = np.sum((y - mu_hat) ** 2 / mu_hat)

df_resid = n - X.shape[1]
print(f"Deviance  D  = {D:.2f}  (df={df_resid}, D/df={D/df_resid:.3f})")
print(f"Pearson   X2 = {X2:.2f} (df={df_resid}, X2/df={X2/df_resid:.3f})")

실무 해석: \(D/\mathrm{df}\)\(X^2/\mathrm{df}\) 가 1 근방이면 Poisson 가정과 잘 맞는다. 1 보다 훨씬 크면 과산포(over-dispersion) 의 징후이며, Negative Binomial 이나 quasi-Poisson 으로 대응한다.

9.2 Step 2: statsmodels 로 analysis of deviance

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

df = pd.DataFrame({"y": y, "x": x, "z": rng.normal(size=n)})
m0 = sm.GLM.from_formula("y ~ 1",         data=df, family=sm.families.Poisson()).fit()
m1 = sm.GLM.from_formula("y ~ x",         data=df, family=sm.families.Poisson()).fit()
m2 = sm.GLM.from_formula("y ~ x + z",     data=df, family=sm.families.Poisson()).fit()

# Analysis of deviance table (nested)
rows = []
for name, m in [("null", m0), ("+x", m1), ("+x+z", m2)]:
    rows.append({"model": name, "df_resid": m.df_resid, "deviance": m.deviance,
                 "pearson_chi2": m.pearson_chi2})
tbl = pd.DataFrame(rows)
tbl["delta_D"]  = -tbl["deviance"].diff()       # 이전 모형 대비 이탈도 감소량
tbl["delta_df"] = -tbl["df_resid"].diff()       # 자유도 감소량
print(tbl)

delta_D 는 항을 추가했을 때의 이탈도 감소이며, \(\chi^2_{\Delta\mathrm{df}}\) 로 p-value 를 계산해 “추가된 항이 유의한가” 를 판정한다. scipy.stats.chi2.sf(delta_D, delta_df) 로 꼬리확률을 얻는다.

9.3 Step 3: R 에서 동일 분석 (참고)

m0 <- glm(y ~ 1,     data=d, family=poisson)
m1 <- glm(y ~ x,     data=d, family=poisson)
m2 <- glm(y ~ x + z, data=d, family=poisson)
anova(m0, m1, m2, test="Chisq")   # analysis of deviance

R 의 anova(..., test="Chisq") 는 정확히 이 절에서 정의한 analysis of deviance 표를 출력한다. test="F" 로 바꾸면 quasi-Poisson 등 과산포 모형에서 쓰는 F 근사를 사용한다.


10 흔한 실수와 처방

실수 처방
\(D/\mathrm{df} \approx 1\) 만 보고 적합을 자축 잔차 플롯·이상치·링크 오식별 진단을 병행한다. 이탈도는 평균 지표일 뿐 지역 오차를 감춘다
이항에서 \(y_i\in\{0,1\}\) 이진 반응에 \(D\)\(\chi^2\) 근사로 절대 적합 검정 이진 반응에서는 \(D\) 분포 근사가 매우 나쁘다. Hosmer–Lemeshow 계열을 쓰거나 집계(grouped) 후 검정
비중첩(non-nested) 모형을 \(\Delta D\) 로 비교 \(\Delta D\)\(\chi^2\) 근사는 중첩 가정에 의존. 비중첩이면 AIC·BIC·교차검증으로 비교
Pearson \(X^2\) 로 중첩 모형 비교 가산성이 없어 해석이 꼬인다. 중첩 비교는 이탈도로

11 요약

  • Discrepancy 는 현재 모형과 포화 모형의 로그우도 차이 \(\times 2\). 로그우도비로 적합을 잰다.
  • Deviance \(D\) 는 분산 모수로 역스케일한 discrepancy. Normal 에서는 RSS 와 일치하며, 다른 분포에서는 분포별 고유 형태를 갖는다.
  • 일반화 Pearson \(X^2\) 는 표준화 잔차 제곱합. 이탈도의 2차 근사에 해당하며 분산 모수 추정·희소 데이터 적합 검정에 쓴다.
  • Analysis of deviance 는 ANOVA 의 GLM 확장. 중첩 모형 수열의 이탈도 1차 차분으로 각 항의 기여를 본다.
  • \(\chi^2\) 근사의 범위 를 기억한다 — 중첩 비교 \(\Delta D\) 는 안정적, 절대 \(D\) 는 불안정. 특히 이산·희소 데이터에서 절대 적합 검정은 대체 방법을 쓴다.

12 관련 주제

선행 지식

관련 개념

후속 주제

  • Model Checking for GLM — 잔차 플롯·링크 진단·이상치 (McCullagh Ch.12)
  • Quasi-likelihood — 분포 미지정 추론과 과산포 (McCullagh Ch.9)

Subscribe

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