비모수 베이지안으로 데이터 복잡도에 적응하는 모델링
Dirichlet Process와 Gaussian Process Regression을 중심으로 비모수 베이지안의 추론 방식, 불확실성, 확장 전략을 정리한다.
2026-08-14 · 최초 발행 2024-04-29
고정된 모수 대신 데이터가 복잡도를 정하게 한다
모수의 수를 미리 고정한 모델은 데이터가 요구하는 구조를 충분히 담지 못할 수 있다. 비모수 베이지안은 잠재적으로 무한한 차원을 가질 수 있는 사전분포를 사용해, 관측 이후의 사후분포에서 실질적인 모델 복잡도를 학습한다.
핵심은 함수나 확률분포의 공간 자체에 사전분포를 설정하는 데 있다. 데이터가 들어오면 사후분포가 형성되고, 그 과정에서 군집 수나 함수의 복잡도처럼 유효한 차원이 자동으로 정해진다.
Dirichlet Process(DP)는 확률분포 위의 분포를 정의하는 방식이다. 무한 혼합 관점에서 군집화와 밀도추정을 다룰 수 있으며, 농도 하이퍼파라미터 α는 군집 수에, 기저분포 G0는 군집 중심과 파라미터에 영향을 준다. 중국식 레스토랑 프로세스(CRP)와 막대자르기(stick-breaking)는 DP를 표현하는 등가적 관점이며, DP 혼합모형(DPMM)은 이를 유연한 군집 및 밀도추정으로 연결한다.
Gaussian Process Regression(GPR)은 함수 공간에 사전분포를 둔다. 임의의 입력 집합에 대응하는 함수값 벡터는 다변량 정규분포를 따르며, 커널 함수가 매끄러움·주기성·선형성 같은 구조 가정을 담는다. 예측 평균뿐 아니라 분산도 함께 제공하므로 불확실성을 정량화할 수 있다.
비모수 사전분포에는 DP 외에도 Pitman–Yor, Beta/Bernoulli Process, Indian Buffet Process(IBP)가 있다. 이들은 군집 수, 요인 수, 특징 수를 데이터로부터 추론하는 데 사용된다. HDP(계층적 DP)는 문서 간 토픽을 공유하는 구조를, IBP는 희소한 잠재특징 학습을 지원한다.
사전분포와 추론 방식이 운영 특성을 결정한다
DP 혼합, HDP, GPR, Sparse GP, IBP는 모두 유연한 사전과 모형 구조를 제공한다. 도메인 지식은 G0, 커널, 하이퍼프라이어에 반영할 수 있다. 모델 복잡도를 자동으로 조절하는 특성은 과적합을 줄이고 해석 가능성을 높이는 방향으로 작동한다.
추론 방식은 정확도와 계산 비용 사이의 선택이다. DP에는 Collapsed Gibbs와 Slice Sampling 같은 MCMC 방법을, GP에는 HMC와 Elliptical Slice 등을 적용할 수 있다. 이 방식들은 정확도가 높지만 비용이 크다. DPGMM과 Sparse GP의 Inducing Points처럼 변분추론과 SVI를 사용하면 대규모 데이터에 대응할 수 있지만, 수렴과 바이어스의 트레이드오프를 함께 고려해야 한다.
스케일링 전략도 모델별로 다르다. DP에서는 트렁케이션으로 유한 상계 K를 두고, 병렬 샘플링이나 미니배치 SVI를 사용한다. α의 사전분포와 초기화는 수렴 속도에 영향을 준다. GP는 유도점 M을 이용해 O(NM^2) 근사로 계산량을 조절하며, 커널 합성 자동화(AutoML)와 구조적 커널로 희소성을 활용할 수 있다.
DP의 α와 G0의 과분산, GP의 커널 하이퍼파라미터 ℓ, σ_f, σ_n은 모델 용량을 좌우한다. 하이퍼사전과 마진럴 라이클리후드 최적화를 함께 사용하고, 유효 군집 수·예측 log-likelihood·캘리브레이션(분산 일치)을 진단 지표로 확인한다. 사후 분산, 군집 할당 확률, GP 분산 지도는 신뢰구간 기반 의사결정과 탐색·실험 설계 최적화에 활용할 수 있다.
데이터에서 사후분포와 예측까지
표현력과 운영 비용의 차이
| 모델 | 성능(표현력) | 확장성(시간/메모리) | 일관성(추정 안정성) | 안정성(수치/수렴) | 운영 편의 |
|---|---|---|---|---|---|
| 파라메트릭 베이지안 | 중간 | 높음 | 높음 | 높음 | 매우 높음 |
| DP 혼합(DPMM/DPGMM) | 높음 | 중간(트렁케이션/VI로 개선) | 높음(충분 데이터) | 중간(α 민감) | 높음(Scikit-learn/VI) |
| GP 회귀(GPR) | 매우 높음(연속함수) | 낮음 O(N^3)/Sparse로 개선 | 높음(적절 커널) | 중간(커널·jitter 필요) | 중간(대규모는 추가 엔지니어링) |
군집화, 회귀, 계층 모델에서의 활용
고객 세분화와 이상치 탐지에는 DPGMM을 사용해 군집 수를 자동으로 학습할 수 있다. 로그 확률 기반 임계값은 재현율과 정밀도의 균형을 설정하는 기준이 된다.
소규모 데이터의 고정밀 회귀에는 GPR이 적합하며, 신뢰구간도 함께 제공한다. Bayesian Optimization에서는 UCB, EI 획득함수를 이용해 탐색을 최적화할 수 있다. WhiteKernel을 포함하면 장비 오차를 노이즈 추정과 분리할 수 있다.
문서와 토픽처럼 계층적 구조가 있는 데이터에는 HDP-LDA를 적용해 문서별 토픽 수를 자동화하고 도메인별 공유 구조를 학습한다. 드리프트 환경에서는 토픽 수의 변화를 추적할 수 있다.
DP 혼합을 변분추론으로 실행하기
전제조건
- Python 3.10+, scikit-learn 1.2+, numpy, matplotlib
설치
- pip install scikit-learn matplotlib numpy
import numpy as np
from sklearn.mixture import BayesianGaussianMixture
from sklearn.datasets import make_blobs
# 데이터 생성
X, _ = make_blobs(n_samples=800, centers=4, cluster_std=[0.6, 0.8, 0.5, 0.7], random_state=42)
# DPGMM: 트렁케이션 K=10, DP prior
dpgmm = BayesianGaussianMixture(
n_components=10,
covariance_type="full",
weight_concentration_prior_type="dirichlet_process",
weight_concentration_prior=1.0, # α에 대응, 작을수록 희소
init_params="kmeans",
max_iter=1000,
random_state=42
)
dpgmm.fit(X)
labels = dpgmm.predict(X)
n_active = np.sum(dpgmm.weights_ > 1e-2)
print("유효 군집 수:", n_active)
# 에러/수치 핸들링 팁:
# - 수렴 경고 시 max_iter↑, tol 조정
# - 군집 과다 시 weight_concentration_prior↑
GP 회귀에서 예측 분포 확인하기
import numpy as np
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, WhiteKernel, ConstantKernel
# 데이터 생성
rng = np.random.default_rng(0)
X = np.linspace(0, 10, 60)[:, None]
y_true = np.sin(X).ravel()
y = y_true + rng.normal(0, 0.2, size=y_true.shape)
# 커널 정의: 상수 * RBF + 화이트노이즈
kernel = ConstantKernel(1.0, (1e-2, 1e2)) * RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e2)) \
+ WhiteKernel(noise_level=0.1, noise_level_bounds=(1e-4, 1e1))
gpr = GaussianProcessRegressor(kernel=kernel, alpha=0.0, normalize_y=True, n_restarts_optimizer=3, random_state=0)
gpr.fit(X, y)
X_star = np.linspace(-1, 11, 200)[:, None]
mu, std = gpr.predict(X_star, return_std=True)
print("학습된 커널:", gpr.kernel_)
# 시각화
plt.figure(figsize=(7,4))
plt.plot(X, y, "kx", label="observations")
plt.plot(X_star, np.sin(X_star), "g--", alpha=0.6, label="true")
plt.plot(X_star, mu, "b", label="GP mean")
plt.fill_between(X_star.ravel(), mu-2*std, mu+2*std, color="b", alpha=0.2, label="95% CI")
plt.legend(); plt.tight_layout(); plt.show()
# 수치 안정화 팁:
# - 'alpha'나 WhiteKernel의 noise_level에 1e-6~1e-3 jitter 역할
# - 입력 스케일 표준화 추천
확장성과 수치 안정성을 함께 관리하는 법
DP는 트렁케이션 K를 점진적으로 늘리고, α 하이퍼사전(Gamma)으로 베이지안적 정규화를 적용할 수 있다. 유효 군집 수의 변동성을 점검해야 한다. GP의 커널 검색은 RBF에서 RBF+Periodic으로 단순한 구조부터 복합 구조로 진행하며, 마진럴 라이클리후드와 예측 로그우도를 함께 검증한다.
스트리밍 데이터에는 DP의 미니배치 VI를 사용할 수 있다. 분산 환경에서 파티션별 부분 사후를 결합할 때는 충돌 회피 규칙이 필요하다. GP는 유도점 M을 예를 들어 M≈sqrt(N) 또는 예산 기반으로 선택하고, 구조적 커널이나 직교분해로 O(NM^2)를 달성한다.
DP에서는 희소성이 지나치면 소수 군집이 붕괴할 수 있으므로 하위 한계 ELBO를 모니터링해 조기 종료를 방지한다. GP는 커널 행렬의 조건수가 나빠질 때 jitter를 추가하고 입력을 정규화한다. 다중 재시작은 지역해를 피하는 데 사용된다.
복잡도 적응이 제공하는 이점
모델은 데이터 구조의 군집 수와 함수 복잡도에 맞춰 적응하므로 과적합과 과소적합의 리스크를 함께 낮출 수 있다. 예측 분산과 군집 불확실성은 리스크 기반 의사결정 및 실험 설계 최적화에 유리하다.
정확 GP의 O(N^3)와 비교하면 Sparse GP는 O(NM^2), 메모리 O(NM)로 절감할 수 있다. N=100k, M=1k에서는 실무 적용 가능 범위가 형성된다. DPGMM은 VI를 사용해 O(NK) 시간으로 처리하며, K는 트렁케이션 상계로 제어한다.
비모수 베이지안은 함수와 분포 공간을 사전으로 직접 모델링해 데이터가 요구하는 복잡도에 적응한다. DP는 군집 수의 자동 추론에, GPR은 고품질 회귀와 불확실성 정량화에 연결된다. 확장성을 위해 변분추론·유도점·트렁케이션을 사용하되, 하이퍼파라미터와 수치 안정성 관리는 함께 다뤄야 한다.