ベータ分布とは?確率密度・期待値・ベイズ更新を図解でわかりやすく解説

「このWebサイトの新デザインは、旧デザインより本当にクリック率が高いのか?」「あの選挙候補者の支持率は、本当に50%を超えているのか?」「コインを10回投げて7回表が出たが、このコインは歪んでいるのか?」——こうした疑問は、すべて「0から1の間の比率(確率)」を、不確実性を込めて推定する問題です。

このような「成功確率」「比率」「割合」を扱うときに、最も自然で強力な確率分布が ベータ分布(Beta distribution) です。β分布とも書き、英語では Beta distribution と表記します。これら3つは同じ分布を指す呼び方の違いにすぎません。

ベータ分布とは何か、一言で答えるなら「$[0,1]$ 区間に値を取る確率変数の連続分布で、2つの正のパラメータ $\alpha, \beta$ で形状を自在に調整できるもの」です。一様分布・釣り鐘型・左右非対称・U字型といった多様な形を、たったこの2つのパラメータで表現できます。特に「ある事象の成功確率そのもの」を不確実な量として扱いたいとき——「コインが表を出す確率はおよそどのくらいか?」という問いに確率分布で答えたいとき——に自然な選択肢となります。ベータ分布は、$\mu \in [0,1]$ の連続変数に対して定義され、2つの形状パラメータ $\alpha, \beta$ を持ちます。形状の自由度が非常に高く、一様分布から鋭いピーク、左右非対称、U字型まで、たった2つのパラメータで驚くほど多彩な分布を表現できます。

ベータ分布が他の分布と一線を画すもう一つの理由は、ベルヌーイ分布・二項分布の共役事前分布であるという点です。これにより、観測データから事後分布を計算する「ベイズ更新」が、ベータ分布の パラメータの足し算 という驚くほど簡潔な式で書けます。この性質は、ベイズ的A/Bテスト、強化学習の多腕バンディット(トムソンサンプリング)、ベイズロジスティック回帰、トピックモデル(LDA)の構成要素など、機械学習と統計の現代的応用で広範に活用されています。

本記事の内容

  • ベータ分布の直感的なイメージと確率密度関数の定義
  • ベータ関数 $B(\alpha,\beta)$ とガンマ関数の関係、正規化定数の導出
  • 期待値・分散・モード・歪度の導出(省略なしのフル計算)
  • ベルヌーイ/二項分布の共役事前分布としての役割とベイズ更新則
  • ベイズA/Bテストの理論と Python 実装
  • scipy.stats.beta による形状可視化と、ベイズ更新の数値シミュレーション
  • ディリクレ分布・ベータ二項分布など、ベータ分布の自然な拡張

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

これらの記事の知識を仮定しますが、必要な式は本記事内でも適宜復習します。

ベータ分布の直感 — 「確率の確率」を表す分布

比率を不確実性付きで表す

ベータ分布を理解する最良の方法は、その典型的な使い方を先にイメージすることです。たとえば、あるコインを10回投げて7回表が出たとしましょう。このコインの「表が出る確率 $\mu$」を1つの数で答えるなら、素朴には $\mu = 7/10 = 0.7$ と言いたくなります。しかし、たった10回の試行で $\mu$ を断定するのは無理があります。本当の $\mu$ は0.6 かもしれないし、0.8 かもしれません。

このような「$\mu$ がどのあたりに、どのくらい確からしくあるか」を分布で表したものが、まさにベータ分布です。横軸に $\mu \in [0,1]$ を取り、縦軸にその密度を取ったときに、$\mu = 0.7$ のあたりが最も高く、両端 $0, 1$ に近づくほど低くなる山形の分布——これがベータ分布の典型的な姿です。

このように、ベータ分布は「確率そのものの確率」あるいは「比率に対する信念」を表す分布として使われます。観測データが少ないうちは山がなだらかで(不確実性が大きく)、データが増えるにつれて山が鋭くなる(確信が深まる)——この振る舞いが、後で見るベイズ更新の式から自然に導かれます。

ベータ分布の形状ギャラリー — (α, β) の組合せで一様・対称・非対称・U字型まで多彩な形

パラメータ $\alpha, \beta$ の意味

ベータ分布のパラメータ $\alpha, \beta$ には、後の共役性の議論を先取りすれば、次のような直感的な解釈ができます。

  • $\alpha – 1$ は「成功した(あるいは表が出た)疑似的な観測回数」
  • $\beta – 1$ は「失敗した(あるいは裏が出た)疑似的な観測回数」

たとえば $\mathrm{Beta}(\alpha = 8, \beta = 4)$ は、「7回成功・3回失敗」の観測の後に残る信念を表します(あとで $\alpha = a + 1$、$\beta = b + 1$ の形で出てきます)。$\alpha, \beta$ が大きくなるほど「観測量が多い」状態に対応し、分布のピークが鋭くなります。これはまさに、観測が増えるとともに確率が研ぎ澄まされていくベイズ的な学習過程の数式化です。

形状の直感がついたところで、次は厳密な定義式を見ていきましょう。

確率密度関数の定義とベータ関数

確率密度関数

ベータ分布の確率密度関数 (PDF) は、変数 $\mu \in [0,1]$、形状パラメータ $\alpha > 0$、$\beta > 0$ に対して次で定義されます。

$$ \begin{equation} \mathrm{Beta}(\mu \mid \alpha, \beta) = \frac{1}{B(\alpha, \beta)}\, \mu^{\alpha – 1}\,(1 – \mu)^{\beta – 1}, \quad 0 \leq \mu \leq 1 \end{equation} $$

ここで $B(\alpha, \beta)$ は ベータ関数 と呼ばれる正規化定数で、

$$ \begin{equation} B(\alpha, \beta) = \int_0^1 \mu^{\alpha – 1} (1 – \mu)^{\beta – 1}\, d\mu = \frac{\Gamma(\alpha)\, \Gamma(\beta)}{\Gamma(\alpha + \beta)} \end{equation} $$

と書けます。$\Gamma$ はガンマ関数で、整数 $n$ に対し $\Gamma(n) = (n-1)!$ を満たし、一般に $\Gamma(x+1) = x\, \Gamma(x)$ という重要な漸化式を持ちます。

この定義式 (1) を眺めると、$\mu^{\alpha – 1}(1-\mu)^{\beta-1}$ という形が二項分布の確率質量関数

$$ \mathrm{Bin}(k \mid n, \mu) = \binom{n}{k} \mu^k (1 – \mu)^{n-k} $$

によく似ていることに気づきます。実際、後で見るようにベータ分布はこの「$\mu$ の関数としての二項分布」を $\mu$ について正規化したものに他なりません。この対応がベルヌーイ/二項分布との共役性の根拠になります。

正規化定数の導出

定義の妥当性を確認するため、$B(\alpha, \beta) = \Gamma(\alpha)\Gamma(\beta)/\Gamma(\alpha+\beta)$ を示しましょう。出発点はガンマ関数の定義

$$ \Gamma(\alpha) = \int_0^\infty t^{\alpha – 1} e^{-t}\, dt $$

です。2つのガンマ関数の積を考えます。

$$ \Gamma(\alpha)\,\Gamma(\beta) = \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 = u + v$、$s = u/(u+v)$ です。ヤコビアンは

$$ \left| \frac{\partial(u,v)}{\partial(t,s)} \right| = \det \begin{pmatrix} s & t \\ 1-s & -t \end{pmatrix} = -st – t(1-s) = -t $$

の絶対値で $t$ となります。被積分関数は

$$ u^{\alpha-1} v^{\beta-1} e^{-(u+v)} = (ts)^{\alpha-1}\bigl(t(1-s)\bigr)^{\beta-1} e^{-t} = t^{\alpha + \beta – 2} s^{\alpha-1}(1-s)^{\beta-1} e^{-t} $$

となるので、これにヤコビアン $t$ を掛けて積分すると、

$$ \begin{aligned} \Gamma(\alpha)\Gamma(\beta) &= \int_0^\infty \int_0^1 t^{\alpha + \beta – 1} s^{\alpha-1}(1-s)^{\beta-1} e^{-t}\, ds\, dt \\ &= \left( \int_0^\infty t^{\alpha + \beta – 1} e^{-t}\, dt \right) \left( \int_0^1 s^{\alpha – 1}(1 – s)^{\beta – 1}\, ds \right) \\ &= \Gamma(\alpha + \beta) \cdot B(\alpha, \beta) \end{aligned} $$

最初の積分はガンマ関数 $\Gamma(\alpha+\beta)$ の定義そのもの、2つ目の積分はベータ関数 $B(\alpha, \beta)$ の定義です。両辺を $\Gamma(\alpha+\beta)$ で割れば、目的の関係

$$ B(\alpha, \beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)} $$

が得られます。これでベータ分布の正規化定数が、ガンマ関数の比という非常に簡潔な形で書けることが分かりました。

よく使う等式

導出ではガンマ関数の漸化式 $\Gamma(x+1) = x\Gamma(x)$ を頻繁に使います。ここでまとめて準備しておくと後で便利です。

$$ \begin{aligned} \frac{B(\alpha + 1, \beta)}{B(\alpha, \beta)} &= \frac{\Gamma(\alpha + 1)\Gamma(\beta)}{\Gamma(\alpha + \beta + 1)} \cdot \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)} = \frac{\alpha}{\alpha + \beta} \\ \frac{B(\alpha + 2, \beta)}{B(\alpha, \beta)} &= \frac{\alpha(\alpha+1)}{(\alpha+\beta)(\alpha+\beta+1)} \end{aligned} $$

この2つの恒等式は、次セクションで期待値と分散を計算するときの主役になります。

形の定義が固まったところで、次は分布の「重心」と「広がり」を表す統計量——期待値・分散・モード・歪度——を計算しましょう。

期待値・分散・モード・歪度

期待値

ベータ分布の期待値は

$$ \begin{equation} E[\mu] = \frac{\alpha}{\alpha + \beta} \end{equation} $$

と非常に簡潔な形になります。この式は「成功 $\alpha-1$ 回・失敗 $\beta-1$ 回」と解釈すれば「成功率の素朴な見積もり」とほぼ一致し、直感に合います。導出は次のとおりです。

期待値の定義に PDF を代入し、まず $\mu \cdot \mu^{\alpha-1} = \mu^{\alpha}$ とまとめます。

$$ \begin{aligned} E[\mu] &= \int_0^1 \mu \cdot \frac{1}{B(\alpha, \beta)} \mu^{\alpha-1}(1-\mu)^{\beta-1}\, d\mu \\ &= \frac{1}{B(\alpha, \beta)} \int_0^1 \mu^{\alpha}(1-\mu)^{\beta-1}\, d\mu \end{aligned} $$

ここで残った積分は、ベータ関数の定義から $B(\alpha+1, \beta)$ そのものです。

$$ E[\mu] = \frac{B(\alpha + 1, \beta)}{B(\alpha, \beta)} $$

先ほど準備した恒等式 $B(\alpha+1, \beta)/B(\alpha, \beta) = \alpha/(\alpha + \beta)$ を使えば、

$$ E[\mu] = \frac{\alpha}{\alpha + \beta} $$

が直ちに得られます。

二次モーメントから分散へ

分散を求めるには、まず二次モーメント $E[\mu^2]$ を計算し、$V[\mu] = E[\mu^2] – E[\mu]^2$ を使います。期待値と同じ要領で、

$$ \begin{aligned} E[\mu^2] &= \int_0^1 \mu^2 \cdot \frac{1}{B(\alpha, \beta)} \mu^{\alpha – 1}(1 – \mu)^{\beta – 1}\, d\mu \\ &= \frac{1}{B(\alpha, \beta)} \int_0^1 \mu^{\alpha + 1}(1-\mu)^{\beta – 1}\, d\mu \\ &= \frac{B(\alpha + 2, \beta)}{B(\alpha, \beta)} = \frac{\alpha(\alpha + 1)}{(\alpha + \beta)(\alpha + \beta + 1)} \end{aligned} $$

最後の等号で先ほどの恒等式を使いました。

これを使って分散を計算します。共通分母 $(\alpha+\beta)^2(\alpha+\beta+1)$ にそろえると、

$$ \begin{aligned} V[\mu] &= E[\mu^2] – E[\mu]^2 = \frac{\alpha(\alpha+1)}{(\alpha+\beta)(\alpha+\beta+1)} – \left(\frac{\alpha}{\alpha+\beta}\right)^2 \\ &= \frac{\alpha(\alpha+1)(\alpha+\beta) – \alpha^2(\alpha+\beta+1)}{(\alpha+\beta)^2(\alpha+\beta+1)} \end{aligned} $$

分子を展開して整理します。$\alpha(\alpha+1)(\alpha+\beta) = \alpha^3 + \alpha^2\beta + \alpha^2 + \alpha\beta$、$\alpha^2(\alpha+\beta+1) = \alpha^3 + \alpha^2\beta + \alpha^2$ なので、差は $\alpha\beta$ になります。したがって

$$ \begin{equation} V[\mu] = \frac{\alpha \beta}{(\alpha + \beta)^2 (\alpha + \beta + 1)} \end{equation} $$

を得ます。

この式から重要な性質が読み取れます。$\alpha + \beta$ を「観測の総数」と見立てると、分母には $(\alpha + \beta)^2$ と $(\alpha + \beta + 1)$ という因子があり、観測が増えるほど分散が $1/(\alpha+\beta)$ のオーダーで急速に減少することがわかります。これがベイズ更新で「データが増えるほど信念が鋭くなる」ことの数学的根拠です。

期待値・分散・モードを (α, β) 平面で俯瞰したヒートマップ

モード(最頻値)

連続分布で密度が最大になる点をモードと呼びます。ベータ分布の対数 PDF を $\mu$ で微分すると、

$$ \frac{d}{d\mu} \log \mathrm{Beta}(\mu \mid \alpha, \beta) = \frac{\alpha – 1}{\mu} – \frac{\beta – 1}{1 – \mu} $$

これを 0 にして解くと、$\alpha > 1$ かつ $\beta > 1$ の場合のモードは

$$ \begin{equation} \mu_{\mathrm{mode}} = \frac{\alpha – 1}{\alpha + \beta – 2} \end{equation} $$

となります。期待値 $\alpha/(\alpha+\beta)$ とは似ているけれど微妙に違います。両者が一致するのは $\alpha = \beta$(対称分布)の特別な場合だけです。一般には、$\alpha > \beta$ なら期待値はモードより少し大きくなり、分布が右側に少し裾を引きます(つまり負の歪度を持ちます)。

なお、$\alpha \leq 1$ あるいは $\beta \leq 1$ の場合、密度は端点 $\mu = 0$ や $\mu = 1$ に発散したり、片端に集中したりするため、内部にモードが存在しないこともあります。たとえば $\mathrm{Beta}(0.5, 0.5)$ はU字型で、端点が「最頻」になります。

歪度

対称性からのずれを表す歪度 (skewness) は、ベータ分布では閉形式で書けます。

$$ \mathrm{Skew}[\mu] = \frac{2(\beta – \alpha)\sqrt{\alpha + \beta + 1}}{(\alpha + \beta + 2)\sqrt{\alpha \beta}} $$

$\alpha = \beta$ なら 0(左右対称)、$\beta > \alpha$ なら正(右に裾)、$\alpha > \beta$ なら負(左に裾)です。期待値や分散だけ覚えれば十分なことも多いですが、形状を議論するときに歪度の符号が直感的な助けになります。

代表的な統計量の正体が見えたところで、次はパラメータが形状にどう影響するかを整理し、それからベータ分布が「ベイズ統計の主役」と言われる本当の理由——ベルヌーイ/二項分布の共役事前分布である、という性質を見ていきましょう。

α, β によるグラフの形状ギャラリー

ベータ分布は「形状の多様さ」が最大の特徴のひとつです。$(\alpha, \beta)$ の組み合わせによって、グラフがどのような形を取るかを分類して理解しておくと、実際に分布を選択・設定するときに迷いがなくなります。

一様分布: $\alpha = \beta = 1$

$\mathrm{Beta}(1, 1)$ は定数 $p(\mu) = 1$、すなわち $[0,1]$ 上の一様分布そのものです。「成功確率について何も知らない」という完全な無情報状態を表します。ベイズ更新の出発点としてよく用いられる「無情報事前分布」です。

対称な単峰形(釣り鐘型): $\alpha = \beta > 1$

$\alpha = \beta$ で両者が $1$ より大きいとき、分布は $\mu = 0.5$ を中心に左右対称な山型になります。$\alpha = \beta = 2$ ではなだらかな山、$\alpha = \beta = 5$ や $\alpha = \beta = 10$ と大きくするほどピークが鋭く、正規分布に近い形に集束します。「成功と失敗が同程度起きると見込んでいるが、確信の強さは違う」という状況に対応します。

非対称な単峰形: $\alpha \neq \beta$(どちらも 1 より大)

$\alpha > \beta$ のとき山は右($\mu = 1$ 側)にずれ、左に裾が伸びます(負の歪度)。$\alpha < \beta$ のとき山は左($\mu = 0$ 側)にずれ、右に裾が伸びます(正の歪度)。期待値は $\alpha/(\alpha+\beta)$ で決まるため、$\alpha = 5, \beta = 2$ なら期待値は $5/7 \approx 0.71$ と右寄りです。モードは $(\alpha-1)/(\alpha+\beta-2) = 4/5 = 0.8$ と期待値よりさらに右にずれており、非対称の効果が数値に現れます。

端点への集中(単調増加・単調減少): 片方が 1 以下

$\alpha < 1, \beta \geq 1$ のとき、密度は $\mu \to 0$ で発散し、$\mu = 0$ 側が最も「高い」単調減少の形になります。逆に $\alpha \geq 1, \beta < 1$ のとき、密度は $\mu \to 1$ で発散し、単調増加になります。$\alpha = 0.5, \beta = 2$ は「成功確率が低い側に強く集中している」状態を表します。

U字型: $\alpha < 1$ かつ $\beta < 1$

$\alpha = \beta = 0.5$(ジェフリーズ事前)の典型例で、グラフが $U$ 字型になります。密度が $\mu = 0$ と $\mu = 1$ の両端で発散し、中心が最も低い特異な形です。これは「0か1かの二択に近く、中間値はあまり起きない」という信念を表します。ジェフリーズ事前としてパラメータ変換に対して不変な無情報事前を与える点で重要です。

パラメータと形状の対応まとめ

$\alpha$ $\beta$ 形状 典型例
$= 1$ $= 1$ 一様分布(フラット) 完全無情報事前
$> 1$ $= \alpha$ 対称単峰・$\mu=0.5$ 中心 成功/失敗が同程度の対称な信念
$> 1$ $> 1$、$\alpha \neq \beta$ 非対称単峰 期待値 $\alpha/(\alpha+\beta)$ にピーク
$< 1$ $< 1$ U字型・両端集中 ジェフリーズ事前、0か1かの状態
$< 1$ $\geq 1$ 単調減少($\mu=0$ 側に集中) 成功確率が低い事前知識
$\geq 1$ $< 1$ 単調増加($\mu=1$ 側に集中) 成功確率が高い事前知識

この分類を念頭に置くと、ベイズモデリングで事前分布を選ぶときに「どの $(\alpha, \beta)$ が自分の事前知識に合っているか」を直感的に選べるようになります。$\alpha + \beta$ が大きいほど「事前知識の確信度が高い(分布のピークが鋭い)」、$\alpha/(\alpha+\beta)$ が「事前の期待値」——この2つの感覚が基本です。

ガンマ分布との関係

ベータ関数とガンマ関数の結びつき

ベータ分布の正規化定数であるベータ関数は、ガンマ関数との間に

$$ B(\alpha, \beta) = \frac{\Gamma(\alpha)\,\Gamma(\beta)}{\Gamma(\alpha + \beta)} $$

という関係を持ちます(これは前節の正規化定数の導出で示したとおりです)。整数の場合は $\Gamma(n) = (n-1)!$ が使えるので、たとえば $B(3, 2) = \Gamma(3)\Gamma(2)/\Gamma(5) = 2! \cdot 1! / 4! = 2/24 = 1/12$ と具体的に計算できます。

このベータ–ガンマ関係は単なる公式の言い換えにとどまりません。ガンマ分布と独立性から、ベータ分布を「生成」できるという、より深い構造的な関係があります。

独立なガンマ変量からベータ分布を生成する

次の定理が成り立ちます。

命題: $X \sim \mathrm{Gamma}(\alpha, 1)$、$Y \sim \mathrm{Gamma}(\beta, 1)$ が独立ならば、 $$Z = \frac{X}{X + Y} \sim \mathrm{Beta}(\alpha, \beta)$$

これを示しましょう。$(X, Y)$ の同時密度は独立なガンマ分布の積で

$$ f_{X,Y}(x, y) = \frac{x^{\alpha-1} e^{-x}}{\Gamma(\alpha)} \cdot \frac{y^{\beta-1} e^{-y}}{\Gamma(\beta)}, \quad x > 0,\, y > 0 $$

と書けます。ここで変数変換 $Z = X/(X+Y)$、$W = X + Y$ を導入します。逆変換は $X = ZW$、$Y = (1-Z)W$ で、ヤコビアンは

$$ \left|\frac{\partial(X, Y)}{\partial(Z, W)}\right| = \det\begin{pmatrix} W & Z \\ -W & 1-Z \end{pmatrix} = W(1-Z) + ZW = W $$

つまりヤコビアンは $W$ です。同時密度を $(Z, W)$ の座標で書き直すと、

$$ f_{Z,W}(z, w) = \frac{(zw)^{\alpha-1} e^{-zw}}{\Gamma(\alpha)} \cdot \frac{((1-z)w)^{\beta-1} e^{-(1-z)w}}{\Gamma(\beta)} \cdot w $$

$e^{-zw} \cdot e^{-(1-z)w} = e^{-w}$ に注意してまとめると、

$$ f_{Z,W}(z, w) = \frac{z^{\alpha-1}(1-z)^{\beta-1}}{\Gamma(\alpha)\Gamma(\beta)} \cdot w^{\alpha+\beta-1} e^{-w} $$

これは $Z$ に依存する部分と $W$ に依存する部分に完全に因数分解されています。$W$ の部分を $w$ で積分すると $\Gamma(\alpha+\beta)$ が出るので、$Z$ の周辺密度は

$$ f_Z(z) = \frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)} z^{\alpha-1}(1-z)^{\beta-1} = \frac{1}{B(\alpha,\beta)} z^{\alpha-1}(1-z)^{\beta-1} $$

となり、これはまさに $\mathrm{Beta}(\alpha, \beta)$ の確率密度関数です。また因数分解から $Z$ と $W$ が独立であることも同時にわかります。$W = X + Y \sim \mathrm{Gamma}(\alpha+\beta, 1)$ であることも確認できます。

この関係は実用的にも重要です。ベータ分布に従う乱数を生成したいとき、直接の方法(棄却サンプリングなど)ではなく、2つのガンマ乱数を足してから割るという手順で得られます。

import numpy as np

rng = np.random.default_rng(0)

alpha, beta = 3.0, 5.0
n = 100_000

# 方法1: 直接 numpy のベータ分布から
z_direct = rng.beta(alpha, beta, size=n)

# 方法2: ガンマ変量の比から生成
x = rng.gamma(alpha, 1.0, size=n)  # Gamma(alpha, 1)
y = rng.gamma(beta, 1.0, size=n)   # Gamma(beta, 1)
z_from_gamma = x / (x + y)

print(f"直接生成: 平均={z_direct.mean():.5f}, 分散={z_direct.var():.6f}")
print(f"ガンマ比: 平均={z_from_gamma.mean():.5f}, 分散={z_from_gamma.var():.6f}")

theo_mean = alpha / (alpha + beta)
theo_var = alpha * beta / ((alpha + beta)**2 * (alpha + beta + 1))
print(f"理論値:   平均={theo_mean:.5f}, 分散={theo_var:.6f}")

このコードを実行すると、2種類の生成方法がどちらも理論値(平均 $\approx 0.375$、分散 $\approx 0.0293$)と小数点以下5桁で一致することが確認できます。2つのガンマ乱数の比という操作が、確かにベータ分布を生み出していることが数値レベルで裏付けられます。ガンマ分布はガンマ関数の定義から直接サンプリング可能なため、この生成的関係はベータ分布の数値実装の基礎にもなっています。

ガンマ分布とベータ分布の系統

この生成的関係から、ガンマ分布とベータ分布がいかに密接につながっているかが分かります。ガンマ分布 $\mathrm{Gamma}(\alpha, \theta)$ は「正の実数値をとる連続分布で、形状 $\alpha$ と尺度 $\theta$ を持つ」のに対し、ベータ分布はその「比」から生まれる $[0,1]$ の分布です。どちらもガンマ関数を正規化定数に持ち、整数 $\alpha, \beta$ の場合は「$\alpha$ 個の独立指数分布の和がガンマ分布になる」という系統のもとで統一的に理解できます。

ディリクレ分布(ベータ分布の多変量版)もこの関係の延長です。$K$ 個の独立な $\mathrm{Gamma}(\alpha_k, 1)$ 変量 $X_1, \dots, X_K$ について、$(X_1/(X_1+\dots+X_K), \dots, X_K/(X_1+\dots+X_K)) \sim \mathrm{Dirichlet}(\alpha_1, \dots, \alpha_K)$ が成り立ちます。$K=2$ に限定すると $\mathrm{Beta}(\alpha_1, \alpha_2)$ になるわけです。

共役事前分布としての役割

ベイズの定理の復習

ベルヌーイ試行(コイン投げ)の成功確率 $\mu$ をベイズ的に推定する状況を考えます。$N$ 回の独立試行で、成功(表)が $m$ 回、失敗(裏)が $N – m$ 回観測されたとします。観測データを $\mathcal{D}$ と書くと、ベイズの定理は

$$ p(\mu \mid \mathcal{D}) = \frac{p(\mathcal{D} \mid \mu)\, p(\mu)}{p(\mathcal{D})} \propto p(\mathcal{D} \mid \mu)\, p(\mu) $$

と書けます。ここで $p(\mu)$ は 事前分布(観測前の信念)、$p(\mathcal{D} \mid \mu)$ は 尤度 、$p(\mu \mid \mathcal{D})$ は 事後分布(観測後の信念)です。$p(\mathcal{D})$ は $\mu$ によらない規格化定数なので、比例記号 $\propto$ で吸収しました。

尤度の形

各試行は独立な $\mathrm{Bernoulli}(\mu)$ なので、$m$ 個の成功と $N – m$ 個の失敗を生む同時確率は

$$ p(\mathcal{D} \mid \mu) = \mu^m (1 – \mu)^{N – m} $$

です。あるいは、各試行の順番を区別せず成功回数だけ見るなら、二項分布

$$ p(m \mid N, \mu) = \binom{N}{m} \mu^m (1 – \mu)^{N – m} $$

と書いてもよく、$\mu$ の関数としての形は同じです(二項係数は $\mu$ に依らない)。

共役性 — 事前と事後が同じ族になる

事前分布をベータ分布 $\mathrm{Beta}(\mu \mid \alpha, \beta)$ に取ってみましょう。

$$ p(\mu) = \frac{1}{B(\alpha, \beta)} \mu^{\alpha – 1}(1 – \mu)^{\beta – 1} $$

事後分布は尤度と事前の積に比例するので、

$$ \begin{aligned} p(\mu \mid \mathcal{D}) &\propto p(\mathcal{D} \mid \mu)\, p(\mu) \\ &\propto \mu^m (1 – \mu)^{N – m} \cdot \mu^{\alpha – 1}(1 – \mu)^{\beta – 1} \\ &= \mu^{(\alpha + m) – 1}(1 – \mu)^{(\beta + N – m) – 1} \end{aligned} $$

これは 正規化定数を除けばベータ分布の形そのもの です。比例定数を埋めれば、

$$ \begin{equation} p(\mu \mid \mathcal{D}) = \mathrm{Beta}\bigl(\mu \mid \alpha + m,\ \beta + N – m\bigr) \end{equation} $$

という驚くほど美しい結果になります。

これがベータ分布がベルヌーイ/二項分布の 共役事前分布 (conjugate prior) と呼ばれる所以です。「共役」というのは「事前分布の関数族と事後分布の関数族が一致する」という意味であり、ベータ分布の場合は次のベイズ更新則として表現されます。

ベータ × ベルヌーイ/二項 — 共役更新(事前→観測→事後)のフロー図

ベータ-二項共役の概念図 — 尤度を掛けてもベータの形が保存される

$$ \underbrace{\mathrm{Beta}(\alpha, \beta)}_{\text{事前}} \xrightarrow{\text{成功 } m \text{ 回、失敗 } N-m \text{ 回}} \underbrace{\mathrm{Beta}(\alpha + m,\ \beta + N – m)}_{\text{事後}} $$

実装上は、ベイズ更新が パラメータの足し算 だけで完結するため、極めて効率的です。これは新しいデータが1つずつ流れてくるストリーミング設定でも、メモリにデータを保持する必要がなく、$(\alpha, \beta)$ の2つの数字だけで状態を持てます。オンライン学習や多腕バンディットがベータ分布と相性が良いのは、まさにこの理由です。

一様事前 $\mathrm{Beta}(1, 1)$ との対応

特に $\alpha = \beta = 1$ の場合、$\mathrm{Beta}(1, 1) = 1$(区間 $[0,1]$ 上の一様分布)です。この事前を仮定すると、事後は

$$ \mathrm{Beta}(1 + m,\ 1 + N – m) $$

となります。最頻値は $m/N$(最尤推定)と一致するので、一様事前はラプラスが用いた古典的な「無情報事前」になっています。

ベイズの代表的「無情報/弱情報」事前 — Beta(1,1)=uniform、Beta(½,½)=Jeffreys ほか特殊ケース

Beta-Binomial 共役の感覚

直感的には、ベータ分布の $(\alpha, \beta)$ は「事前の擬似観測数 (pseudo-counts)」を表します。$\mathrm{Beta}(2, 2)$ は「成功1回・失敗1回」観測した相当の情報、$\mathrm{Beta}(10, 10)$ は「成功9回・失敗9回」相当——というイメージです。実際のデータ $(m, N-m)$ が来たら、その回数を $(\alpha, \beta)$ にそのまま加える。観測が増えるにつれて事前の影響は薄まり、データに引きずられていく。これがベイズ推定の本質を最もシンプルに体現した式の一つです。

共役性の便利さがわかったところで、次はこれをA/Bテストという実用問題に応用してみましょう。

ベイズA/Bテストの実装

古典的A/Bテストとの違い

Webサイトのデザインを A 版と B 版で試し、「どちらのクリック率が高いか」を判定したいとします。古典的なフリークエンティスト流のA/Bテストでは、両群のサンプルが「同じ確率」だという帰無仮説を立て、p値を計算します。これは慣習として広く使われていますが、いくつかの欠点があります。

  • 結果の解釈が「p値が0.05より小さい」というやや非直感的な形になる
  • サンプルサイズを事前に決めないと「のぞき見」問題(途中で結果を見て中止)が起きる
  • 「B が A より良い確率」を直接答えられない

ベイズA/Bテストは、これらを解決します。各群のクリック率 $\mu_A, \mu_B$ にベータ事前を置き、観測データから事後分布を計算し、

$$ P(\mu_B > \mu_A \mid \mathrm{data}) = \int_0^1 \int_0^{\mu_B} p(\mu_A \mid \mathrm{data})\, p(\mu_B \mid \mathrm{data})\, d\mu_A\, d\mu_B $$

という「B が A より良い確率」を直接計算できます。実装上は、両群の事後ベータ分布からそれぞれ多数サンプリングし、$\mu_B > \mu_A$ となる比率を数えるだけで十分です。

A/Bテスト概念図 — A群とB群の事後ベータ分布を重ねて比較

P(μ_B > μ_A) のモンテカルロ計算 — 事後同時サンプル散布図と差の事後分布

ベイズ更新の具体例

A 群に1000人が訪問し、120人がクリックした($m_A = 120$, $N_A – m_A = 880$)。B 群には1000人が訪問し、150人がクリックした($m_B = 150$, $N_B – m_B = 850$)。一様事前 $\mathrm{Beta}(1, 1)$ から始めると、事後はそれぞれ

$$ \mu_A \sim \mathrm{Beta}(121,\ 881), \quad \mu_B \sim \mathrm{Beta}(151,\ 851) $$

となります。期待値はそれぞれ $121/1002 \approx 0.121$、$151/1002 \approx 0.151$ で、素朴な比率 $0.12$、$0.15$ にラプラス補正がかかった値です。

「B が A より良い確率」は理論的には二重積分ですが、サンプリングで簡単に近似できます。両事後から数万サンプルずつ取り、$\mu_B > \mu_A$ となる割合を数えれば、それがそのまま答えです。実装はこの後の Python 実装セクションで行います。

期待損失 (expected loss)

A/Bテストでビジネス的に答えたい問いは「B を選んだとして、もし A の方が良かった場合にどれだけ損するか?」です。これは 期待損失

$$ \mathrm{Loss}(B) = E\bigl[\max(\mu_A – \mu_B,\ 0)\bigr] $$

で定量化できます。期待損失が事前に決めた閾値(例えば0.001=0.1ポイント)を下回ったら判定を終える、というのが Google のベイズA/Bテストフレームワークの基本戦略です。これも、両事後からサンプリングして $\max(\mu_A – \mu_B, 0)$ の平均を取るだけで計算できます。

理論を実装に落とし込む準備が整いました。Python で具体的に手を動かしてみましょう。

Python実装

形状の可視化

まず、scipy.stats.beta を使って、$(\alpha, \beta)$ を変えたときのベータ分布の形状がどう変わるかを可視化します。形状の多様性を体感するのが目的です。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# (alpha, beta) のセットを用意
params = [
    (0.5, 0.5),  # U字型
    (1.0, 1.0),  # 一様分布
    (2.0, 2.0),  # 対称な山型
    (5.0, 5.0),  # 鋭い対称な山
    (2.0, 5.0),  # 左寄りの山(右に裾)
    (5.0, 2.0),  # 右寄りの山(左に裾)
    (0.5, 2.0),  # 左端へ集中
    (2.0, 0.5),  # 右端へ集中
]

x = np.linspace(0.001, 0.999, 400)
plt.figure(figsize=(10, 6))
for a, b in params:
    y = stats.beta(a, b).pdf(x)
    plt.plot(x, y, lw=2, label=f"Beta(α={a}, β={b})")

plt.xlabel("μ")
plt.ylabel("density  p(μ | α, β)")
plt.title("Beta distribution shapes for various (α, β)")
plt.ylim(0, 4.0)
plt.legend(loc="upper center", fontsize=9, ncol=2)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

このグラフから、ベータ分布の表現力の高さがはっきり読み取れます。$\alpha = \beta = 1$ は完全な一様分布、$\alpha = \beta = 0.5$ は両端が高いU字型、$\alpha = \beta = 5$ は鋭くピーキーな対称分布、$\alpha = 2, \beta = 5$ のように非対称にすると山がずれて裾が長くなる——これら全てが、たった2つのパラメータの調整で連続的につながっています。$\alpha + \beta$ が大きいほど分布が鋭く(不確実性が小さく)なり、$\alpha / (\alpha + \beta)$ が分布の重心(期待値)を決めるという、直感と理論の対応が一目で確認できます。

期待値・分散・モードの数値確認

理論で導いた期待値 $\alpha/(\alpha+\beta)$、分散 $\alpha\beta/[(\alpha+\beta)^2(\alpha+\beta+1)]$、モード $(\alpha-1)/(\alpha+\beta-2)$ が、scipy の組み込み計算と一致するか確かめます。

import numpy as np
from scipy import stats

cases = [(2, 5), (10, 10), (3, 1.5), (50, 30)]
print(f"{'α':>4} {'β':>4} | {'mean(theo)':>12} {'mean(scipy)':>12} | "
      f"{'var(theo)':>12} {'var(scipy)':>12} | {'mode(theo)':>12}")
print("-" * 90)
for a, b in cases:
    mean_t = a / (a + b)
    var_t = a * b / ((a + b) ** 2 * (a + b + 1))
    mode_t = (a - 1) / (a + b - 2) if a > 1 and b > 1 else float("nan")
    mean_s, var_s = stats.beta(a, b).stats(moments="mv")
    print(f"{a:>4} {b:>4} | {mean_t:>12.6f} {float(mean_s):>12.6f} | "
          f"{var_t:>12.6f} {float(var_s):>12.6f} | {mode_t:>12.6f}")

このコードは数組の $(\alpha, \beta)$ について、解析式と scipy の数値を並べて表示します。実行すると、どの行も理論値と scipy の値が小数点以下数桁まで完全に一致することが確認できます。これは「自分で導出した式が、ライブラリ実装と齟齬なく動く」ことの実装的な裏付けで、これからベータ分布を使った推論を組むときの安心材料になります。

ベイズ更新の数値シミュレーション

次に、ベルヌーイ試行の観測列が流れてきたときに、ベータ事後が データ量とともに鋭くなる 様子をアニメーション風に可視化します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(42)
true_mu = 0.3                    # 真の成功確率
N_total = 200                    # 総試行回数
samples = (np.random.rand(N_total) < true_mu).astype(int)

# 事前分布 Beta(1, 1) = 一様
alpha_prior, beta_prior = 1.0, 1.0

# 各時点のスナップショット
snapshots = [0, 5, 20, 50, 200]
x = np.linspace(0.001, 0.999, 400)

plt.figure(figsize=(10, 6))
for n in snapshots:
    m = samples[:n].sum()                       # n 回中の成功回数
    a_post = alpha_prior + m
    b_post = beta_prior + (n - m)
    pdf = stats.beta(a_post, b_post).pdf(x)
    plt.plot(x, pdf, lw=2,
             label=f"N={n}, m={m}, Beta({a_post:.0f}, {b_post:.0f})")

plt.axvline(true_mu, color="black", ls="--", alpha=0.6, label=f"true μ = {true_mu}")
plt.xlabel("μ")
plt.ylabel("posterior density")
plt.title("Bayesian update: Beta posterior with growing data")
plt.legend(fontsize=9)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

このグラフから、ベイズ更新の核心がはっきり読み取れます。$N = 0$ では一様分布で「$\mu$ がどこにあるか全くわからない」状態、$N = 5$ ではまだ広いがピークが立ち始め、$N = 20, 50, 200$ と進むほどピークが鋭くなり、真の値 $\mu = 0.3$ に確実に収束していきます。観測数 $N$ が増えると分散が $1/(\alpha+\beta) \sim 1/N$ で減るという解析的な結果が、目に見える形で確認できました。同時に、観測数が少ない段階では事後分布がそれなりに広いことから、「データが少ないうちに性急な結論を出すべきでない」というベイズ的な慎重さの理由も視覚的に理解できます。

ベイズ更新のシミュレーション — N=0,5,10,50,100,500 の事後推移と真値への収束

信用区間プロット — サンプル増加とともに 95% 信用区間が自然に縮む

ベイズA/Bテストのシミュレーション

最後に、A/Bテストの実例を実装します。「B 群が A 群より良い確率」と期待損失を計算し、判定の根拠にします。

import numpy as np
from scipy import stats

# データ(A群: 1000人中120クリック、B群: 1000人中150クリック)
m_A, N_A = 120, 1000
m_B, N_B = 150, 1000

# 一様事前 Beta(1, 1) からのベイズ更新
alpha_A, beta_A = 1 + m_A, 1 + (N_A - m_A)
alpha_B, beta_B = 1 + m_B, 1 + (N_B - m_B)

# 事後分布から大量サンプリング
n_samples = 200_000
rng = np.random.default_rng(0)
mu_A_samples = rng.beta(alpha_A, beta_A, size=n_samples)
mu_B_samples = rng.beta(alpha_B, beta_B, size=n_samples)

# P(μ_B > μ_A) と期待損失 E[max(μ_A - μ_B, 0)]
prob_B_better = np.mean(mu_B_samples > mu_A_samples)
loss_choose_B = np.mean(np.maximum(mu_A_samples - mu_B_samples, 0))

# 各事後の95%信用区間
ci_A = stats.beta(alpha_A, beta_A).ppf([0.025, 0.975])
ci_B = stats.beta(alpha_B, beta_B).ppf([0.025, 0.975])

print(f"事後 A: Beta({alpha_A}, {beta_A}), 期待値={alpha_A/(alpha_A+beta_A):.4f}, "
      f"95% CI=[{ci_A[0]:.4f}, {ci_A[1]:.4f}]")
print(f"事後 B: Beta({alpha_B}, {beta_B}), 期待値={alpha_B/(alpha_B+beta_B):.4f}, "
      f"95% CI=[{ci_B[0]:.4f}, {ci_B[1]:.4f}]")
print(f"P(μ_B > μ_A) = {prob_B_better:.4f}")
print(f"期待損失(B を選んだ場合) = {loss_choose_B:.5f}")

このシミュレーションが返す結果は、フリークエンティストの p値と比べてはるかに直感的です。たとえば「$P(\mu_B > \mu_A) = 0.96$」が出れば、「B が A を上回る確率は96%」と素直に解釈できます。期待損失 $E[\max(\mu_A – \mu_B, 0)]$ は「B を採用してもし間違っていた場合の平均的な機会損失」で、これが0.001(0.1ポイント)程度に下がっていれば実用上の意思決定に十分な確からしさがあると判定できます。重要なのは、サンプルが追加されるたびにこの値を再計算でき、「のぞき見問題」が原理的に存在しないことです。$P(\mu_B > \mu_A)$ がじわじわ上がっていく様子は、毎日サンプルを集めながらリアルタイムで観察できます。

事後予測分布 — Beta-Binomial

ベータ分布の事後 $\mathrm{Beta}(\alpha, \beta)$ が得られたあとで、「次の $K$ 回の試行で成功は何回くらい起きるか?」を答えるには、$\mu$ について平均を取った 事後予測分布 (posterior predictive) を使います。

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import betaln, gammaln

def beta_binomial_pmf(k, K, alpha, beta_):
    """Beta-Binomial 分布の確率質量関数 P(X = k | K, α, β)"""
    log_c = gammaln(K + 1) - gammaln(k + 1) - gammaln(K - k + 1)
    log_b = betaln(k + alpha, K - k + beta_) - betaln(alpha, beta_)
    return np.exp(log_c + log_b)

# A 群の事後 Beta(121, 881) を使い、次 100 人での成功回数の予測
alpha, beta_ = 121, 881
K = 100
ks = np.arange(0, K + 1)
pmf = beta_binomial_pmf(ks, K, alpha, beta_)

# 比較: μ の点推定 (MAP=120/1000=0.12) を真値とした素朴な二項分布
from scipy import stats
pmf_naive = stats.binom(K, alpha / (alpha + beta_)).pmf(ks)

plt.figure(figsize=(10, 5))
plt.bar(ks - 0.2, pmf, width=0.4, label="Beta-Binomial (uncertainty-aware)")
plt.bar(ks + 0.2, pmf_naive, width=0.4, alpha=0.7,
        label=f"Binomial(K={K}, μ̂={alpha/(alpha+beta_):.3f})")
plt.xlim(0, 30)
plt.xlabel("number of clicks in next K=100 visitors")
plt.ylabel("probability")
plt.title("Posterior predictive: Beta-Binomial vs plug-in Binomial")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

このグラフから、点推定で済ませる場合と事後予測分布を使う場合の差がはっきり見えます。Beta-Binomial(青)は素朴な二項分布(オレンジ)よりわずかに 広い分布 になっています。これは「$\mu$ そのものが不確実だ」という情報が予測のばらつきに加算されているためです。次100人で何人クリックするかを予測したいときに、たった1点の $\hat\mu$ で予測するのは $\mu$ の不確実性を無視することと同じで、予測区間が過剰に狭くなります。ベイズ的に事後予測分布を使えば、その不確実性が自然に取り込まれます。これは、たとえばリスク管理や在庫計画のように「予測の振れ幅」自体が重要な場面で決定的な違いを生みます。

多腕バンディットへの応用 — トムソンサンプリング

ベイズA/Bテストをさらに一歩進めると、「複数の選択肢を試しながら、最も良いものを徐々に多く引く」多腕バンディット問題が解けます。ベータ分布を使った代表的なアルゴリズムが トムソンサンプリング (Thompson sampling) です。各腕(候補)にベータ分布の事後を持たせ、各ステップで全腕の事後から1サンプルずつ取り、最大サンプルを返した腕を引く——たったこれだけで、探索と活用のバランスが理論的に最適化されます。

Thompson Sampling のサイクル図 — ベータ事後 → サンプリング → argmax → 更新 を1ステップずつ回す

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(7)

# 3つの腕。真の成功確率は未知だがそれぞれ違う
true_mus = np.array([0.30, 0.50, 0.55])
n_arms = len(true_mus)
T = 2000                                 # 試行回数

# 各腕の事後パラメータ Beta(α, β)、初期は一様
alphas = np.ones(n_arms)
betas = np.ones(n_arms)

history_choices = []
history_regret = []

for t in range(T):
    # トムソンサンプリング: 各腕の事後から1点抜き、最大の腕を選ぶ
    sampled = rng.beta(alphas, betas)
    arm = int(np.argmax(sampled))
    reward = int(rng.random() < true_mus[arm])  # ベルヌーイ報酬

    # ベイズ更新(パラメータ加算)
    alphas[arm] += reward
    betas[arm] += 1 - reward

    history_choices.append(arm)
    # 「最良腕を選ぶべきだったのに選ばなかった」損失
    history_regret.append(true_mus.max() - true_mus[arm])

choices = np.array(history_choices)
cumreg = np.cumsum(history_regret)

# 各腕の選択頻度を時間方向に集計
window = 50
arm_share = np.zeros((T - window + 1, n_arms))
for k in range(n_arms):
    indicator = (choices == k).astype(float)
    arm_share[:, k] = np.convolve(indicator, np.ones(window) / window, mode="valid")

fig, ax = plt.subplots(1, 2, figsize=(12, 4.5))
ax[0].plot(cumreg, color="crimson")
ax[0].set_xlabel("step")
ax[0].set_ylabel("cumulative regret")
ax[0].set_title("Cumulative regret of Thompson sampling")
ax[0].grid(True, alpha=0.3)

for k in range(n_arms):
    ax[1].plot(arm_share[:, k], lw=2,
               label=f"arm {k} (true μ={true_mus[k]:.2f})")
ax[1].set_xlabel("step")
ax[1].set_ylabel("selection rate (rolling)")
ax[1].set_title("Per-arm pull frequency over time")
ax[1].legend()
ax[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

# 最終的な事後と推定
for k in range(n_arms):
    mean = alphas[k] / (alphas[k] + betas[k])
    n_pulls = int(alphas[k] + betas[k] - 2)
    print(f"arm {k}: true={true_mus[k]:.2f}, posterior mean={mean:.4f}, "
          f"pulls={n_pulls}, Beta({alphas[k]:.0f}, {betas[k]:.0f})")

このシミュレーションの結果から、トムソンサンプリングの動作原理が明瞭に読み取れます。左図の累積リグレット(最良腕を引かなかった機会損失の累積)は、$\log T$ に近いオーダーでゆるやかに増加し、ランダム選択の線形増加と比べてはるかに低く抑えられます。右図を見ると、序盤は3つの腕がほぼ等頻度で引かれていますが、すぐに最良腕(arm 2、$\mu = 0.55$)と次点(arm 1、$\mu = 0.50$)への偏りが現れ、明らかに劣る arm 0($\mu = 0.30$)の選択比率は急速にゼロに近づきます。それでもなお arm 0 をたまに引いているのは、ベイズ事後がまだ「もしかしたら arm 0 が良いかも」という小さな不確実性を残しているためです。この「不確実性に比例する探索」が、ベータ事後を持ち回ることで自然に実現されるのがトムソンサンプリングの美しさです。

実装まで通して見えてきたとおり、ベータ分布はそれ自体が便利な分布であると同時に、ベルヌーイ/二項分布との共役性によって、ベイズ推定の入り口として理想的な題材です。最後に、ベータ分布を起点にして広がっていく自然な拡張を眺めておきましょう。

ベータ分布の拡張

多次元化 — ディリクレ分布

ベータ分布は「2択(成功・失敗)の比率」を扱う分布でした。これを「3択以上のカテゴリの比率」に一般化したものが ディリクレ分布 (Dirichlet distribution) です。$K$ 個のカテゴリそれぞれの確率 $(\mu_1, \dots, \mu_K)$ について、

$$ \mathrm{Dir}(\boldsymbol{\mu} \mid \boldsymbol{\alpha}) = \frac{1}{B(\boldsymbol{\alpha})} \prod_{k=1}^{K} \mu_k^{\alpha_k – 1}, \quad \sum_k \mu_k = 1 $$

と定義され、ベータ分布は $K = 2$ の特別な場合に対応します。ディリクレ分布はカテゴリカル分布/多項分布の共役事前分布で、トピックモデル(LDA)、自然言語処理、画像分類のソフトラベル平滑化など、ベータ分布の応用範囲をそのまま $K$ カテゴリに拡張する形で広く使われています。

Beta-Binomial 分布

すでに事後予測分布として出てきましたが、ベータ分布と二項分布を組み合わせた Beta-Binomial 分布 は、それ自体が独立した重要な分布です。$\mu$ を事前にベータ分布から引き、その $\mu$ で二項試行をする——これを $\mu$ について周辺化したのが Beta-Binomial で、「過分散二項分布 (over-dispersed binomial)」とも呼ばれます。実データではしばしば二項分布の理論より大きいばらつきが観測され、その「過分散」を Beta-Binomial がうまく説明します(医療統計のクラスター効果、Webクリックの個体差など)。

一般化ベータ分布

定義域を $[0, 1]$ ではなく一般の区間 $[a, b]$ に拡張した4パラメータの一般化ベータ分布もあります。これは比率の範囲が既知の制約付き量(たとえば物理量の上下限など)を扱うときに便利で、ベイズ統計でしばしば登場します。

ロジット変換とロジスティック正規分布

ベータ分布のもう一つの近縁概念がロジット変換による正規化です。$\mu \in [0,1]$ をロジット $\mathrm{logit}(\mu) = \log \mu/(1-\mu)$ で実数全体に写すと、扱いやすい正規分布で近似できます。これはベイズロジスティック回帰の核心的なアイデアで、ベータ事前を「ロジット空間の正規事前」に置き換える発想につながります。

これらの拡張はいずれも、ベータ分布で身につけた「比率を分布で表現する」「共役性で計算を簡潔にする」という発想の自然な延長線上にあります。

まとめ

本記事では、ベータ分布について基礎から実装まで網羅的に解説しました。

  • 直感: ベータ分布は「0から1の比率」に対する確率分布で、形状パラメータ $\alpha, \beta$ により一様・対称・非対称・U字型まで多彩な形を取る。$\alpha-1$ と $\beta-1$ は「擬似的な成功・失敗回数」と解釈できる。
  • 確率密度関数: $\mathrm{Beta}(\mu \mid \alpha, \beta) = \mu^{\alpha-1}(1-\mu)^{\beta-1} / B(\alpha, \beta)$、ベータ関数 $B(\alpha, \beta) = \Gamma(\alpha)\Gamma(\beta)/\Gamma(\alpha+\beta)$ をガンマ関数の二重積分から導出。
  • 統計量: 期待値 $E[\mu] = \alpha/(\alpha+\beta)$、分散 $V[\mu] = \alpha\beta/[(\alpha+\beta)^2(\alpha+\beta+1)]$、モード $(\alpha-1)/(\alpha+\beta-2)$ をベータ関数の漸化式から計算。
  • 共役性: ベルヌーイ/二項分布の共役事前分布で、$N$ 回中 $m$ 回成功なら $\mathrm{Beta}(\alpha, \beta) \to \mathrm{Beta}(\alpha+m, \beta+N-m)$ という パラメータの足し算 だけでベイズ更新が完結する。
  • ベイズA/Bテスト: 両群のクリック率に独立にベータ事前を置き、$P(\mu_B > \mu_A)$ や期待損失を事後サンプリングで計算する。サンプルサイズを事前に固定する必要がなく、のぞき見問題が原理的に存在しない。
  • 拡張: ディリクレ分布(多カテゴリ)、Beta-Binomial(過分散二項)、ロジット変換などへ自然に拡がる。

ベータ分布は単なる「変な形の連続分布」ではなく、ベイズ統計の最も基本的な構成要素であり、多腕バンディット・ベイズ回帰・トピックモデルなど現代の機械学習の多くで使われている、確率分布の「主役の一人」です。$(\alpha, \beta)$ という2つの数だけで状態を持てる軽さと、ベイズ更新が足し算で済む簡潔さは、実装の観点でも極めて魅力的です。

次のステップとして、以下の記事も参考にしてください。

ガンマ分布の期待値や分散、統計的性質
ベータ分布の生成的関係の源流。ガンマ分布の定義・期待値・分散・再生性をガンマ関数から丁寧に導出し、指数分布・カイ二乗分布との統一的な系統を解説します。
ベイズ推定とベルヌーイ分布の事後分布
ベルヌーイ/二項分布にベータ事前を置いてベイズ更新を実行する具体的な手順。事前・尤度・事後の関係をゼロから丁寧に解説します。