계층 베이지안과 변분추론으로 집단 차이를 추정하는 방법
계층 사전분포와 부분 풀링, 센터링·논센터링 선택, 변분추론 진단을 활용해 집단별 불확실성을 추정하는 방법을 정리한다.
2026-08-14 · 최초 발행 2024-04-29
집단별 데이터 편차를 모델 안에 남기는 추론
집단·하위 집단·개체로 이어지는 데이터에서는 각 집단을 완전히 분리해 추정하거나 하나로 합치는 방식 모두 한계가 있다. 다중 수준 베이지안 모델은 하위 수준 파라미터가 상위 하이퍼파라미터의 사전분포를 공유하도록 구성해, 공유와 변이를 한 모델 안에 표현한다.
이 구조의 핵심은 부분 풀링이다. 데이터가 적은 집단의 추정값은 상위 분포 쪽으로 수축되고, 극단적인 값은 완만해진다. 하위 파라미터는 θ_i ~ Normal(μ, τ)처럼 상위 하이퍼파라미터 (μ, τ)에 의존할 수 있다. 이때 변동성 τ의 추정이 중요하며, 과도한 수축을 피하려면 HalfNormal이나 HalfStudentT 같은 하이퍼사전의 설정을 검토해야 한다.
복잡한 사후분포 p(θ|x)를 직접 다루기 어렵거나 데이터와 파라미터 공간이 커지면, 변분추론(Variational Inference, VI)으로 근사 분포 q(θ; λ)를 두고 ELBO를 최대화할 수 있다. Stochastic VI(SVI)는 미니배치와 자동미분을 사용해 대규모 데이터에 선형 확장한다.
수렴을 좌우하는 파라미터화와 근사 방식
센터링은 θ_i ~ Normal(μ, τ)를 직접 기술하는 방식이며, 데이터의 정보량이 충분할 때 수렴성이 좋다. 반면 논센터링은 θ_i = μ + τ·z_i, z_i ~ Normal(0,1)로 표현한다. 약한 정보, 작은 샘플 집단, 강한 계층 수축이 있는 조건에서는 논센터링이 수렴을 개선할 수 있다.
변분가족도 근사의 성질을 바꾼다. Mean-field는 대각 공분산을 사용하고, Full-rank는 완전 공분산을 사용한다. Full-rank나 Flow는 비정규성을 더 포착할 수 있지만 최적화 난이도와 운영 복잡도도 커진다. ELBO 최적화에는 재파라미터화 기법, 자동미분, Adam 같은 확률적 최적화를 적용하며, 조기 종료와 학습률 스케줄링을 함께 둘 수 있다.
미니배치 SVI는 추론 비용을 O(N)에서 O(배치 크기)로 다룰 수 있고, 분산 학습 및 GPU 가속과도 호환된다. 운영 단계에서는 모델·데이터 버전 관리, 사후요약 자동화, ELBO 추이와 캘리브레이션을 포함한 진단 리포트가 필요하다.
모델 명세부터 검증까지 이어지는 흐름
입력에는 원천 데이터, 그룹 인덱스, 특징량, 전처리 스케일 파라미터가 포함된다. 계층 사전과 파라미터화를 명세하고, 변분가족과 초기화를 정한 뒤 ELBO를 최적화한다. 결과물은 사후 표본, 불확실성 구간, 집단별 추정치와 부분 풀링 효과다.
ELBO가 발산하면 학습률을 낮추고, 가중치 초기화를 바꾸거나 표준화를 강화하고, 논센터링 전환을 검토한다. 비식별성이 보이면 공선성을 점검하고 약한 사전을 강화하거나 계층 수준을 줄인다. 수치적으로 불안정한 경우에는 정규화 흐름을 제거하거나 단순화하고, 데이터 스케일링과 안정적인 링크함수 선택을 적용한다.
VI 결과는 ELBO 수렴 곡선, 사후예측검증(PPC), 캘리브레이션의 신뢰구간 적중률, PSIS-LOO 근사 비교로 검증한다. 재현성을 위해 시드를 고정하고 변분가족과 파라미터화를 명시하며 스케일 표준화를 적용한다.
MCMC와 VI를 선택하는 기준
| 방법 | 성능(속도) | 확장성 | 일관성(근사 정확도) | 안정성 | 운영 편의 |
|---|---|---|---|---|---|
| HMC/NUTS(MCMC) | 중간~느림 | 중간(병렬 체인) | 높음(정확한 사후) | 튜닝 민감(복잡 모델) | 재현성 좋음, 비용 높음 |
| VI(Mean-field) | 매우 빠름 | 높음(SVI, GPU) | 중간(언더디스퍼션 경향) | 초기화/스케일 민감 | 파이프라인 자동화 용이 |
| VI(Full-rank/Flow) | 빠름 | 중~높음 | 높음(비정규성 포착) | 최적화 난이도 증가 | 운영 복잡도 증가 |
대규모 데이터나 온라인 추론에서는 VI가 우선 선택지가 될 수 있다. 규제나 리스크 때문에 높은 정확도가 필요한 경우에는 HMC로 기준선을 검증한 뒤 VI를 파생 운영한다. VI로 초기화하고 짧은 HMC 검증을 연결하는 혼합 전략도 가능하다.
집단 구조가 드러나는 업무 데이터
마케팅과 성장 분석에서는 지역·캠페인별 전환율을 계층 모델로 표현할 수 있다. 데이터가 적은 지역의 불안정한 추정은 부분 풀링으로 안정화하고, SVI 기반 일 단위 재학습과 사후예측을 예산 배분에 연결한다.
제조와 품질 영역에서는 라인·설비·배치별 수율에서 라인 간 편차와 배치 변동을 분리해 추정한다. 변분추론은 근실시간 이상치 탐지와 공정 파라미터 드리프트 모니터링에 활용할 수 있다.
의료·보험에서는 병원·의사·환자 수준의 효과를 나누어 추정한다. 사례 수가 적은 병원도 안정적인 효과 추정을 얻을 수 있으며, 캘리브레이션 평가는 리스크 등급화의 신뢰성을 점검하는 수단이 된다.
제품과 플랫폼에서는 사용자-아이템 다층 추천에 카테고리·셀러·아이템 효과를 계층화할 수 있다. Online SVI는 스트리밍 로그를 바탕으로 한 모델 업데이트에 맞는다.
PyMC에서 계층 선형모형과 ADVI 구성하기
Python 3.10+, pymc>=5, arviz>=0.15, numpy를 전제로 한다. 데이터는 평균 0, 표준편차 1로 스케일링하는 방식을 권장한다.
# pip install pymc arviz numpy
import numpy as np
import pymc as pm
import arviz as az
rng = np.random.default_rng(42)
# 모의 데이터 생성
G = 30 # 그룹 수
n_per_g = rng.integers(20, 80, size=G)
N = n_per_g.sum()
g_idx = np.repeat(np.arange(G), n_per_g)
x = rng.normal(size=N)
# 진짜 파라미터
mu_alpha_true = 0.5
tau_alpha_true = 0.7
beta_true = 1.2
sigma_y_true = 0.8
alpha_g_true = rng.normal(mu_alpha_true, tau_alpha_true, size=G)
mu = alpha_g_true[g_idx] + beta_true * x
y = rng.normal(mu, sigma_y_true)
# 표준화(권장)
x_std = (x - x.mean()) / x.std()
y_std = (y - y.mean()) / y.std()
with pm.Model() as model:
# 하이퍼사전
mu_alpha = pm.Normal("mu_alpha", 0.0, 1.0)
tau_alpha = pm.HalfNormal("tau_alpha", 1.0)
sigma_y = pm.HalfNormal("sigma_y", 1.0)
beta = pm.Normal("beta", 0.0, 1.0)
# 논센터링 파라미터화
z_alpha = pm.Normal("z_alpha", 0.0, 1.0, shape=G)
alpha_g = pm.Deterministic("alpha_g", mu_alpha + tau_alpha * z_alpha)
mu_obs = alpha_g[g_idx] + beta * x_std
pm.Normal("y_obs", mu=mu_obs, sigma=sigma_y, observed=y_std)
# ADVI로 변분추론 수행
approx = pm.fit(
n=30_000,
method="advi",
callbacks=[pm.callbacks.CheckParametersConvergence(tolerance=1e-3)],
progressbar=False,
)
idata_vi = approx.sample(2000) # q(θ)에서 샘플
az.summary(idata_vi, var_names=["mu_alpha", "tau_alpha", "beta", "sigma_y"])
# 사후예측검증
with model:
ppc = pm.sample_posterior_predictive(idata_vi, var_names=["y_obs"], progressbar=False)
print(az.r2_score({"y_true": y_std, "y_pred": ppc.posterior_predictive["y_obs"].mean(("chain","draw")).values}))
운영에서는 ELBO 곡선을 모니터링하고 조기 종료를 설정한다. 변분가족은 Mean-field로 시작해 필요하면 Full-rank로 확장한다. 소표본에서는 짧은 NUTS 체인으로 기준선을 비교하고, 스케일 문제가 있으면 논센터링과 입력 표준화를 적용한다.
부분 풀링은 희소 집단의 MSE를 1030% 감소시킬 수 있으며, 대규모 100배 빨라질 수 있다. 일 단위 재학습 파이프라인에서는 컴퓨팅 비용을 50% 이상 절감하는 사례도 가능하다. 집단·개체 수준 효과를 분해하고 불확실성을 의사결정에 포함할 수 있으며, 온라인·스트리밍 업데이트와 배치 혼합 운영에도 적합하다. 사전에 도메인 지식을 명시하고 감도분석을 수행하기도 수월하다.N에서는 HMC 대비 추론 시간이 10