기존의 고전 통계(Frequentist)가 "동전 던지기의 확률은 무조건 50%다"라고 고정한다면, 베이즈 통계는 "처음엔 50%라고 생각했는데, 던져보니 앞면이 자꾸 나오네? 그럼 앞면 확률을 60%로 올려야겠다"라며 경험(데이터)에 따라 확률을 업데이트하는 방식입니다. 의료 데이터처럼 새로운 환자 데이터가 계속 쌓이는 환경에서 매우 강력한 도구입니다.
우리가 지금까지 배운 통계(t-test, ANOVA 등)는 빈도주의(Frequentist) 통계였습니다. 모수(평균, 분산)는 변하지 않는 '고정된 상수'라고 믿었죠.
하지만 베이즈 통계(Bayesian Statistics)는 다릅니다. "모수도 확률적으로 변한다"고 봅니다. 처음엔 잘 몰랐던 확률(사전 확률)이 새로운 데이터(우도)를 만나면 더 똑똑한 확률(사후 확률)로 진화합니다. 이것이 현대 AI와 머신러닝의 근간이 되는 베이즈 정리의 핵심입니다.
1. 베이즈 정리의 핵심 공식
이를 데이터 분석의 언어(모수 $\theta$, 데이터 $x$)로 바꾸면 다음과 같습니다.
- $P(\theta)$ - 사전 확률 (Prior): 데이터를 보기 전에 내가 가지고 있는 믿음. (주관적일 수 있음)
- $P(x|\theta)$ - 우도 (Likelihood): 모수 $\theta$가 주어졌을 때, 이 데이터 $x$가 관측될 확률. (증거)
- $P(\theta|x)$ - 사후 확률 (Posterior): 데이터를 보고 난 후 갱신된 믿음.
핵심 원리: 사후 확률 $\propto$ 우도 $\times$ 사전 확률 (내 생각은 새로운 증거를 만나면 업데이트된다!)
2. 켤레 사전 확률 분포 (Conjugate Prior)
베이즈 통계의 계산은 복잡한 적분($\int$)이 필요해서 손으로 풀기 어렵습니다. 하지만 "궁합이 잘 맞는(켤레)" 확률 분포끼리 만나면 계산이 아주 쉬워집니다.
- 궁합 공식:
- (우도) 이항 분포 $\times$ (사전) 베타 분포 $\rightarrow$ (사후) 베타 분포
- (우도) 정규 분포 $\times$ (사전) 정규 분포 $\rightarrow$ (사후) 정규 분포
이렇게 사전 확률과 사후 확률이 같은 종류의 분포가 되는 것을 '켤레 사전 확률 분포'라고 합니다.
3. [실습] 자산 가격 예측하기 (베타-이항 분포)
시나리오
- 상황: 어떤 자산 가격이 오를 확률($\theta$)을 알고 싶습니다.
- 사전 지식: 아무런 정보가 없으므로 반반(0.5)이라고 가정합니다. $\rightarrow$ Beta(1, 1)
- 데이터: 47일 동안 관찰했더니 32일 상승, 15일 하락했습니다.
- 사후 지식: 이 데이터를 반영하면 상승 확률($\theta$)은 어떻게 변할까요?
Python Code (scipy.stats)
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta
# 1. 사전 확률 (Prior): Beta(1, 1) - 정보 없음 (Uniform)
alpha_prior = 1
beta_prior = 1
# 2. 데이터 관측 (Likelihood): 이항 분포
n_trials = 47
n_success = 32 # 상승
n_failure = n_trials - n_success # 하락 (15)
# 3. 사후 확률 (Posterior): Beta(alpha', beta')
# 켤레 성질에 의해 단순 더하기로 계산 가능!
alpha_post = alpha_prior + n_success
beta_post = beta_prior + n_failure
print(f"사후 분포 파라미터: Alpha={alpha_post}, Beta={beta_post}")
# 기댓값(Mean) 계산: alpha / (alpha + beta)
prior_mean = alpha_prior / (alpha_prior + beta_prior)
post_mean = alpha_post / (alpha_post + beta_post)
print(f"사전 기대 확률: {prior_mean:.2f} ")
print(f"사후 기대 확률: {post_mean:.2f}")
# --- 시각화 ---
x = np.linspace(0, 1, 100)
y_prior = beta.pdf(x, alpha_prior, beta_prior)
y_post = beta.pdf(x, alpha_post, beta_post)
plt.figure(figsize=(10, 6))
plt.plot(x, y_prior, 'k--', label=f'Prior: Beta({alpha_prior},{beta_prior})', linewidth=2)
plt.plot(x, y_post, 'b-', label=f'Posterior: Beta({alpha_post},{beta_post})', linewidth=3)
plt.fill_between(x, y_post, alpha=0.2, color='blue')
plt.axvline(post_mean, color='red', linestyle=':', label=f'Posterior Mean ({post_mean:.2f})')
plt.title("Bayesian Update: Asset Price Up Probability")
plt.xlabel("Theta (Probability of Up)")
plt.ylabel("Density")
plt.legend()
plt.grid(True)
plt.show()
R Code
# 1. 사전 확률 파라미터 Beta(1, 1)
alpha_prior <- 1
beta_prior <- 1
# 2. 데이터 관측
n_success <- 32
n_failure <- 15
# 3. 사후 확률 파라미터 (업데이트)
alpha_post <- alpha_prior + n_success
beta_post <- beta_prior + n_failure
cat(sprintf("사후 분포: Beta(%d, %d)\n", alpha_post, beta_post))
# 4. 시각화
theta <- seq(0, 1, length=100)
# dbeta: 베타 분포의 확률밀도함수
prior_density <- dbeta(theta, alpha_prior, beta_prior)
post_density <- dbeta(theta, alpha_post, beta_post)
# 그래프 그리기
plot(theta, post_density, type="l", col="blue", lwd=3,
main="Bayesian Update: Beta-Binomial Conjugate",
xlab="Theta (Probability)", ylab="Density", ylim=c(0, max(post_density)+1))
lines(theta, prior_density, col="black", lty=2, lwd=2)
abline(v=alpha_post/(alpha_post+beta_post), col="red", lty=3)
legend("topleft", legend=c("Posterior", "Prior"),
col=c("blue", "black"), lty=c(1, 2), lwd=c(3, 2))

결과 해석
- 검은 점선 (Prior): 처음에는 아무것도 몰라서 0에서 1까지 평평한 직선(일양 분포)이었습니다. "상승 확률은 0%일 수도, 100%일 수도 있어."
- 파란 실선 (Posterior): 데이터를 보고 난 후, 그래프가 0.67(67%) 부근으로 뾰족하게 솟았습니다. "데이터를 보니 상승 확률은 67% 정도가 확실해 보여!"
- 의미: 확률이 데이터에 의해 수정되고 구체화되었습니다.
분석가의 Insight
베이즈 통계는 "희귀 질환"이나 "개인 맞춤형 치료"에 강력합니다.
- 전체 환자의 평균적인 약물 반응률(사전 확률)을 알고 있는 상태에서,
- 특정 환자에게 약을 3번 줬더니 3번 다 효과가 있었다면(데이터),
- 이 환자의 반응률(사후 확률)을 즉각적으로 높여서 예측할 수 있습니다. (데이터가 쌓일수록 AI 의사는 똑똑해집니다!)
그래서 베이즈 통계는 언제 쓰나요?
우리는 학교에서 대부분 빈도주의(Frequentist) 통계를 배웁니다. (t-검정, ANOVA 등). 데이터가 충분하다면 빈도주의 방식은 빠르고 객관적이며 훌륭합니다.
하지만 의료 데이터나 현실 세계의 문제는 그렇게 깔끔하지 않습니다. 다음 4가지 상황에 닥쳤다면, 주저 없이 베이즈 통계를 꺼내 드세요.
1. 데이터가 턱없이 부족할 때 (Small Data)
- 상황: 희귀 질환 환자 데이터가 딱 3명뿐입니다.
- 빈도주의: 3명 중 0명이 치료되었으므로 치료율은 0%라고 단정합니다. (과적합 위험)
- 베이지안: "과거 유사한 약물의 치료율이 보통 20%였다"는 사전 지식(Prior)을 반영하여, 데이터가 적더라도 극단적인 결론(0%)을 내리지 않고 합리적인 추정(약 15% 내외)을 해줍니다.
- 결론: 데이터가 적을수록 사전 믿음(Prior)의 힘을 빌려야 합니다.
2. 데이터가 실시간으로 계속 들어올 때 (Online Learning)
- 상황: 중환자실(ICU) 환자의 바이탈이 1초마다 갱신됩니다.
- 빈도주의: 데이터가 추가될 때마다 전체 데이터를 다시 모아서 처음부터 모델을 다시 학습해야 합니다. (비효율적)
- 베이지안: 어제까지의 결과를 '사전 확률'로 삼고, 오늘 들어온 데이터('우도')만 곱해주면 바로 '사후 확률'이 업데이트됩니다.
- 결론: 실시간 환자 모니터링 시스템이나 주식 트레이딩처럼 모델이 계속 진화해야 할 때 강력합니다.
3. '결과'보다 '불확실성' 자체가 중요할 때
- 상황: 예측 AI가 "이 환자는 질병입니다"라고 했습니다. 근데 얼마나 확실한가요?
- 빈도주의: "정확도 90% 모델입니다"라는 말만 반복합니다. 개별 환자에 대한 확신도는 주지 않습니다.
- 베이지안: "이 환자가 질병일 확률은 평균 85%인데, 데이터가 부족해서 신뢰 구간이 40%~99%로 매우 넓습니다(불확실함)"라고 말해줍니다.
- 결론: 의료에서는 "잘 모르겠다"고 솔직하게 말하는 AI가 필요합니다. 베이즈는 이 불확실성(Uncertainty)을 분포로 보여줍니다.
4. A/B 테스트를 빨리 끝내고 싶을 때 (Adaptive Trial)
- 상황: 신약 A와 B를 테스트 중입니다. 사람 목숨이 달려 있어서 효과가 좋은 약을 빨리 찾고 싶습니다.
- 빈도주의: 사전에 정한 샘플 수(예: 1000명)를 채울 때까지 결과를 보면 안 됩니다. (Peeking 금지)
- 베이지안: 데이터를 볼 때마다 확률을 업데이트합니다. "A가 B보다 좋을 확률이 99%입니다"라는 결론이 나면, 1000명을 다 채우지 않고 내일 당장 실험을 멈추고 A를 쓸 수 있습니다.
- 결론: 적응형 임상시험(Adaptive Clinical Trial)의 핵심 논리입니다.
한눈에 보는 비교: 빈도주의 vs 베이지안
| 구분 | 빈도주의 (Frequentist) | 베이지안 (Bayesian) |
| 관점 | 모수는 고정된 상수다. | 모수는 변하는 확률 변수다. |
| 데이터 | 데이터가 무한히 많다고 가정. | 현재 관측된 데이터와 사전 지식을 결합. |
| 강점 | 계산이 빠르고 객관적임. | 데이터가 적어도 안정적임. 업데이트가 쉬움. |
| 단점 | 데이터가 적으면 결과가 튐. | 계산 비용이 비쌈 (MCMC 등 필요). 사전 확률 설정이 주관적일 수 있음. |
| 적용 | 일반적인 논문 통계 (P-value) | 희귀병 분석, 실시간 모니터링, 임상시험 조기 종료 |
최종 요약: 데이터가 충분하고 일반적인 검증이 필요하다면 빈도주의를, 데이터가 부족하거나, 실시간으로 업데이트해야 하거나, 전문가의 지식(Prior)을 모델에 녹여내고 싶다면 베이지안이 정답입니다.
'Study Note > 통계' 카테고리의 다른 글
| 눈에 보이지 않는 원인을 찾아라: 은닉 마르코프 모델 (HMM) (0) | 2025.12.19 |
|---|---|
| 어려운 적분은 가라, 뽑아서 푼다! MCMC와 메트로폴리스-헤이스팅스 (0) | 2025.12.19 |
| 최적의 선택을 찾아라: 마르코프 의사결정 과정 (MDP) (0) | 2025.12.19 |
| 어제는 잊어라, 오직 오늘만 본다: 마르코프 연쇄 (Markov Chain) (0) | 2025.12.19 |
| PCA와 비슷하지만 다른, 요인분석(Factor Analysis)의 모든 것 (0) | 2025.12.19 |