ベータ分布とは
連続確率分布の一つ。 ある試行を何度か行った時、成功数 $\alpha$ と失敗数 $\beta$(ただし、$\alpha, \beta \gt 0$)が分かっている現象の成功率 $p$ の分布を表す。
確率密度関数は以下の式で表される。
\[\begin{eqnarray} f_{\alpha, \beta} (p) &=& \cfrac{1}{B(\alpha, \beta)} p^{\alpha-1} (1-p)^{\beta-1} \\ B(\alpha, \beta) &=& \int_{0}^{1} x^{\alpha-1} (1-x)^{\beta-1} dx \end{eqnarray}\]$B(\alpha, \beta)$ は規格化のための定数。
確率密度関数の導出
ToDo
ベータ分布の期待値・分散
準備
一般に、$m, n$ を自然数とすると、部分積分を用いて
\[\begin{eqnarray} \int_{0}^{1} x^m (1-x)^n dx &=& \left[ \cfrac{1}{m+1} x^{m+1} (1-x)^n \right]_0^1 - \left( - \cfrac{n}{m+1} \int_{0}^{1} x^{m+1} (1-x)^{n-1} dx \right) \\ &=& \cfrac{n}{m+1} \int_{0}^{1} x^{m+1} (1-x)^{n-1} dx \\ &=& \cfrac{n}{m+1} \left( \left[ \cfrac{1}{m+2} x^{m+2} (1-x)^{n-1} \right]_0^1 - \left( - \cfrac{n-1}{m+2} \int_{0}^{1} x^{m+2} (1-x)^{n-2} dx \right) \right) \\ &=& \cfrac{n}{m+1} \cfrac{n-1}{m+2} \int_{0}^{1} x^{m+2} (1-x)^{n-2} dx \\ &=& \cdots \\ &=& \cfrac{n}{m+1} \cfrac{n-1}{m+2} \cdots \cfrac{1}{m+n} \int_{0}^{1} x^{m+n} (1-x)^{0} dx \\ &=& \cfrac{m!n!}{(m+n)!} \left[ \cfrac{1}{m+n+1} x^{m+n+1} \right]_0^1 \\ &=& \cfrac{m!n!}{(m+n+1)!} \end{eqnarray}\]よって、
\[\begin{eqnarray} B(\alpha, \beta) &=& \int_{0}^{1} x^{\alpha-1} (1-x)^{\beta-1} dx \\ &=& \cfrac{(\alpha-1)!(\beta-1)!}{((\alpha-1)+(\beta-1)+1)!} \\ &=& \cfrac{(\alpha-1)!(\beta-1)!}{(\alpha+\beta-1)!} \end{eqnarray}\]期待値
\[\begin{eqnarray} E(p) &=& \int_{0}^{1} p \cfrac{1}{B(\alpha, \beta)} p^{\alpha-1} (1-p)^{\beta-1} dp \\ &=& \cfrac{1}{B(\alpha, \beta)} \int_{0}^{1} p^{\alpha} (1-p)^{\beta-1} dp \\ &=& \cfrac{(\alpha+\beta-1)!}{(\alpha-1)!(\beta-1)!} \cfrac{\alpha ! (\beta-1)!}{(\alpha+(\beta-1)+1)!} \\ &=& \cfrac{\alpha}{\alpha + \beta} \end{eqnarray}\]分散
\[\begin{eqnarray} E(p^2) &=& \int_{0}^{1} p^2 \cfrac{1}{B(\alpha, \beta)} p^{\alpha-1} (1-p)^{\beta-1} dp \\ &=& \cfrac{1}{B(\alpha, \beta)} \int_{0}^{1} p^{\alpha+1} (1-p)^{\beta-1} dp \\ &=& \cfrac{(\alpha+\beta-1)!}{(\alpha-1)!(\beta-1)!} \cfrac{(\alpha+1) ! (\beta-1)!}{((\alpha+1)+(\beta-1)+1)!} \\ &=& \cfrac{(\alpha+1)\alpha}{(\alpha+\beta+1)(\alpha+\beta)} \end{eqnarray}\]よって
\[\begin{eqnarray} V(p) &=& E(p^2) - E(p)^2 \\ &=& \cfrac{(\alpha+1)\alpha}{(\alpha+\beta+1)(\alpha+\beta)} - \cfrac{\alpha^2}{(\alpha + \beta)^2} \\ &=& \cfrac{\alpha \beta}{(\alpha+\beta+1)(\alpha+\beta)^2} \end{eqnarray}\]ベータ分布の特徴
- 「成功数:失敗数」の比が同じであっても、全試行回数が大きくなるほど、狭い範囲に集中して分布
- → 試行回数が多いほど、確率の見積もり精度が高まる
(描画に使った Python コード)
import numpy as np
import math
from matplotlib import pyplot as plt
def ln_factorial(n):
"""階乗の log を計算するための補助関数"""
ret = 0
for i in range(1, n+1):
ret += np.log(i)
return ret
def calc_beta(p, a, b):
"""
ベータ分布関数の計算
計算中のオーバーフローを防ぐため、先に対数を取って計算してから指数を取る
"""
ret = np.zeros(p.shape)
for i in range(len(p)):
if 0 < p[i] < 1:
log_beta = (a-1) * np.log(p[i]) + (b-1) * np.log(1-p[i]) + ln_factorial(a+b-1) - ln_factorial(a-1) - ln_factorial(b-1)
ret[i] = np.exp(log_beta)
return ret
def plot_beta(a, b):
plt.title(r'$\alpha = {}, \beta = {}$'.format(a, b))
# ベータ関数の描画
p = np.linspace(0, 1, 1000)
#beta = p**(a-1) * (1-p)**(b-1) / B
beta = calc_beta(p, a, b)
plt.plot(p, beta)
plt.figure(figsize=(10, 6))
plt.subplots_adjust(wspace=0.4, hspace=0.6)
cnt_fig = 1
for a_seed, b_seed in [(3, 1), (2, 2), (1, 3)]:
for i in range(4):
plt.subplot(3, 4, cnt_fig)
plot_beta(a_seed * 5**i, b_seed * 5**i)
cnt_fig += 1
plt.show()