베이지안 통계로 불확실성을 모델링하는 방법

베이지안 통계의 사전·우도·사후분포 갱신과 MCMC, Gibbs Sampling, Variational Inference의 선택 기준을 정리한다.

2026-08-14 · 최초 발행 2025-10-14

데이터가 들어올 때 신념은 사후분포로 갱신된다

베이지안 통계는 파라미터에 관한 사전 신념과 관측 데이터의 생성 모델을 결합해 추론을 수행한다. 핵심 관계는 다음과 같다.

사후분포 P(θ|D) ∝ P(D|θ) × P(θ)이며, 정규화상수는 P(D) = ∫ P(D|θ)P(θ)dθ다. 데이터 D를 관측한 뒤 분포를 갱신하므로, 새 정보가 들어올 때마다 같은 구조로 정보를 누적할 수 있다.

여기서 사전분포(Prior)는 파라미터에 대해 데이터 관측 전 갖고 있던 신념을 표현한다. 정규화나 계층 구조를 통해 도메인 지식을 반영할 수 있다. 우도(Likelihood)는 데이터가 생성되는 방식을 기술하며 모델링 가정의 중심이 된다. 사후분포(Posterior)는 데이터를 반영한 이후의 신념으로, 추론과 예측의 근거가 된다.

사전은 정보적 사전과 약정보 사전 사이에서 선택한다. 식별성과 스케일 안정성을 검토하고, 양수 제약이나 단조성처럼 허용 가능한 범위도 모델에 반영한다. 결과를 평가할 때는 신뢰구간 대신 신용구간(credible interval)을 사용하며, 사후예측분포로 적합도와 캘리브레이션을 확인한다.

분포로 전달되는 불확실성

베이지안 접근에서는 파라미터만이 아니라 예측과 의사결정 비용 함수까지 불확실성을 분포 형태로 전달할 수 있다. 작은 샘플, 결측, 잡음이 있는 환경에서도 이를 바탕으로 추론을 구성한다.

그룹·시간·공간 효과를 함께 다루는 계층 구조에서는 정보 공유와 축약(shrinkage) 메커니즘을 활용할 수 있다. 베이지안 정규화는 과적합을 완화하는 역할도 한다.

추론 엔진은 하나가 아니다. MCMC/HMC/Gibbs는 샘플링 기반의 일관성을 제공하고, Variational Inference는 최적화 기반 근사로 대규모 데이터에 적합하다. 어떤 엔진을 쓰더라도 R-hat, ESS, 트레이스 플롯, ELBO 수렴을 확인해야 하며, 발산(divergence)이나 약혼합(poor mixing)이 보이면 재매개변수화를 검토한다.

사전에서 사후로 갱신하는 흐름은 온라인과 배치 운영 모두에 적용할 수 있다. 모듈형으로 구성하면 실험 반복과 운영 자동화에도 연결하기 쉽다.

사후분포를 얻는 흐름

입력은 데이터 D, 우도로 표현한 모델 M, 사전 P(θ)다. 닫힌형으로 사후분포를 구할 수 없으면 근사 추론 방식을 고른다. 이후 MCMC 또는 Gibbs Sampling으로 샘플을 생성하거나, Variational Inference로 최적화를 수행하고 수렴 상태를 진단한다.

출력은 사후분포의 평균·분산·신용구간 같은 요약값, 사후예측, 의사결정 지표가 된다.

추론 엔진입력아니오(해석적)통과실패(발산/혼합불량)데이터 D사전분포 P(θ)우도 설계 P(D|θ)베이즈 업데이트: P(θ|D)P(D|θ)P(θ)근사 필요 여부사후 요약·예측MCMC/HMCGibbs SamplingVariational Inference수렴/진단재매개변수화·스텝 튜닝·사전강화사후예측·의사결정·리포트

샘플링과 최적화 기반 추론의 선택

MCMC로 목표분포를 근사할 때

MCMC는 목표분포 P(θ|D)를 따르는 상태공간 연쇄를 만들고, 충분히 긴 체인으로 사후분포를 근사한다. 대표적으로 Metropolis-Hastings와 HMC/NUTS가 있으며, HMC/NUTS는 연속 파라미터를 효율적으로 탐색한다.

운영에서는 여러 체인을 초기화하고 워밍업(튜닝)과 본 샘플링을 분리한다. 스텝크기와 질량행렬도 조정 대상이다. 진단 기준은 R-hat ≤ 1.01, 충분한 ESS, 발산 0, 양호한 트레이스 혼합이다.

완전조건부를 이용하는 Gibbs Sampling

Gibbs Sampling은 각 파라미터의 완전조건부 분포에서 번갈아 샘플을 뽑아 결합분포를 근사한다. 지수족·켤레 사전처럼 닫힌형 조건부를 얻을 수 있는 경우에 효율적이며, 다변량 블록 샘플링도 가능하다.

상관이 큰 파라미터는 블로킹이나 매개변수 재정의로 완화해 수렴을 빠르게 할 수 있다. 반대로 고상관 또는 복잡한 구조에서는 혼합이 나빠질 수 있으므로 HMC를 대안으로 검토한다.

Variational Inference로 근사분포를 최적화할 때

Variational Inference는 근사분포 q(θ;λ)를 두고 KL(q||p)를 최소화하며 ELBO를 극대화한다. Mean-field와 Full-rank 근사를 쓸 수 있고, CAVI 또는 Stochastic VI에서 미니배치와 재매개변수화 트릭을 활용한다.

대규모 데이터와 고차원 문제에서 빠른 수렴을 기대할 수 있고 배포 환경에도 적합하다. 다만 하위분산(underdispersion)과 모드 미포착이 발생할 수 있으므로, 사후예측과 시뮬레이션 검증을 함께 수행한다.

불확실성 보고가 필요한 모델링 장면

온라인 실험과 A/B 테스트에서는 베타-베르누이·로지스틱 계층모형을 사용해 지속적으로 관측하고 중간 중단 의사결정을 다룰 수 있다.

수요예측과 가격 최적화에서는 계층 베이지안으로 상품과 지역 사이의 정보를 공유하면서 장기 추세와 프로모션 효과를 분리한다. 제조 품질·신뢰성 문제에서는 고장시간과 결함율을 추정하고, 스파스 데이터 환경에서 신뢰구간을 안정화한다.

의료·리스크 모델링에서는 소표본 임상과 희귀사건을 분석하며, 전문가 사전을 반영하고 불확실성을 투명하게 보고한다.

의사결정과 운영에 남는 효과

신용구간 기반의 임계값 정책을 사용하면 현업 의사결정에서 오판 확률을 관리할 수 있다. 계층화와 사전 정규화는 소표본에서도 추정 분산을 줄여 데이터 효율을 높인다.

가정·사전·결과를 분해해 볼 수 있어 투명성과 설명가능성이 높아진다. 반복 실험과 온라인 업데이트의 워크플로를 표준화하는 데도 사용할 수 있다.

MCMC, Gibbs Sampling, Variational Inference 비교

구분 MCMC/HMC Gibbs Sampling Variational Inference
성능(속도) 중간, HMC는 고차원에서 효율 중간~느림, 조건부 닫힘 시 효율 빠름, 대규모 데이터 적합
확장성 배치 중심, SVI 한계 모델 구조 의존, 고상관 시 비효율 우수, 미니배치·분산 최적화
일관성(정확도) 강함, 표본 수↑ 시 정합 조건부 정확 시 강함 근사 편향 가능, 하위분산 위험
안정성 튜닝 민감, 발산 가능 혼합 이슈, 블로킹 필요 지역해 수렴 위험, 초기화 영향
운영 편의 자동튜닝 도구 존재(NUTS) 모델 특화 구현 필요 자동화 용이, 재현성 높음

정규-역감마 계층모형에서 Gibbs Sampling 실행하기

대상 모델은 y_i ~ Normal(μ, σ^2)이며, 사전은 μ|σ^2 ~ Normal(μ0, σ^2/κ0), σ^2 ~ Inv-Gamma(α0, β0)로 둔다.

완전조건부는 다음과 같다.

  • μ | σ^2, y ~ Normal(μ_n, σ^2/κ_n), κ_n = κ0 + n, μ_n = (κ0 μ0 + n ȳ)/κ_n
  • σ^2 | μ, y ~ Inv-Gamma(α0 + n/2, β0 + 0.5 Σ(y_i − μ)^2 + 0.5 κ0(μ − μ0)^2)

환경은 Python 3.11과 numpy >= 1.24를 전제로 한다. 난수시드는 고정하는 편이 좋다. 데이터는 연속형이며, 이상치가 과다하면 로버스트 우도(예: Student-t)를 고려한다.

# Python 3.11, numpy>=1.24
import numpy as np

rng = np.random.default_rng(42)

# 예시 데이터 생성(실사용 시 실제 데이터로 대체)
true_mu, true_sigma = 2.0, 1.5
y = rng.normal(true_mu, true_sigma, size=200)

# 사전 하이퍼파라미터
mu0 = 0.0
kappa0 = 1.0
alpha0 = 2.0
beta0 = 2.0

n = len(y)
y_bar = y.mean()

# 초기값
mu = y_bar
sigma2 = np.var(y, ddof=1)

def sample_inv_gamma(alpha, beta, rng):
    # InvGamma(alpha, beta) where 1/x ~ Gamma(shape=alpha, rate=beta)
    g = rng.gamma(shape=alpha, scale=1.0/beta)
    return 1.0 / g

n_iter = 6000
burn_in = 1000
thin = 5

mu_samples = []
sigma2_samples = []

kappa_n = kappa0 + n
y_sum = y.sum()

for t in range(n_iter):
    # 1) μ | σ², y
    mu_n = (kappa0 * mu0 + n * y_bar) / kappa_n
    mu = rng.normal(loc=mu_n, scale=np.sqrt(sigma2 / kappa_n))

    # 2) σ² | μ, y
    alpha_n = alpha0 + n / 2.0
    resid = y - mu
    beta_n = beta0 + 0.5 * np.dot(resid, resid) + 0.5 * kappa0 * (mu - mu0) ** 2
    sigma2 = sample_inv_gamma(alpha_n, beta_n, rng)

    if t >= burn_in and (t - burn_in) % thin == 0:
        mu_samples.append(mu)
        sigma2_samples.append(sigma2)

mu_samples = np.array(mu_samples)
sigma2_samples = np.array(sigma2_samples)

def credible_interval(a, q=(0.025, 0.975)):
    return np.quantile(a, q)

print("mu 추정(평균, 95% CI):", mu_samples.mean(), credible_interval(mu_samples))
print("sigma 추정(평균, 95% CI):", np.sqrt(sigma2_samples).mean(), credible_interval(np.sqrt(sigma2_samples)))

신용구간이 실제 값(true_mu, true_sigma)을 포함하는지 확인한다. 체인 혼합을 확인해야 하면 다중 시드·다중 체인을 실행하고 트레이스 플롯과 ESS를 계산한다. ArviZ 사용을 권장한다.

사전 설계와 진단을 배포 전까지 유지한다

약정보 사전을 쓸 때는 비현실적 범위를 억제할 약한 정규화가 필요하다. 정보적 사전은 편향 위험이 있으므로 민감도 분석을 병행한다.

표준화와 센터링은 수치 안정화에 도움이 된다. 비식별성을 해소하기 위한 재매개변수화로는 non-centered parameterization을 고려할 수 있다. HMC에서 발산하면 스텝크기를 줄이고 질량행렬 적응과 사전 강화를 검토한다.

사후예측검증(PPC)과 R-hat·ESS·ELBO 모니터링을 함께 수행한다. 시뮬레이션 기반 교정(SBC)은 전체 파이프라인 검증에 사용할 수 있다.

베이지안 통계사후분포MCMCGibbs Sampling변분추론