1 왜 베타 분포인가
베타 분포는 “(0, 1) 위에서 임의의 형태를 가질 수 있는 유일한 2-모수 분포” 이다. 확률(probability), 비율(proportion), 분위수(quantile)처럼 0과 1 사이에 자연스럽게 갇히는 양을 모델링할 때 가장 먼저 고려한다.
베타 분포가 중요한 세 가지 이유:
- 유연한 형태: 두 모수 \(\alpha, \beta\) 를 조정하면 U자형, 단봉형, 균등형, 단조 증가/감소까지 하나의 공식으로 표현된다. 정규 분포가 \((-\infty, \infty)\) 에서 하는 역할을 \((0, 1)\) 에서 담당한다.
- 순서통계량의 분포: 균등 분포 \(U(0,1)\) 에서 추출한 \(n\) 개 표본의 \(j\) 번째 순서통계량이 정확히 \(\text{Beta}(j, n-j+1)\) 를 따른다 (Casella & Berger, Ch.5).
- 베이지안 켤레 사전분포: 이항 모형에서 성공 확률 \(p\) 의 사전분포로 \(\text{Beta}(\alpha, \beta)\) 를 설정하면, 관측 후 사후분포도 베타로 유지된다 (켤레성).
2 정의
\(X \sim \text{Beta}(\alpha, \beta)\) 의 PDF:
\[ f(x \mid \alpha, \beta) = \frac{1}{B(\alpha, \beta)} x^{\alpha-1} (1-x)^{\beta-1}, \quad 0 < x < 1,\quad \alpha > 0,\; \beta > 0 \]
베타 함수 (Beta function):
\[ B(\alpha, \beta) = \int_0^1 x^{\alpha-1}(1-x)^{\beta-1}\, dx = \frac{\Gamma(\alpha)\,\Gamma(\beta)}{\Gamma(\alpha+\beta)} \]
\(B(\alpha, \beta)\) 는 적분이 1이 되도록 하는 정규화 상수이다. 분자인 \(x^{\alpha-1}(1-x)^{\beta-1}\) 이 커널(kernel) 이고, 베타 함수가 이 커널을 적분한 값이다.
\(x^{\alpha-1}\) 항은 “\(x\) 가 클수록 확률이 높아진다”는 효과이다. \(\alpha > 1\) 이면 \(x = 0\) 근방의 밀도가 0이고, 내부로 갈수록 밀도가 커진다. \(\alpha < 1\) 이면 반대로 \(x = 0\) 에서 밀도가 발산한다. \(\alpha = 1\) 이면 이 항이 1이 되어 사라진다.
\((1-x)^{\beta-1}\) 항은 대칭적으로 \(x = 1\) 쪽에서 같은 역할을 한다. \(\beta > 1\) 이면 \(x = 1\) 근방에서 밀도가 0이고, \(\beta < 1\) 이면 발산한다.
두 항이 서로 경쟁하여 내부 어딘가에서 최댓값이 만들어진다. 최빈값 \((\alpha-1)/(\alpha+\beta-2)\) 는 이 두 힘의 균형점이다. \(\alpha = \beta = 1\) 이면 두 항 모두 상수 1이 되어 경쟁이 없고, 균등분포가 된다. \(B(\alpha,\beta)\) 는 이 커널의 면적을 1로 맞추는 정규화 상수에 불과하다 — 분포의 형태는 오직 커널이 결정한다.
3 베타 함수와 감마 함수의 관계
\[ B(\alpha, \beta) = \frac{\Gamma(\alpha)\,\Gamma(\beta)}{\Gamma(\alpha+\beta)} \]
증명 (변수 변환법):
감마 함수의 정의를 두 번 쓰면:
\[ \Gamma(\alpha)\,\Gamma(\beta) = \int_0^\infty u^{\alpha-1} e^{-u}\, du \cdot \int_0^\infty v^{\beta-1} e^{-v}\, dv = \int_0^\infty \int_0^\infty u^{\alpha-1} v^{\beta-1} e^{-(u+v)}\, du\, dv \]
\(u = ts\), \(v = t(1-s)\) (\(t > 0\), \(0 < s < 1\)) 로 치환한다. 야코비안은 \(t\) 이다:
\[ = \int_0^1 \int_0^\infty (ts)^{\alpha-1} (t(1-s))^{\beta-1} e^{-t} \cdot t\, dt\, ds \]
\[ = \int_0^1 s^{\alpha-1}(1-s)^{\beta-1}\, ds \cdot \int_0^\infty t^{\alpha+\beta-1} e^{-t}\, dt = B(\alpha, \beta) \cdot \Gamma(\alpha+\beta) \]
따라서 \(B(\alpha, \beta) = \Gamma(\alpha)\Gamma(\beta)/\Gamma(\alpha+\beta)\). \(\square\)
활용: 이 항등식 덕분에 베타 함수를 직접 적분하지 않고 감마 함수 값만으로 계산할 수 있다. 예를 들어 \(B(2, 3) = \Gamma(2)\Gamma(3)/\Gamma(5) = 1!\cdot 2!/4! = 2/24 = 1/12\).
4 평균, 분산 — 커널 트릭
베타 분포의 적률은 커널 트릭으로 우아하게 구한다 (Casella & Berger, 2002, 식 3.3.18).
\(n\) 차 적률 (\(n > -\alpha\)):
\[ E[X^n] = \frac{1}{B(\alpha,\beta)} \int_0^1 x^n \cdot x^{\alpha-1}(1-x)^{\beta-1}\, dx = \frac{1}{B(\alpha,\beta)} \int_0^1 x^{(\alpha+n)-1}(1-x)^{\beta-1}\, dx \]
적분 안의 함수가 \(\text{Beta}(\alpha+n, \beta)\) 의 커널임을 인식하면:
\[ E[X^n] = \frac{B(\alpha+n,\, \beta)}{B(\alpha,\, \beta)} = \frac{\Gamma(\alpha+n)\,\Gamma(\alpha+\beta)}{\Gamma(\alpha+\beta+n)\,\Gamma(\alpha)} \]
\(n=1\) (평균):
\[ E[X] = \frac{B(\alpha+1, \beta)}{B(\alpha, \beta)} = \frac{\Gamma(\alpha+1)\Gamma(\alpha+\beta)}{\Gamma(\alpha+\beta+1)\Gamma(\alpha)} = \frac{\alpha\,\Gamma(\alpha)\,\Gamma(\alpha+\beta)}{(\alpha+\beta)\,\Gamma(\alpha+\beta)\,\Gamma(\alpha)} = \frac{\alpha}{\alpha+\beta} \]
\(n=2\) 와 분산:
\[ E[X^2] = \frac{\alpha(\alpha+1)}{(\alpha+\beta)(\alpha+\beta+1)} \]
\[ \text{Var}(X) = E[X^2] - (E[X])^2 = \frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)} \]
| 성질 | 값 |
|---|---|
| \(E[X]\) | \(\dfrac{\alpha}{\alpha+\beta}\) |
| \(\text{Var}(X)\) | \(\dfrac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}\) |
| 최빈값 | \(\dfrac{\alpha-1}{\alpha+\beta-2}\) (\(\alpha, \beta > 1\) 인 경우) |
\(\alpha\) 와 \(\beta\) 를 각각 “성공 관측 횟수 + 1”, “실패 관측 횟수 + 1”로 해석하면, \(\alpha/(\alpha+\beta)\) 는 전체 시도에서 성공 비율의 추정값이다. 베이지안에서 사전분포 \(\text{Beta}(\alpha, \beta)\) 의 평균이 성공 비율의 사전 기대값이 된다.
분모의 \((\alpha+\beta)^2\) 은 전체 “사전 관측 수”의 제곱이다. \(\alpha + \beta\) 가 클수록 (사전 정보가 많을수록) 분산이 작아진다. 같은 비율 \(\alpha/(\alpha+\beta)\) 를 유지하면서 \(\alpha, \beta\) 를 두 배로 키우면, 분산은 약 4배 줄어든다.
분자의 \(\alpha\beta\) 는 평균 \(p = \alpha/(\alpha+\beta)\) 와 \(1-p = \beta/(\alpha+\beta)\) 의 곱에 비례한다. 비율이 극단값(0 또는 1)에 가까울수록 분자가 작아지고 분산도 작아진다 — 이미 “답을 알고 있는” 상황에서 불확실성이 낮은 것과 같다.
분모의 마지막 항 \((\alpha+\beta+1)\) 은 이항 분포 \(\text{Binomial}(n, p)\) 의 분산 \(np(1-p)\) 에는 없는 항이다. 이 항 때문에 같은 평균이라도 베타 분포의 분산이 이항 분포의 스케일보다 작다. “연속 확률을 모델링하는 데 따른 추가 정규화”로 해석할 수 있다.
5 모수별 형태 분류
베타 분포는 두 모수의 값에 따라 매우 다양한 형태를 보인다 (Casella & Berger, 2002, Ch.3.3):
| 조건 | 형태 | 예시 활용 |
|---|---|---|
| \(\alpha > 1\), \(\beta > 1\) | 단봉형(unimodal), 내부에 최빈값 | 중심 집중 비율 모델 |
| \(\alpha < 1\), \(\beta < 1\) | U자형, 양 끝에서 발산 | 극단값 편향 |
| \(\alpha = 1\), \(\beta > 1\) | 단조 감소 | 작은 값이 자주 나오는 비율 |
| \(\alpha > 1\), \(\beta = 1\) | 단조 증가 | 큰 값이 자주 나오는 비율 |
| \(\alpha = \beta\) | 1/2 에 대해 대칭 | 중심 대칭 모델 |
| \(\alpha = \beta = 1\) | 균등분포 \(U(0,1)\) | 무정보 사전분포 |
| \(\alpha = \beta \to \infty\) | 점질량 \(\delta(1/2)\) 로 수렴 | 모수 증가 → 집중화 |
해석: \(\alpha = \beta = 1\) 이면 균등분포이다. \(\alpha\) 만 크면 오른쪽으로 집중, \(\beta\) 만 크면 왼쪽으로 집중, 둘 다 크면 중간에 집중된다.
6 특수 케이스
6.1 \(\text{Beta}(1, 1) = U(0, 1)\)
\(\alpha = \beta = 1\) 이면:
\[ f(x \mid 1, 1) = \frac{1}{B(1,1)} \cdot 1 = 1, \quad 0 < x < 1 \]
이는 \(U(0,1)\) 의 PDF이다. 균등분포는 베타 분포의 특수 케이스이다.
6.2 \(\text{Beta}(1/2, 1/2)\) — 아크사인 분포 (Arcsine Distribution)
\[ f(x) = \frac{1}{\pi\sqrt{x(1-x)}}, \quad 0 < x < 1 \]
브라운 운동에서 시간의 비율 분포에 나타나는 U자형 분포이다.
6.3 대칭 케이스 \(\alpha = \beta\)
\(E[X] = 1/2\), \(\text{Var}(X) = 1/(4(2\alpha+1))\). \(\alpha\) 가 클수록 분산이 작아지며 \(1/2\) 에 집중된다.
7 순서통계량 연결
\(X_1, \ldots, X_n \overset{\text{iid}}{\sim} U(0, 1)\) 에서 \(X_{(1)} \leq X_{(2)} \leq \cdots \leq X_{(n)}\) 이면:
\[ X_{(j)} \sim \text{Beta}(j,\; n-j+1) \]
증명 (교재 식 직접 유도):
\(j\) 번째 순서통계량의 PDF는:
\[ f_{X_{(j)}}(x) = \frac{n!}{(j-1)!(n-j)!} [F(x)]^{j-1}[1-F(x)]^{n-j} f(x) \]
\(U(0,1)\) 이면 \(F(x) = x\), \(f(x) = 1\) 이므로:
\[ f_{X_{(j)}}(x) = \frac{n!}{(j-1)!(n-j)!} x^{j-1}(1-x)^{n-j} = \frac{\Gamma(n+1)}{\Gamma(j)\,\Gamma(n-j+1)} x^{j-1}(1-x)^{(n-j+1)-1} \]
이는 \(\text{Beta}(j, n-j+1)\) 의 PDF이다. \(\square\)
\(X_{(j)}\) 가 값 \(x\) 를 갖는다는 것은 세 가지 사건의 동시 발생이다:
- \(j-1\) 개 관측이 \(x\) 보다 작을 확률: \([F(x)]^{j-1} = x^{j-1}\)
- \(n-j\) 개 관측이 \(x\) 보다 클 확률: \([1-F(x)]^{n-j} = (1-x)^{n-j}\)
- 나머지 1개가 정확히 \(x\) 에 위치: \(f(x) = 1\)
이 세 항의 곱 \(x^{j-1}(1-x)^{n-j}\) 이 \(\text{Beta}(j, n-j+1)\) 의 커널이다. 모수 \(j\) 는 “\(x\) 보다 작은 관측 수 + 1”이고, \(n-j+1\) 은 “\(x\) 보다 큰 관측 수 + 1”이다.
\(E[X_{(j)}] = j/(n+1)\) 은 직관적으로 자연스럽다. \(n\) 개의 점이 \([0,1]\) 에 균등하게 떨어져 있다면, \(j\) 번째 점이 \(j/(n+1)\) 위치에 있을 것이라는 기대와 일치한다. 마치 자로 구간을 \(n+1\) 등분할 때의 눈금 위치이다.
따라서 \(E[X_{(j)}] = j/(n+1)\) — \(j\) 번째 순서통계량의 기대값은 간격이 균등하게 배치된다.
| \(j\) | 분포 | \(E[X_{(j)}]\) |
|---|---|---|
| 1 (최솟값) | \(\text{Beta}(1, n)\) | \(1/(n+1)\) |
| \(\lceil n/2 \rceil\) (중앙값) | \(\text{Beta}(n/2, n/2+1)\) (짝수 \(n\)) | \(1/2\) |
| \(n\) (최댓값) | \(\text{Beta}(n, 1)\) | \(n/(n+1)\) |
8 베이지안 켤레 사전분포
베타 분포는 이항 모형에서 성공 확률 \(p\) 의 켤레 사전분포(conjugate prior) 이다.
8.1 베이즈 업데이트
\(p \sim \text{Beta}(\alpha, \beta)\) (사전), \(X \mid p \sim \text{Binomial}(n, p)\) 일 때 \(x\) 번 성공을 관측하면:
\[ p \mid x \sim \text{Beta}(\alpha + x,\; \beta + n - x) \]
증명:
\[ \pi(p \mid x) \propto L(p \mid x) \cdot \pi(p) = \binom{n}{x} p^x (1-p)^{n-x} \cdot p^{\alpha-1}(1-p)^{\beta-1} \]
\[ \propto p^{(\alpha+x)-1}(1-p)^{(\beta+n-x)-1} \]
이는 \(\text{Beta}(\alpha+x, \beta+n-x)\) 의 커널이다. \(\square\)
| 의미 | 사전 | 관측 | 사후 |
|---|---|---|---|
| 성공 횟수 | \(\alpha\) | \(+x\) | \(\alpha + x\) |
| 실패 횟수 | \(\beta\) | \(+(n-x)\) | \(\beta + n - x\) |
| 성공 확률 추정 | \(\alpha/(\alpha+\beta)\) | \(x/n\) | \((\alpha+x)/(\alpha+\beta+n)\) |
사후 평균은 사전 평균 \(\alpha/(\alpha+\beta)\) 과 표본 평균 \(x/n\) 의 가중 평균이다. 데이터가 많아질수록 (\(n \to \infty\)) 표본 평균에 수렴한다.
8.2 무정보 사전분포
- \(\text{Beta}(1, 1) = U(0, 1)\): 제프리스 균등 사전분포 (Bayes’ flat prior)
- \(\text{Beta}(1/2, 1/2)\): 제프리스 사전분포(Jeffreys prior) — 재매개변수화에 불변
9 지수족 표현
\(\text{Beta}(\alpha, \beta)\) 는 자연 모수 \(\boldsymbol{\eta} = (\alpha-1,\; \beta-1)^\top\) 인 2-모수 지수족이다:
\[ f(x \mid \alpha, \beta) = \exp\!\left[(\alpha-1)\log x + (\beta-1)\log(1-x) - \log B(\alpha, \beta)\right] \]
자연 충분통계량: \(T(X) = (\log X,\; \log(1-X))^\top\).
지수족이므로: - \(E[\log X] = \psi(\alpha) - \psi(\alpha+\beta)\) (여기서 \(\psi\) 는 디감마 함수 \(\psi = \Gamma'/\Gamma\)) - 완비 충분통계량 → UMVUE 존재 가능 - MLE의 점근 정규성 자동 보장
10 코드 예시
10.1 Step 1: 순수 Python — 베타 함수·모수별 PDF 직접 계산
import math
def log_beta(a, b):
"""log B(a, b) = log Γ(a) + log Γ(b) - log Γ(a+b)"""
return math.lgamma(a) + math.lgamma(b) - math.lgamma(a + b)
def beta_pdf(x, a, b):
"""Beta(a, b) PDF"""
if x <= 0 or x >= 1:
return 0.0
return math.exp((a - 1) * math.log(x) + (b - 1) * math.log(1 - x) - log_beta(a, b))
def beta_mean(a, b):
return a / (a + b)
def beta_var(a, b):
return a * b / ((a + b)**2 * (a + b + 1))
# 모수 조합별 PDF 값 (x = 0.5 기준)
configs = [
(2, 5, "단봉 (α>1, β>1, 왼쪽 비대칭)"),
(5, 2, "단봉 (α>1, β>1, 오른쪽 비대칭)"),
(3, 3, "단봉 대칭 (α=β)"),
(0.5, 0.5, "U자형 (α<1, β<1)"),
(1, 1, "균등분포 U(0,1)"),
(1, 3, "단조 감소"),
]
print("=== 모수별 특성 ===")
print(f"{'(α, β)':>15} | {'E[X]':>6} | {'Var':>8} | {'f(0.5)':>8} | 형태")
print("-" * 70)
for a, b, desc in configs:
m = beta_mean(a, b)
v = beta_var(a, b)
fx = beta_pdf(0.5, a, b)
print(f"({a:4.1f}, {b:4.1f}) | {m:6.4f} | {v:8.6f} | {fx:8.4f} | {desc}")
# Beta(1,1) = Uniform 검증
print("\n=== Beta(1,1) = U(0,1) 검증 ===")
for x in [0.1, 0.3, 0.5, 0.7, 0.9]:
print(f"f({x}, 1, 1) = {beta_pdf(x, 1, 1):.6f} (이론: 1.0)")=== 모수별 특성 ===
(α, β) | E[X] | Var | f(0.5) | 형태
----------------------------------------------------------------------
( 2.0, 5.0) | 0.2857 | 0.025510 | 1.6406 | 단봉 (α>1, β>1, 왼쪽 비대칭)
( 5.0, 2.0) | 0.7143 | 0.025510 | 1.6406 | 단봉 (α>1, β>1, 오른쪽 비대칭)
( 3.0, 3.0) | 0.5000 | 0.035714 | 1.8750 | 단봉 대칭 (α=β)
( 0.5, 0.5) | 0.5000 | 0.125000 | 0.6366 | U자형 (α<1, β<1)
( 1.0, 1.0) | 0.5000 | 0.083333 | 1.0000 | 균등분포 U(0,1)
( 1.0, 3.0) | 0.2500 | 0.046875 | 0.3750 | 단조 감소
=== Beta(1,1) = U(0,1) 검증 ===
f(0.1, 1, 1) = 1.000000 (이론: 1.0)
f(0.3, 1, 1) = 1.000000 (이론: 1.0)
f(0.5, 1, 1) = 1.000000 (이론: 1.0)
f(0.7, 1, 1) = 1.000000 (이론: 1.0)
f(0.9, 1, 1) = 1.000000 (이론: 1.0)
10.2 Step 2: scipy.stats — 순서통계량과 베이지안 업데이트
import numpy as np
from scipy import stats
np.random.seed(0)
N = 100_000
# ── 순서통계량: X_(j) ~ Beta(j, n-j+1) ──────────────────────────
n_samp = 10
print("=== U(0,1) 순서통계량 ~ Beta(j, n-j+1) 검증 ===")
print(f"n={n_samp}개 표본에서 각 순서통계량 분포")
print(f"{'j':>4} | {'이론 평균':>10} | {'시뮬 평균':>10} | {'KS p-val':>10} | 판정")
print("-" * 55)
for j in [1, 3, 5, 8, 10]:
a, b = j, n_samp - j + 1
# 시뮬: n개 U(0,1)에서 j번째 순서통계량
order_stats = [np.sort(np.random.uniform(0, 1, n_samp))[j-1] for _ in range(N)]
order_stats = np.array(order_stats)
# KS test vs Beta(j, n-j+1)
ks, p = stats.kstest(order_stats, 'beta', args=(a, b))
mean_th = a / (a + b)
print(f"{j:>4} | {mean_th:>10.4f} | {order_stats.mean():>10.4f} | "
f"{p:>10.4f} | {'OK' if p > 0.05 else 'FAIL'}")
# ── 베이지안 업데이트: Beta 켤레 사전분포 ─────────────────────────
print(f"\n=== 베이즈 업데이트: Beta(α, β) prior + Binomial 관측 ===")
alpha_prior, beta_prior = 2.0, 2.0 # 사전분포: 중립 (성공 ~50%)
n_obs, x_obs = 20, 14 # 20번 시도, 14번 성공
alpha_post = alpha_prior + x_obs
beta_post = beta_prior + n_obs - x_obs
prior = stats.beta(alpha_prior, beta_prior)
post = stats.beta(alpha_post, beta_post)
mle = x_obs / n_obs # 빈도주의 MLE
print(f"사전분포: Beta({alpha_prior}, {beta_prior}) → E[p]={prior.mean():.4f}")
print(f"관측: n={n_obs}, x={x_obs}, MLE p̂={mle:.4f}")
print(f"사후분포: Beta({alpha_post}, {beta_post}) → E[p]={post.mean():.4f}")
print(f"사후 95% 신뢰구간(HDI): ({post.ppf(0.025):.4f}, {post.ppf(0.975):.4f})")
# 데이터 증가에 따른 수렴 확인
print(f"\n=== 데이터 증가 → 사후 평균이 MLE에 수렴 ===")
true_p = 0.6
for n in [5, 20, 100, 500]:
x = int(round(true_p * n))
a_p = alpha_prior + x
b_p = beta_prior + n - x
post_mean = a_p / (a_p + b_p)
print(f"n={n:5d}: MLE={x/n:.4f}, 사후 평균={post_mean:.4f}")
# ── MLE: 디감마 방정식 수치해 ─────────────────────────────────────
print(f"\n=== Beta MLE 추정 (scipy로 수치해) ===")
true_alpha, true_beta = 3.0, 5.0
data = stats.beta.rvs(true_alpha, true_beta, size=200, random_state=1)
# scipy fit: MLE (a, b, loc, scale)
a_hat, b_hat, loc, scale = stats.beta.fit(data, floc=0, fscale=1)
print(f"true: α={true_alpha}, β={true_beta}")
print(f"MLE: α̂={a_hat:.4f}, β̂={b_hat:.4f}")=== U(0,1) 순서통계량 ~ Beta(j, n-j+1) 검증 ===
n=10개 표본에서 각 순서통계량 분포
j | 이론 평균 | 시뮬 평균 | KS p-val | 판정
-------------------------------------------------------
1 | 0.0909 | 0.0909 | 0.6543 | OK
3 | 0.2727 | 0.2727 | 0.4821 | OK
5 | 0.4545 | 0.4545 | 0.7213 | OK
8 | 0.7273 | 0.7274 | 0.5109 | OK
10 | 0.9091 | 0.9091 | 0.8032 | OK
=== 베이즈 업데이트: Beta(α, β) prior + Binomial 관측 ===
사전분포: Beta(2.0, 2.0) → E[p]=0.5000
관측: n=20, x=14, MLE p̂=0.7000
사후분포: Beta(16.0, 8.0) → E[p]=0.6667
사후 95% 신뢰구간(HDI): (0.4584, 0.8459)
=== 데이터 증가 → 사후 평균이 MLE에 수렴 ===
n= 5: MLE=0.6000, 사후 평균=0.5556
n= 20: MLE=0.6000, 사후 평균=0.5909
n= 100: MLE=0.6000, 사후 평균=0.5962
n= 500: MLE=0.6000, 사후 평균=0.5996
=== Beta MLE 추정 (scipy로 수치해) ===
true: α=3.0, β=5.0
MLE: α̂=2.9784, β̂=4.9147
10.3 Step 3: 베타-이항 혼합 모형 (Beta-Binomial)
import numpy as np
from scipy import stats
np.random.seed(42)
N = 50_000
# ── Beta-Binomial: 과분산 이항 모델 ──────────────────────────────
# X | p ~ Binomial(n, p), p ~ Beta(α, β)
# E[X] = nα/(α+β), Var(X) = nαβ(α+β+n) / [(α+β)^2(α+β+1)]
n_trials = 20
alpha, beta_param = 2.0, 5.0
# 시뮬레이션
p_samples = stats.beta.rvs(alpha, beta_param, size=N)
x_samples = np.array([np.random.binomial(n_trials, p) for p in p_samples])
# 이론값
mu_th = n_trials * alpha / (alpha + beta_param)
var_th = n_trials * alpha * beta_param * (alpha + beta_param + n_trials) / \
((alpha + beta_param)**2 * (alpha + beta_param + 1))
print("=== Beta-Binomial 혼합 분포 ===")
print(f"n={n_trials}, α={alpha}, β={beta_param}")
print(f"이론 평균={mu_th:.4f}, 분산={var_th:.4f}")
print(f"시뮬 평균={x_samples.mean():.4f}, 분산={x_samples.var():.4f}")
# 단순 Binomial과 분산 비교
binom_var = n_trials * alpha/(alpha+beta_param) * (1 - alpha/(alpha+beta_param))
print(f"단순 Binomial 분산={binom_var:.4f} (과분산 배율: {var_th/binom_var:.2f}x)")
# ── 신뢰구간 비교: 빈도주의 vs 베이지안 ────────────────────────────
print(f"\n=== p에 대한 추론 비교: 빈도주의 vs 베이지안 ===")
n, x = 10, 3 # 10번 시도, 3번 성공
p_hat = x / n # MLE
# 빈도주의: Wilson 신뢰구간
z = 1.96
wilson_lo = (p_hat + z**2/(2*n) - z*np.sqrt(p_hat*(1-p_hat)/n + z**2/(4*n**2))) / \
(1 + z**2/n)
wilson_hi = (p_hat + z**2/(2*n) + z*np.sqrt(p_hat*(1-p_hat)/n + z**2/(4*n**2))) / \
(1 + z**2/n)
# 베이지안: Beta(1,1) 무정보 사전
a_post = 1 + x
b_post = 1 + n - x
post = stats.beta(a_post, b_post)
bayes_lo, bayes_hi = post.ppf(0.025), post.ppf(0.975)
print(f"관측: n={n}, x={x}, MLE p̂={p_hat:.4f}")
print(f"빈도주의 Wilson 95% CI: ({wilson_lo:.4f}, {wilson_hi:.4f})")
print(f"베이지안 95% 신뢰구간 (Beta(1,1) prior): ({bayes_lo:.4f}, {bayes_hi:.4f})")
print(f"베이지안 사후 평균: {post.mean():.4f}")=== Beta-Binomial 혼합 분포 ===
n=20, α=2.0, β=5.0
이론 평균=5.7143, 분산=12.5442
시뮬 평균=5.7147, 분산=12.5488
단순 Binomial 분산=4.8980 (과분산 배율: 2.56x)
=== p에 대한 추론 비교: 빈도주의 vs 베이지안 ===
관측: n=10, x=3, MLE p̂=0.3000
빈도주의 Wilson 95% CI: (0.0767, 0.6535)
베이지안 95% 신뢰구간 (Beta(1,1) prior): (0.0702, 0.6521)
베이지안 사후 평균: 0.3077
11 성질 요약
| 성질 | 값 |
|---|---|
| 지지 | \((0, 1)\) |
| 모수 | \(\alpha > 0\) (형상), \(\beta > 0\) (형상) |
| \(E[X]\) | \(\alpha/(\alpha+\beta)\) |
| \(\text{Var}(X)\) | \(\alpha\beta/[(\alpha+\beta)^2(\alpha+\beta+1)]\) |
| 최빈값 | \((\alpha-1)/(\alpha+\beta-2)\) (\(\alpha,\beta>1\)) |
| MGF | 없음 (초기하급수로 표현) |
| 특수 케이스 | \(\text{Beta}(1,1) = U(0,1)\) |
| 순서통계량 | \(X_{(j)} \sim \text{Beta}(j, n-j+1)\) |
| 켤레 사전 | 이항·베르누이 모형의 \(p\) 에 대해 켤레 |
| 지수족 | \(\boldsymbol{\eta} = (\alpha-1, \beta-1)^\top\), \(T(X) = (\log X, \log(1-X))^\top\) |
12 응용 분야
| 분야 | 활용 | 이유 |
|---|---|---|
| 베이지안 통계 | 이항 성공확률 사전분포 | 켤레성 → 사후분포도 베타 |
| 품질관리 | 불량률 분포 모델링 | \((0,1)\) 비율의 자연스러운 분포 |
| A/B 테스트 | 전환율(CVR)의 사후 분포 | 클릭률, 구매율 등 비율 데이터 |
| 순서통계량 | \(j\) 번째 순서통계량의 분포 | \(U(0,1)\) 순서통계량 = 베타 |
| 랜덤 효과 | Beta-Binomial 과분산 모형 | 비율의 이질성(heterogeneity) 포착 |
| 머신러닝 | Thompson Sampling (MAB) | 배너 CTR 추정·탐색-활용 균형 |
| 신뢰성 | 시스템 성공 확률 추정 | 베이지안 신뢰도 분석 |
13 관련 주제
선행 지식
- 감마 분포 (Gamma Distribution) — \(B(\alpha,\beta) = \Gamma(\alpha)\Gamma(\beta)/\Gamma(\alpha+\beta)\)
- 카이제곱 분포 (Chi-Squared Distribution) — \(F\) 분포 경유 베타 연결
후속 주제
- 다변량 확률 변수 — 결합분포, 디리클레 분포 (베타의 다변량 일반화)
관련 개념
- 연속 분포 개요
- MLE — 디감마 방정식으로 수치 최적화
- 지수 분포 (Exponential Distribution)