Ch.7 Evaluating, Comparing, and Expanding Models — 베이즈 분석의 네 번째 걸음

Gelman BDA Ch.7 개관 — 예측 정확도·정보 기준·교차 검증·Bayes factor·연속 확장

Ch.6 이 “모델이 데이터를 재현하는가” 를 물었다면, Ch.7 은 “여러 모형 중 어느 것이 더 좋은가, 그리고 지금 모형을 어떻게 확장해야 하는가” 를 묻는다. 이 포스트는 Ch.7 전체 지도를 제공한다. 로그 예측 밀도 (lppd, elpd, elppd) 정의와 유도, 정보 기준 삼총사 (AIC·DIC·WAIC) 의 수학적 구조와 차이, LOO-CV 와 WAIC 의 점근 동치, Bayes factor 의 민감도 한계, 이산적 모델 선택 대신 연속 확장을 권장하는 이유, 그리고 과적합 보정의 직관까지 — 각 수식 옆에 “무엇을 재고, 왜 그 보정이 필요한가” 를 붙여 전개한다.

Statistics
Bayesian
저자

Kwangmin Kim

공개

2026년 04월 22일

1 개요 — 왜 예측 정확도를 재야 하는가

베이즈 분석의 네 걸음을 나란히 놓으면 Ch.6 와 Ch.7 의 차이가 분명해진다.

  1. 모형 구성 — 사전 \(p(\theta)\) 와 표집분포 \(p(y \mid \theta)\).
  2. 사후 계산\(p(\theta \mid y)\).
  3. 모델 점검 (Ch.6) — “모형이 데이터를 재현하는가”.
  4. 모델 평가·비교·확장 (Ch.7) — “여러 후보 중 어느 모형이 더 예측을 잘하는가, 지금 모형을 어떻게 키울까”.

Ch.6 이 내부 일관성 을 물었다면 Ch.7 은 예측 성능 을 묻는다. 평가 축이 다르다.

  • 자기 일관성 점검은 “이 모형이 이 데이터를 만들어 낼 수 있나” 의 질문이다. 통과해도 예측이 좋지는 않을 수 있다.
  • 예측 정확도 평가는 “새 관측에서 이 모형이 얼마나 맞힐까” 의 질문이다. Ch.7 의 모든 도구가 이 양을 가진 데이터로 추정 하려는 다양한 방식이다.

두 축이 같이 굴러야 한다. 점검이 통과한 모형도 예측이 약하면 다른 모형을 함께 고려한다. 예측이 앞서는 모형도 점검에서 큰 부적합을 보이면 확장 대상이다.

직관 — 왜 “out-of-sample” 이 이상적 기준인가

모든 적합 지표는 결국 “훈련 데이터가 아닌 곳에서의 예측” 을 근사하려고 한다. 훈련 데이터에만 맞춘 지표(가령 단순 로그우도)는 파라미터가 많을수록 무조건 좋아진다 — 과적합의 보상. 그래서 실제 분석에서 유용한 기준은 외부 검증(external validation) 이지만, 새 데이터를 기다리지 못하는 상황이 많다. Ch.7 의 모든 기법(AIC·DIC·WAIC·LOO-CV·Bayes factor) 은 본질적으로 “가진 데이터만으로 외부 검증을 흉내 내는 방법” 의 변주다.

2 정의 — 예측 정확도 측정 도구 상자

Ch.7 은 세 층의 양을 구분해서 쓴다. 먼저 네 가지 callout 을 한 번에 본 뒤, 이어지는 절에서 각각을 확장한다.

정의 1: 로그 예측 밀도 (Log Predictive Density)

관측 \(y\) 가 모수 \(\theta\) 하에 생성될 로그확률.

\[ \log p(y \mid \theta) . \]

정규 모형이고 분산이 상수라면 평균제곱오차에 비례한다. 본질은 예측 점수 규칙(scoring rule) 이며, “로컬하고 적절(local and proper)” 한 유일한 점수 규칙(아핀 변환 제외) 이 로그 점수다. Kullback–Leibler 정보량과 직결되어 모델 비교의 자연 언어가 된다.

정의 2: Pointwise 로그 예측 밀도 (lppd)

사후분포로 평균 낸 점별 예측 밀도의 합.

\[ \mathrm{lppd} = \sum_{i=1}^{n} \log \int p(y_i \mid \theta)\, p_{\mathrm{post}}(\theta)\, d\theta \tag{7.4} \]

시뮬레이션으로는

\[ \widehat{\mathrm{lppd}} = \sum_{i=1}^{n} \log \!\left( \frac{1}{S} \sum_{s=1}^{S} p(y_i \mid \theta^{(s)}) \right) \tag{7.5} \]

훈련 데이터의 적합도 를 사후 불확실성까지 담아 요약한다. 그 자체로는 과적합을 포함하므로, Ch.7 의 모든 기법은 이 양에 바이어스 보정 을 더해 out-of-sample 로 환산한다.

정의 3: Expected Log Predictive Density (elpd / elppd)

새 관측 한 점에 대한 기대 로그 예측 밀도:

\[ \mathrm{elpd} = \mathbb{E}_f\!\left[\log p_{\mathrm{post}}(\tilde{y}_i)\right] = \int \log p_{\mathrm{post}}(\tilde{y}_i)\, f(\tilde{y}_i)\, d\tilde{y}_i \tag{7.1} \]

여기서 \(f\)진짜 데이터 생성 분포(알 수 없음). 전체 데이터셋 수준으로 합치면

\[ \mathrm{elppd} = \sum_{i=1}^{n} \mathbb{E}_f\!\left[\log p_{\mathrm{post}}(\tilde{y}_i)\right] \tag{7.2} \]

가 된다. 우리가 정말 추정하고 싶은 양 이 이것이다. 나머지 지표는 모두 elppd 의 근사치다.

정의 4: 세 정보 기준 (AIC / DIC / WAIC)

세 지표 모두 lppd 혹은 그 변형에서 effective 파라미터 수 만큼을 빼 과적합을 보정한다.

\[ \begin{aligned} \mathrm{AIC} &= -2 \log p(y \mid \hat{\theta}_{\mathrm{mle}}) + 2k \tag{7.6}\\ \mathrm{DIC} &= -2 \log p(y \mid \hat{\theta}_{\mathrm{Bayes}}) + 2\, p_{\mathrm{DIC}} \tag{7.7}\\ \mathrm{WAIC} &= -2\, \mathrm{lppd} + 2\, p_{\mathrm{WAIC}} \tag{7.13} \end{aligned} \]

\(k\) 는 명목 파라미터 수, \(p_{\mathrm{DIC}}\)\(p_{\mathrm{WAIC}}\)데이터가 말해 주는 유효 파라미터 수. WAIC 가 유일하게 사후분포 전체를 활용하며 LOO-CV 와 점근 동치다.

3 개념과 원리

3.1 § 7.1 예측 정확도 — “무엇을 재는가”

점 예측(point prediction)확률 예측(probabilistic prediction) 을 구분한다.

구분 대표 지표 수식
점 예측 평균제곱오차 (MSE) \(\frac{1}{n}\sum_i (y_i - \mathbb{E}[y_i \mid \theta])^2\)
확률 예측 로그 예측 밀도 \(\log p(y \mid \theta)\)

Gelman 은 로그 점수(log score) 를 표준으로 삼는다. 이유 세 가지.

  1. Proper: 분석자가 자신의 진짜 믿음을 그대로 보고할 때 점수가 최대화된다 (거짓 보고가 이익 없다).
  2. Local: 실제로 관측된 값 \(y\) 에서의 밀도만 쓴다. 관측되지 않은 영역의 밀도 모양이 점수에 영향을 안 미친다.
  3. KL 직결: 큰 표본 극한에서 “KL 정보량이 가장 작은 모형 = elpd 가 가장 큰 모형” 이 된다 (Gelman et al., 2013, § 7.1).

예측과 사후분포. 사후 평균 plug-in \(p(\tilde{y} \mid \hat{\theta})\) 과 사후 예측 밀도 \(p_{\mathrm{post}}(\tilde{y}) = \int p(\tilde{y} \mid \theta) p(\theta \mid y)\, d\theta\) 는 다르다. 전자는 모수 불확실성을 반영하지 않고, 후자는 반영한다. Ch.7 의 “본격 베이즈” 지표는 모두 후자를 기준으로 만들어진다.

직관 — lppd 는 왜 사전분포를 빼고 만드는가

\(\log p(y \mid \theta)\) 대신 \(\log p(y, \theta)\) 를 쓰면 더 낫지 않을까?” 라는 의문이 든다. 답: lppd 의 목적은 모형이 데이터를 얼마나 설명하는가 이지 사전이 얼마나 그럴듯한가 가 아니다. 사전은 \(\theta\) 추정에서 이미 역할을 한 상태이고, lppd 는 그 사후분포 하에서의 데이터 적합만 본다. 사전이 들어가면 “좁은 사전 = 예측 점수 하락” 같은 왜곡이 생긴다.

3.2 § 7.2 정보 기준 — AIC → DIC → WAIC 의 연대기

세 지표는 같은 질문에 답한다: “과적합을 얼마나 빼줘야 elppd 가 되는가?” 답의 정교함이 AIC → DIC → WAIC 순으로 발전했다.

3.2.1 AIC — 고전적 Plug-in

가정: \(n\) 이 크고 사후가 대략 정규. 이 극한에서 파라미터 하나를 적합하면 “우연만으로도” 로그우도가 평균 \(\tfrac{1}{2}\) 만큼 오른다. \(k\) 개면 \(k\) 만큼.

\[ \widehat{\mathrm{elpd}}_{\mathrm{AIC}} = \log p(y \mid \hat{\theta}_{\mathrm{mle}}) - k, \qquad \mathrm{AIC} = -2 \widehat{\mathrm{elpd}}_{\mathrm{AIC}}. \]

한계: 정보적 사전이나 계층 구조가 있으면 effective 파라미터 수는 \(k\) 가 아니다. 계층 모형의 shrinkage 는 effective 파라미터를 줄이고, AIC 는 이를 반영 못한다.

3.2.2 DIC — Bayesian Plug-in

MLE 대신 사후 평균 \(\hat{\theta}_{\mathrm{Bayes}} = \mathbb{E}[\theta \mid y]\) 을 쓰고, \(k\) 대신 데이터가 알려 주는 effective 파라미터 수 를 쓴다.

\[ p_{\mathrm{DIC}} = 2\!\left( \log p(y \mid \hat{\theta}_{\mathrm{Bayes}}) - \mathbb{E}_{\mathrm{post}}[\log p(y \mid \theta)] \right) \tag{7.8} \]

\[ \widehat{\mathrm{elpd}}_{\mathrm{DIC}} = \log p(y \mid \hat{\theta}_{\mathrm{Bayes}}) - p_{\mathrm{DIC}}, \qquad \mathrm{DIC} = -2 \widehat{\mathrm{elpd}}_{\mathrm{DIC}}. \]

\(p_{\mathrm{DIC}}\) 는 시뮬레이션으로 \(\log p(y \mid \hat{\theta}_{\mathrm{Bayes}})\)\(\frac{1}{S}\sum_s \log p(y \mid \theta^{(s)})\) 의 차로 계산된다. 사후 평균이 사후 모드와 멀면 음수가 될 수 있어 수치 안정성에 문제가 생길 수 있다.

3.2.3 WAIC — Fully Bayesian

한 점 더 나아가, plug-in 없이 사후 전체에 대해 예측 밀도를 평균 낸다.

\[ p_{\mathrm{WAIC2}} = \sum_{i=1}^{n} \mathrm{Var}_{\mathrm{post}}\!\left[\log p(y_i \mid \theta)\right] \tag{7.11} \]

\[ \widehat{\mathrm{elppd}}_{\mathrm{WAIC}} = \mathrm{lppd} - p_{\mathrm{WAIC}}, \qquad \mathrm{WAIC} = -2 \widehat{\mathrm{elppd}}_{\mathrm{WAIC}}. \]

장점 세 가지.

  1. 플러그인 없음 — 전체 사후분포의 예측 밀도를 그대로 쓴다.
  2. 특이 모델(singular) 도 처리 — 혼합·과모수화 모형에서 AIC·DIC 가 깨지는 지점에서도 작동.
  3. LOO-CV 와 점근 동치\(n \to \infty\) 에서 WAIC = Bayesian LOO-CV.
직관 — “effective 파라미터 수” 가 뭔가

쓰는 파라미터 개수 \(k\)명목 이다. 실제로 데이터에 의해 자유롭게 움직이는 차원 수는 다를 수 있다. 계층 모형의 shrinkage 를 예로 들면:

  • \(\tau \to 0\) (완전 pooling) 극한: 모든 그룹 효과가 한 값으로 수렴 → effective = 1.
  • \(\tau \to \infty\) (no pooling) 극한: 그룹 효과가 독립 → effective = \(J\) (그룹 수).
  • 중간: 부분 pooling → effective 는 \(1\)\(J\) 사이 연속.

\(p_{\mathrm{DIC}}\), \(p_{\mathrm{WAIC}}\) 는 이 중간값을 데이터가 스스로 알려 주게 설계된 양이다. 사전이 얼마나 정보적인지, shrinkage 가 얼마나 강한지에 따라 자동으로 조정된다.

3.2.4 BIC 는 다른 목적

BIC \(= -2 \log p(y \mid \hat{\theta}) + k \log n\) 는 이름만 Bayesian 이다. 실제 목적은 marginal likelihood \(p(y)\) 근사이고, 모형 간 사후 확률 비교에 쓰인다. 예측 정확도를 직접 재는 양이 아니므로 Ch.7 의 지표군과 목적이 다르다. Gelman 은 BIC 를 예측 비교 도구로 쓰지 말라고 권한다.

3.3 § 7.2 후반 — Leave-One-Out 교차 검증

LOO-CV 는 정보 기준의 근사 없이 out-of-sample 성능을 직접 추정한다.

\[ \mathrm{lppd}_{\mathrm{loo\text{-}cv}} = \sum_{i=1}^{n} \log p_{\mathrm{post}(-i)}(y_i) = \sum_{i=1}^{n} \log\!\left(\frac{1}{S}\sum_{s=1}^{S} p(y_i \mid \theta^{(is)})\right) \tag{7.14} \]

여기서 \(\theta^{(is)}\)\(i\) 번째 점을 뺀 데이터로 얻은 사후 표본. 점 \(i\) 에 대한 예측 밀도가 “자기 자신 없이 학습한” 사후의 예측이다.

3.3.1 점근 관계

관계
AIC vs LOO-CV (MLE plug-in) 점근 동치
DIC vs LOO-CV (Bayesian plug-in) 점근 동치
WAIC vs Bayesian LOO-CV 점근 동치

실전 권장: LOO-CV 는 계산이 무겁고 (각 \(i\) 에서 모형 재적합), WAIC 는 한 번의 사후 시뮬레이션으로 끝난다. 그래서 WAIC 가 널리 쓰이고, Pareto-smoothed importance sampling (PSIS-LOO, Vehtari et al., 2017) 으로 LOO-CV 를 재적합 없이 근사하는 방법이 표준이 되었다.

3.4 § 7.3 예측 성능 기반 모델 비교

원칙: 모형 간 점수 차 자체가 아니라, “차가 우연보다 큰가” 를 본다. WAIC 나 LOO-CV 모두 점별 지표의 합이므로 표준오차 를 계산할 수 있다.

\[ \widehat{\mathrm{elppd}}_{1} - \widehat{\mathrm{elppd}}_{2}, \qquad \mathrm{SE} = \sqrt{n \cdot \mathrm{Var}_i(\ell_{1,i} - \ell_{2,i})} \]

여기서 \(\ell_{k,i}\) 는 모형 \(k\) 의 점별 예측 로그밀도. 차가 SE 의 2배를 넘는 경우에만 “유의미한 우세” 로 판단한다.

8 학교 예시 (§ 5.5 재방문). 세 모형을 비교한다.

모형 개념 특징
No pooling 각 학교 독립 추정 (8개 모수) 과적합
Complete pooling 전 학교 한 값 과소적합
Hierarchical \(\theta_j \sim \mathcal{N}(\mu, \tau^2)\) 중간 — shrinkage

예측 지표로 보면 계층 모형이 두 극단보다 좋은 것이 확인된다. Effective 파라미터 수는 8 과 1 사이 어딘가 — 데이터 상태(그룹 간 이질성)가 어느 값인지 결정한다.

3.5 § 7.4 Bayes Factor — 왜 추천하지 않는가

두 모형 \(M_1\), \(M_2\) 의 marginal likelihood 비.

\[ \mathrm{BF}_{12} = \frac{p(y \mid M_1)}{p(y \mid M_2)} = \frac{\int p(y \mid \theta_1, M_1)\, p(\theta_1 \mid M_1)\, d\theta_1}{\int p(y \mid \theta_2, M_2)\, p(\theta_2 \mid M_2)\, d\theta_2} \]

이론적으로는 아름답다. 사전 \(\times\) 우도를 적분해 “모형에 대한 사후 확률 갱신” 을 준다.

실제 한계:

  1. 사전에 극도로 민감\(\theta\) 에 넓은 사전을 쓸수록 marginal likelihood 가 작아진다. Improper 사전에서는 정의조차 안 된다. 약정보 사전 · 참조 사전이 표준인 현대 베이즈 분석과 맞지 않는다.
  2. 계산 어려움 — marginal likelihood 적분이 일반적으로 해석 불가능.
  3. 이산적 가설 선택 지향 — 모형을 “맞다 / 틀리다” 로 나누는 프레임. 그러나 현실에서는 모형이 모두 근사이고, 연속적 확장이 더 자연스럽다.

Gelman 은 Bayes factor 대신 예측 정확도 비교 (WAIC/LOO-CV)연속 모델 확장 (§ 7.5) 을 권한다.

3.6 § 7.5 연속 모델 확장 — 이산 선택보다 먼저

모델 “선택” 대신 모델 “확장” 을 먼저 고려한다.

이산 선택 시나리오: - \(M_1\): 간단한 회귀 - \(M_2\): 비선형 항 추가 - “둘 중 하나” 로 고르고 나머지는 버림.

연속 확장 시나리오: - 단일 모형 안에 비선형성의 강도를 모수 로 둔다 (예: spline, 계층 분산). - 사후분포가 데이터에 따라 “얼마나 비선형적이어야 하는가” 를 부드럽게 알려 준다. - 선택이 아니라 모수 추정 문제로 바뀐다.

직관 — 왜 연속 확장이 더 베이즈적인가

베이즈의 핵심은 불확실성을 확률로 표현 하는 것이다. 모형 간 이산 선택은 “어느 쪽이 맞나” 에 답하지만, 현실에서는 “어느 쪽이 얼마나 맞나” 가 더 솔직한 질문이다. 연속 확장은 이 “얼마나” 를 사후분포 안에 자동으로 담는다. 모델 비교가 아예 필요 없어지는 구조가 가장 베이즈적이다.

예: no pooling 과 complete pooling 중 어느 것? → 계층 모형에서 \(\tau\) 의 사후분포가 답해 준다 (\(\tau \to 0\) 에 질량이 몰리면 pooling 쪽, \(\tau\) 가 크면 no-pooling 쪽).

3.7 § 7.6 암묵적 가정의 robustness

모든 모형은 암묵적 가정 을 달고 있다 (정규성, 독립성, 등분산 등). Ch.7 § 7.6 은 단순한 예를 통해 이 암묵적 가정이 결과에 어떻게 영향을 주는지, 그리고 robustness 분석(대안 가정 하 재계산)을 어떻게 수행하는지 보인다. 핵심 아이디어는 § 6.1 의 감도 분석과 같고, 차이는 “모델 점검” 이 아니라 “모델 확장 후보를 만드는” 용도로 쓰인다는 점이다.

4 왜 Ch.7 도구가 필요한가

예측 정확도 측정 없이 분석하면 흔한 사고:

  1. 과대적합 모형 배포 — 훈련 데이터 기반 지표로는 좋지만 out-of-sample 에서는 무너진다.
  2. 과소적합 모형 유지 — 단순하다는 이유로 명백한 패턴을 포착하는 확장을 배제.
  3. 잘못된 “이 모형이 최고” — 예측 차이가 SE 안에 있는 여러 모형 중 한 개만 선택.
  4. 사전 민감도 은폐 — Bayes factor 로 모형 고르면 사전의 작은 변화로 결론이 뒤집힘.

Ch.7 도구는 이 사고를 정량 근거로 차단한다.

5 응용 분야

분야 Ch.7 도구의 역할
임상시험 혼합효과 vs 고정효과 모형의 예측 비교, shrinkage 정당화
경제예측 다른 공변량 조합의 회귀 비교, 연속 확장으로 nonlinear 효과 흡수
추천 시스템 여러 latent factor 차원의 WAIC 비교
생태학 과분산 Poisson vs 음이항의 예측력 비교
품질관리 단일 모집단 vs 계층 모집단 가정의 LOO-CV 검증
유행병학 SIR 계열의 hyperparameter 변주 비교

6 예시 — 선거 예측 회귀

Hibbs 의 “bread and peace” 모형. 1952–2008 대선 15 회에서 경제 성장률 \(x\) 로 집권당 득표율 \(y\) 를 예측.

\[ y_i \sim \mathcal{N}(a + b x_i, \sigma^2), \qquad p(a, b, \log \sigma) \propto 1 . \]

네 지표의 값:

지표 해석
AIC \(86.6\) MLE 기반, \(k = 3\)
DIC \(87.0\) 사후 평균 + \(p_{\mathrm{DIC}} = 3.0\)
WAIC \(86.2\) 또는 \(87.2\) \(p_{\mathrm{WAIC1}} = 2.2\), \(p_{\mathrm{WAIC2}} = 2.7\)
LOO-CV \(87.6\) 15 번 재적합, \(p_{\mathrm{loo\text{-}cv}} = 2.9\)

네 값이 모두 86~88 범위 로 수렴한다. Effective 파라미터 수 추정치 \(2.2 \sim 3.0\) 도 명목 \(k = 3\) 과 일치. 단순 선형 회귀에서는 네 지표가 거의 같은 답을 준다는 신호다. 차이가 두드러지는 경우는 계층 모형·비선형 모형 같은 복잡 구조다 (다음 포스트에서 8 학교 예제로 다룬다).

7 코드 예시 — AIC / WAIC / LOO-CV 나란히 계산

7.1 Step 1: numpy 로 lppd 와 WAIC 직접 구현

import numpy as np
from scipy.stats import norm

rng = np.random.default_rng(42)

# 합성 데이터: y = 2 + 1.5 x + noise
n = 50
x = rng.uniform(-3, 3, size=n)
y = 2 + 1.5 * x + rng.normal(0, 1, size=n)

# 단순 베이즈 선형 회귀 사후 표본 (무정보 사전 analytic)
X = np.column_stack([np.ones(n), x])
beta_hat = np.linalg.solve(X.T @ X, X.T @ y)
resid = y - X @ beta_hat
s2 = resid @ resid / (n - 2)
V_beta = np.linalg.inv(X.T @ X)

S = 4000
sigma2_samples = (n - 2) * s2 / rng.chisquare(df=n - 2, size=S)
sigma_samples = np.sqrt(sigma2_samples)
beta_samples = np.array([
    rng.multivariate_normal(beta_hat, V_beta * s2i) for s2i in sigma2_samples
])

# 점별 log 예측 밀도 ℓ_{i,s} = log N(y_i | a^s + b^s x_i, σ^s)
mu_pred = beta_samples @ X.T                # (S, n)
ell = norm.logpdf(y[None, :], loc=mu_pred, scale=sigma_samples[:, None])  # (S, n)

# lppd = Σ_i log(1/S Σ_s p(y_i|θ_s))
lppd = np.log(np.exp(ell).mean(axis=0)).sum()

# p_WAIC2 = Σ_i Var_s[ℓ_{i,s}]
p_waic2 = ell.var(axis=0, ddof=1).sum()
elppd_waic = lppd - p_waic2
WAIC = -2 * elppd_waic

# AIC (MLE 기반)
mu_mle = X @ beta_hat
sigma_mle = np.sqrt(np.mean(resid**2))
log_lik_mle = norm.logpdf(y, loc=mu_mle, scale=sigma_mle).sum()
AIC = -2 * log_lik_mle + 2 * 3

print(f"lppd        = {lppd:.2f}")
print(f"p_WAIC2     = {p_waic2:.2f}  (expected ~3)")
print(f"WAIC        = {WAIC:.2f}")
print(f"AIC         = {AIC:.2f}")

7.2 Step 2: PyMC + ArviZ 로 LOO-CV·WAIC 자동화

import numpy as np
import pymc as pm
import arviz as az

with pm.Model() as linreg:
    a     = pm.Normal("a", 0, 10)
    b     = pm.Normal("b", 0, 10)
    sigma = pm.HalfNormal("sigma", 5)
    pm.Normal("y", mu=a + b * x, sigma=sigma, observed=y)

    idata = pm.sample(2000, tune=1000, target_accept=0.95,
                      idata_kwargs={"log_likelihood": True}, random_seed=42)

# ArviZ 는 pointwise log-likelihood 를 이용해 WAIC 과 PSIS-LOO 를 계산
waic = az.waic(idata, scale="deviance")
loo  = az.loo(idata,  scale="deviance")

print(waic)
print(loo)

두 모형을 비교하고 싶으면 az.compare({"M1": idata1, "M2": idata2}) 한 줄로 ELPD 차이 + 표준오차 를 함께 얻을 수 있다. 차이가 SE 의 2배를 넘으면 “유의미한 우세” 로 판정한다.

8 실전 체크리스트

Ch.7 도구를 의사결정에 쓸 때의 7 단계.

  1. 무엇을 예측할지 먼저 정의 — 점 예측이면 MSE, 전체 분포이면 로그 예측 밀도.
  2. pointwise log-likelihood 저장 — MCMC 구현에서 점별 log-likelihood 를 함께 뽑아 둔다 (WAIC·LOO 필수).
  3. WAIC 와 PSIS-LOO 둘 다 계산 — 보통 결과가 비슷하지만, 차이가 크면 모형 자체의 이상 신호.
  4. 차이는 SE 와 함께 — 점수 차 \(\Delta\) 를 단독으로 보지 말고 \(\mathrm{SE}\) 와 비교. \(|\Delta| \lesssim 2 \cdot \mathrm{SE}\) 면 “구분 못함”.
  5. Effective 파라미터 수 확인 — 명목 \(k\) 와 크게 차이 나면 과적합·과소적합·계산 문제 의심.
  6. Bayes factor 로 결론 짓지 말 것 — 사전 민감도가 높다. 참조 지표로만.
  7. 이산 선택 전에 연속 확장 고려 — 두 모형을 하나로 묶을 수 있는가? 가능하면 선택 대신 모수 추정으로 전환.

9 관련 주제

선행 지식

Ch.7 세부 절 (후속 작성 예정)

  • 01-7-1-* — § 7.1~7.2 심화 (예측 정확도·정보 기준·LOO-CV 계산 유도)
  • 01-7-2-* — § 7.3~7.4 (8 학교 예제 확장·Bayes factor 의 민감도)
  • 01-7-3-* — § 7.5~7.8 (연속 확장·robustness·문헌 노트·연습문제)

후속 주제

  • Ch.8 Modeling Accounting for Data Collection — 데이터 수집이 추론에 주는 영향 (후속 작성)
  • Ch.17 Models for Robust Inference — t-분포·혼합 모형으로 가정 완화 (후속 작성)

관련 개념

  • PSIS-LOO (Vehtari, Gelman, Gabry, 2017) — LOO-CV 의 재적합 없는 근사, ArviZ 기본값
  • arviz.waic, arviz.loo, arviz.compare — Python 생태계의 표준 도구
  • loo 패키지 (R) — Stan 팀의 공식 LOO-CV 구현
  • Jackknife 와의 관계 — LOO-CV 는 Bayesian Jackknife 의 자연 확장

Subscribe

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