二項分布を例を交えてわかりやすく解説

コインを10回投げたとき、表がちょうど6回出る確率はいくらでしょうか。あるいは、不良率2%の製造ラインから100個サンプリングしたとき、不良品が3個以下に収まる確率は? こうした「成功か失敗か」を何度も繰り返したときの「成功回数」を扱うのが二項分布(binomial distribution)です。

二項分布は、確率・統計のもっとも基礎的な分布のひとつでありながら、応用範囲が非常に広いことで知られています。たとえば次のような場面で登場します。

  • 品質管理: 不良率 $p$ の製品を $N$ 個検査したとき、不良品が何個出るかを予測する
  • A/Bテスト: Webサイトのボタンを変えたとき、クリック率が改善したかを統計的に判定する
  • ベイズ推定: コインの「表が出る確率」そのものを、観測データから推定する(共役事前分布であるベータ分布と組み合わせる)

機械学習を学ぶ上でも、二項分布はロジスティック回帰の尤度や、ベルヌーイ分布・ベータ分布・ポアソン分布といった周辺分布を理解する土台になります。今回はこの二項分布について、コイン投げの直感から出発し、ベルヌーイ試行からの導出、平均・分散の証明、正規近似・ポアソン近似、最尤推定、ベータ分布との共役性、そしてPython実装まで、数式とグラフを交えてできるだけ丁寧に解説していきます。

本記事の内容

  • 二項分布の直感的な理解と数学的定義
  • ベルヌーイ試行からの導出(省略なし)
  • 平均 $np$・分散 $np(1-p)$ の証明
  • 正規近似・ポアソン近似・最尤推定・ベータ分布との共役性
  • Pythonでの可視化と実装

前提知識

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

二項分布とは

二項分布を一言でいうと、「コインを $N$ 回投げたとき、表が何回出るか」を表す確率分布です。

まずは身近なコイン投げで直感をつかみましょう。表が出る確率が $p$ のコインを1回投げると、結果は「表(成功)」か「裏(失敗)」の2通りです。この1回だけの試行を表すのがベルヌーイ分布でした。では、このコインを10回投げたらどうなるでしょうか。表が0回のことも、10回全部表のこともありますが、直感的には「5回前後」が一番出やすそうです。この「表の合計回数」がどんな確率で散らばるかを記述するのが二項分布です。

ポイントは、二項分布が次の3つの条件を満たす状況を表すことです。

  1. 試行が2通りの結果しかない(成功/失敗、表/裏、良品/不良品)
  2. 各試行の成功確率 $p$ が一定である
  3. 各試行が独立である(前の結果が次に影響しない)

この3条件を満たす1回1回の試行をベルヌーイ試行と呼びます。二項分布は、このベルヌーイ試行を $N$ 回繰り返したときの成功回数の分布、というわけです。

まずは $n$ と $p$ を変えると分布の形がどう変わるかを眺めてみましょう。

n と p を変えたときの二項分布の形状ギャラリー

この図から、二項分布の形について3つの特徴が読み取れます。第一に、山の中心(最頻値)はおおむね $np$ の位置にあります(破線)。第二に、$p=0.5$ のときは左右対称ですが、$p$ が0や1に寄ると裾が片側に伸びて非対称になります。第三に、試行回数 $n$ を増やすと山は相対的に細く鋭くなり、釣鐘型(正規分布)に近づいていきます。これらの性質は、後で平均・分散・正規近似を導くと数式的にも裏づけられます。

それでは、この「成功回数の分布」がどんな式になるのか、ベルヌーイ試行から組み立てていきましょう。

ベルヌーイ試行からの導出

二項分布は、ベルヌーイ試行を $N$ 回足し合わせたものだ、と述べました。この「足し合わせ」を式で組み立てると、二項分布の確率質量関数が自然に出てきます。

$n$ 回目の試行の結果を確率変数 $X_n$ で表しましょう。成功なら $X_n = 1$、失敗なら $X_n = 0$ とします。これはまさにベルヌーイ分布に従う確率変数です。

$$ \begin{equation} P(X_n = 1) = p, \qquad P(X_n = 0) = 1 – p \end{equation} $$

$N$ 回の試行での成功回数を $m$ とすると、$m$ はこれらの和になります。

$$ \begin{equation} m = X_1 + X_2 + \cdots + X_N \end{equation} $$

この関係を図で見ると、二項分布が「ベルヌーイ試行の足し算」であることがよくわかります。

ベルヌーイ試行を N 回足し合わせると二項分布になる

左は1回のベルヌーイ試行で、成功確率 $p$・失敗確率 $1-p$ の2本の棒だけです。右はそれを $N=6$ 回足し合わせた二項分布で、成功回数 $m$ が0から6まで山なりに分布しています。1つ1つは単純な2択でも、何度も足し合わせると豊かな分布が現れる、これが二項分布の本質です。

では、ちょうど $m$ 回成功する確率 $P(m)$ を求めましょう。まず、特定の順番(たとえば「最初の $m$ 回が成功、残り $N-m$ 回が失敗」)で起こる確率を考えます。各試行は独立なので、確率は単純な掛け算になります。

$$ \begin{equation} \underbrace{p \cdot p \cdots p}_{m\text{個}} \cdot \underbrace{(1-p)(1-p)\cdots(1-p)}_{N-m\text{個}} = p^m (1-p)^{N-m} \end{equation} $$

しかし「$m$ 回成功する」順番はこれ1通りではありません。たとえば $N=3, m=2$ なら、成功成功失敗・成功失敗成功・失敗成功成功の3通りがあります。$N$ 回のうちどの $m$ 回が成功だったかの選び方は、組み合わせの数 ${}_N C_m$ だけあります。

それぞれの順番は確率 $p^m(1-p)^{N-m}$ で起こり、互いに排反なので、それらを足し上げます。

$$ \begin{equation} P(m) = {}_N C_m \, p^m (1-p)^{N-m} \end{equation} $$

こうして二項分布の確率質量関数が導けました。${}_N C_m$ という係数が「順番の数え上げ」、$p^m(1-p)^{N-m}$ が「1つの順番が起こる確率」という役割分担になっているのがポイントです。

次に、この導出のカギである組み合わせ ${}_N C_m$ —— 二項係数を詳しく見ていきましょう。

確率質量関数と二項係数

二項分布の確率質量関数を、改めて定義の形でまとめておきます。試行回数 $N$、成功確率 $p$ の二項分布に従う確率変数 $m$ について、

$$ \begin{equation} \mathrm{Bin}(m \mid N, p) = {}_N C_m \, p^m (1-p)^{N-m}, \qquad m = 0, 1, 2, \dots, N \end{equation} $$

と書きます。ここで ${}_N C_m$ は二項係数(binomial coefficient)と呼ばれ、$N$ 個から $m$ 個を選ぶ組み合わせの数です。

$$ \begin{equation} {}_N C_m = \binom{N}{m} = \frac{N!}{m!\,(N-m)!} \end{equation} $$

「二項」分布という名前は、この係数が二項定理 $(a+b)^N = \sum_{m=0}^{N} {}_N C_m \, a^m b^{N-m}$ に現れる係数と同じであることに由来します。実際、$a = p$、$b = 1-p$ を代入すると、

$$ \begin{equation} \sum_{m=0}^{N} {}_N C_m \, p^m (1-p)^{N-m} = (p + (1-p))^N = 1^N = 1 \end{equation} $$

となり、全確率が1になることが自動的に保証されます。これは確率分布として満たすべき大切な性質です。

二項係数はパスカルの三角形として視覚化すると直感的に理解できます。

パスカルの三角形と二項係数

この図から、各位置の数がそのすぐ上にある2つの数の和になっていることが読み取れます。これは漸化式 ${}_N C_m = {}_{N-1} C_{m-1} + {}_{N-1} C_m$ を表しており、「$N$ 番目の試行が成功だったか失敗だったかで場合分けする」ことに対応します。最下段($N=6$)の係数 1, 6, 15, 20, 15, 6, 1 が、先ほどの $\mathrm{Bin}(m \mid 6, p)$ の各項に現れる係数そのものです。

ここで、実際に数値を入れて確率を計算してみましょう。表が出る確率 $p=0.5$ の公平なコインを6回投げて、表がちょうど3回出る確率を求めます。$N=6, m=3$ を代入すると、

$$ \begin{split} \mathrm{Bin}(3 \mid 6, 0.5) &= {}_6 C_3 \cdot 0.5^3 \cdot 0.5^{3} \\ &= 20 \cdot 0.125 \cdot 0.125 \\ &= 0.3125 \end{split} $$

となります。ここで ${}_6 C_3 = \frac{6!}{3! \cdot 3!} = \frac{720}{6 \cdot 6} = 20$ を使いました。6回投げて表が3回というもっとも「平均的」な結果でも、その確率は約31%にすぎません。残りの約69%は「表が2回」や「4回」など他の結果に分散しているわけです。同じ要領で表が6回(全部表)になる確率は $\mathrm{Bin}(6 \mid 6, 0.5) = 1 \cdot 0.5^6 = 0.0156$ と、約1.6%しかありません。このように具体的な数値を入れると、二項分布が「もっとも出やすい結果でもそこそこの確率に散らばる」ことが実感できます。

確率質量関数の形がわかったので、次は二項分布の代表的な統計量である平均と分散を導いていきましょう。

平均 np の導出

新しい確率分布を学んだら、まずその平均(期待値)と分散を確認するのが定石です。これらは分布が「どこを中心に」「どれくらいばらついて」いるかを教えてくれます。

二項分布の平均は次のとおりです。

$$ \begin{equation} E[m] = Np \end{equation} $$

直感的には「試行回数 × 1回あたりの成功確率」です。コインを100回投げて表が出る確率が0.5なら、平均50回表が出る、というのは納得しやすいでしょう。

これをきちんと証明します。二項分布が $m = X_1 + X_2 + \cdots + X_N$ というベルヌーイ確率変数の和であることと、「和の期待値は期待値の和」という性質を使います。

まず、1回のベルヌーイ試行 $X_n$ の期待値を求めます。$X_n$ は確率 $p$ で値1、確率 $1-p$ で値0をとるので、

$$ \begin{equation} E[X_n] = 1 \cdot p + 0 \cdot (1-p) = p \end{equation} $$

です。次に、期待値の線形性(和の期待値は期待値の和)を使って $m$ の期待値を分解します。

$$ \begin{split} E[m] &= E[X_1 + X_2 + \cdots + X_N] \\ &= E[X_1] + E[X_2] + \cdots + E[X_N] \\ &= \underbrace{p + p + \cdots + p}_{N\text{個}} = Np \end{split} $$

ここで重要なのは、期待値の線形性は確率変数が独立でなくても成り立つ点です。各 $E[X_n] = p$ を $N$ 個足すだけで、定義から直接 $\sum_m m \cdot {}_N C_m p^m (1-p)^{N-m}$ を計算するよりはるかに簡単に平均が求まりました。

平均がわかったので、続いてばらつきを表す分散を導きます。

分散 np(1-p) の導出

二項分布の分散は次の形です。

$$ \begin{equation} V[m] = Np(1-p) \end{equation} $$

これも、平均と同じく「和への分解」で証明できます。ただし分散の場合は、独立な確率変数の和の分散は分散の和という性質を使います(独立性がここで効いてきます)。

まず、1回のベルヌーイ試行 $X_n$ の分散を求めます。分散の公式 $V[X] = E[X^2] – (E[X])^2$ を使いましょう。$X_n$ は0か1しかとらないので $X_n^2 = X_n$ が成り立ち、$E[X_n^2] = E[X_n] = p$ です。したがって、

$$ \begin{split} V[X_n] &= E[X_n^2] – (E[X_n])^2 \\ &= p – p^2 \\ &= p(1-p) \end{split} $$

となります。次に、$X_1, \dots, X_N$ は互いに独立なので、和の分散は各分散の単純な和になります。

$$ \begin{split} V[m] &= V[X_1 + X_2 + \cdots + X_N] \\ &= V[X_1] + V[X_2] + \cdots + V[X_N] \quad (\because \text{独立}) \\ &= \underbrace{p(1-p) + \cdots + p(1-p)}_{N\text{個}} = Np(1-p) \end{split} $$

こうして分散 $Np(1-p)$ が導けました。平均と分散を $p$ の関数として見ると、面白い性質が見えてきます。

平均 np と分散 np(1-p) の p 依存性

左の図のとおり、平均 $E[m] = Np$ は $p$ に比例して直線的に増えます。一方、右の分散 $V[m] = Np(1-p)$ は $p=0.5$ で最大になる山型です。これは直感とも一致します。$p$ が0や1に近い「ほぼ確実に失敗/成功」のコインは結果がほぼ決まっているのでばらつきが小さく、$p=0.5$ の「五分五分」のコインがもっとも予測しづらく、ばらつきが大きいのです。

平均と分散が複数のベルヌーイ試行の「足し算」で求まることを見ました。この「足し算で分布が決まる」性質は、二項分布どうしの足し算にも拡張できます。次にこの再生性を見ていきましょう。

二項分布の再生性

二項分布には再生性(reproductive property)という便利な性質があります。同じ成功確率 $p$ をもつ独立な二項分布を足し合わせると、再び二項分布になる、というものです。

たとえば、午前中にコインを $N_1$ 回投げて表が $m_1$ 回、午後に同じコインを $N_2$ 回投げて表が $m_2$ 回出たとします。1日の合計を考えれば、これは結局「同じコインを $N_1 + N_2$ 回投げた」のと同じです。式で書くと、

$$ \begin{equation} m_1 \sim \mathrm{Bin}(N_1, p), \quad m_2 \sim \mathrm{Bin}(N_2, p) \ \Rightarrow\ m_1 + m_2 \sim \mathrm{Bin}(N_1 + N_2, p) \end{equation} $$

が成り立ちます。証明は、二項分布が独立なベルヌーイ試行の和であることから明らかです。$m_1$ は $N_1$ 個、$m_2$ は $N_2$ 個のベルヌーイ確率変数の和なので、$m_1 + m_2$ は合計 $N_1 + N_2$ 個のベルヌーイ確率変数の和になり、これは定義から $\mathrm{Bin}(N_1 + N_2, p)$ です。

ただし、成功確率 $p$ が等しいことが必須です。異なる $p$ をもつ二項分布の和は、一般には二項分布になりません。

再生性は、データを複数のバッチに分けて集計するときなどに役立ちます。次は、試行回数 $N$ が大きくなると二項分布がどんな形に近づくかを見ていきましょう。これが正規近似です。

正規近似(ド・モアブル-ラプラスの定理)

最初の形状ギャラリーで、試行回数 $N$ を増やすと二項分布が釣鐘型に近づくことを見ました。これを厳密に述べたのがド・モアブル-ラプラスの定理です。

$N$ が十分大きいとき、二項分布 $\mathrm{Bin}(N, p)$ は、平均 $\mu = Np$、分散 $\sigma^2 = Np(1-p)$ の正規分布で近似できます。

$$ \begin{equation} \mathrm{Bin}(m \mid N, p) \approx \frac{1}{\sqrt{2\pi Np(1-p)}} \exp\!\left(-\frac{(m – Np)^2}{2Np(1-p)}\right) \end{equation} $$

これは中心極限定理の特別な場合です。二項分布は独立同分布なベルヌーイ確率変数の和なので、$N$ を増やせば和の分布が正規分布に近づくのは、中心極限定理から自然に予想できます。

実際にどれくらいの $N$ で近似が良くなるかを見てみましょう。

ド・モアブル-ラプラスの定理による正規近似

この図から、$N$ が大きくなるほど棒グラフ(二項分布)と曲線(正規近似)がぴったり重なっていくのがわかります。$N=5$ ではまだズレが目立ちますが、$N=150$ ではほぼ完全に一致しています。経験則として、$Np \geq 5$ かつ $N(1-p) \geq 5$ を満たせば正規近似は実用上十分とされます。この近似のおかげで、本来は離散的で計算が面倒な二項分布の確率を、扱いやすい正規分布で手軽に評価できるようになります。

正規近似は $p$ が極端でない場合に有効ですが、$p$ が非常に小さく $N$ が非常に大きい場合には別の近似が威力を発揮します。それがポアソン近似です。

ポアソン近似

正規近似は $p$ が0.5付近で $N$ が大きいときに有効でした。しかし、$p$ がきわめて小さい「めったに起こらない事象」を多数回試行する場合(たとえば「1日に届く大量のメールのうち、特定のスパムが何通来るか」「大きな工場で1時間あたり何件の事故が起こるか」)は、正規近似ではうまくいきません。このとき活躍するのがポアソン近似です。

$N$ を大きく、$p$ を小さくしながら、その積 $Np = \lambda$ を一定に保つと、二項分布は平均 $\lambda$ のポアソン分布に収束します。

$$ \begin{equation} \lim_{N \to \infty,\ Np = \lambda} {}_N C_m \, p^m (1-p)^{N-m} = \frac{\lambda^m e^{-\lambda}}{m!} \end{equation} $$

この極限を導いてみましょう。$p = \lambda / N$ を代入し、二項係数を書き下します。

$$ \begin{equation} {}_N C_m \, p^m (1-p)^{N-m} = \frac{N!}{m!\,(N-m)!} \left(\frac{\lambda}{N}\right)^m \left(1 – \frac{\lambda}{N}\right)^{N-m} \end{equation} $$

ここで $\dfrac{N!}{(N-m)!} = N(N-1)\cdots(N-m+1)$ を $N^m$ で割ると、$N \to \infty$ で各因子が1に近づくので、この部分は1に収束します。

$$ \begin{equation} \frac{N(N-1)\cdots(N-m+1)}{N^m} \to 1 \quad (N \to \infty) \end{equation} $$

次に $\left(1 – \dfrac{\lambda}{N}\right)^{N-m}$ ですが、有名な極限 $\left(1 – \dfrac{\lambda}{N}\right)^N \to e^{-\lambda}$ を使い、残りの $\left(1 – \dfrac{\lambda}{N}\right)^{-m} \to 1$ とあわせると $e^{-\lambda}$ に収束します。これらをまとめると、

$$ \begin{equation} {}_N C_m \, p^m (1-p)^{N-m} \to \frac{\lambda^m}{m!} \cdot 1 \cdot e^{-\lambda} = \frac{\lambda^m e^{-\lambda}}{m!} \end{equation} $$

となり、ポアソン分布が導けました。実際に $\lambda$ を固定して $N$ を増やすと、どれだけ近づくか見てみましょう。

ポアソン近似 — np=λ を保ちながら N を増やす

この図から、$\lambda = Np = 3$ を保ったまま $N$ を10、30、200と増やすと、二項分布(青)とポアソン分布(紫)が次第に重なっていくことが読み取れます。$N=200, p=0.015$ ではほぼ完全に一致しています。「めったに起きないが、機会が膨大にある」事象の回数は、二項分布よりポアソン分布で考えるほうが計算が楽になります。詳しくはポアソン分布の記事を参照してください。

ここまでは「成功確率 $p$ が既知」という前提で分布の性質を調べてきました。次は逆に、観測データから $p$ そのものを推定する問題、最尤推定を扱います。

最尤推定

これまでは成功確率 $p$ がわかっている前提で話を進めてきました。しかし現実には、$p$ こそが知りたい未知の量であることがほとんどです。「このコインの表が出る確率は本当に0.5なのか?」「このWebサイトのボタンのクリック率は何%か?」 こうした問いに答えるのが最尤推定(maximum likelihood estimation, MLE)です。

最尤推定の考え方はシンプルです。「観測されたデータが、もっとも起こりやすくなるような $p$ を選ぶ」というものです。$N$ 回試行して $m$ 回成功したというデータが得られたとき、これを $p$ の関数とみなしたものを尤度関数と呼びます。

$$ \begin{equation} L(p) = {}_N C_m \, p^m (1-p)^{N-m} \end{equation} $$

この $L(p)$ を最大にする $p$ を求めます。積の形のままだと微分しにくいので、対数をとった対数尤度 $\log L(p)$ を最大化します(対数は単調増加なので、最大値を与える $p$ は変わりません)。

$$ \begin{equation} \log L(p) = \log {}_N C_m + m \log p + (N-m) \log (1-p) \end{equation} $$

これを $p$ で微分して0とおきます。第1項は $p$ に依存しない定数なので消えます。

$$ \begin{equation} \frac{d}{dp} \log L(p) = \frac{m}{p} – \frac{N-m}{1-p} = 0 \end{equation} $$

この式を $p$ について解きます。両辺に $p(1-p)$ を掛けて整理すると、

$$ \begin{split} m(1-p) – (N-m)p &= 0 \\ m – mp – Np + mp &= 0 \\ m – Np &= 0 \end{split} $$

となり、最尤推定値が得られます。

$$ \begin{equation} \hat{p} = \frac{m}{N} \end{equation} $$

つまり「成功回数を試行回数で割った比率」が、もっとも尤もらしい $p$ の推定値です。当たり前のように見えますが、これが尤度を最大化する点として数学的に導かれることが大切です。

尤度関数と対数尤度のピーク

この図は $N=20, m=13$ のときの尤度関数(左)と対数尤度(右)です。どちらも $\hat{p} = m/N = 0.65$ でピークを迎えており、計算結果と一致しています。尤度関数の山が鋭いほど推定の確信度が高く、データが増える($N$ が大きい)ほど山は鋭く、推定が安定します。

最尤推定は「$p$ を1点で言い切る」推定でした。一方、ベイズ統計では「$p$ がどれくらい確からしいか」を分布として表します。そこで登場するのが、二項分布の共役事前分布であるベータ分布です。

ベータ分布との共役性

最尤推定では $\hat p = m/N$ という1つの値を返しました。しかし、たとえば3回投げて2回表だった場合、$\hat p = 0.67$ ですが、本当に確信を持って「表が出る確率は0.67」と言えるでしょうか。試行回数が少なければ推定はあやふやなはずです。この「推定の不確かさ」も含めて扱うのがベイズ推定であり、二項分布と相性抜群なのがベータ分布です。

ベータ分布は $[0, 1]$ 上で定義される連続分布で、「確率 $p$ そのものに対する確率分布」として使えます。パラメータ $\alpha, \beta$ をもち、密度は次のとおりです。

$$ \begin{equation} \mathrm{Beta}(p \mid \alpha, \beta) = \frac{1}{B(\alpha, \beta)} p^{\alpha – 1} (1-p)^{\beta – 1} \end{equation} $$

ここで $B(\alpha, \beta)$ は規格化のためのベータ関数です。注目すべきは、$p^{\alpha-1}(1-p)^{\beta-1}$ という形が、二項分布の尤度 $p^m(1-p)^{N-m}$ と「$p$ と $1-p$ のべき乗の積」というそっくりな構造をしている点です。

ベイズの定理によると、事後分布は「事前分布 × 尤度」に比例します。事前分布を $\mathrm{Beta}(p \mid \alpha, \beta)$、尤度を二項分布として掛け合わせると、

$$ \begin{split} p(p \mid \text{データ}) &\propto \underbrace{p^{\alpha-1}(1-p)^{\beta-1}}_{\text{事前}} \cdot \underbrace{p^m (1-p)^{N-m}}_{\text{尤度}} \\ &= p^{(\alpha + m) – 1} (1-p)^{(\beta + N – m) – 1} \end{split} $$

となります。指数を見比べると、これは再びベータ分布 $\mathrm{Beta}(p \mid \alpha + m,\ \beta + N – m)$ の形そのものです。つまり、

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

と、パラメータの足し算だけで事後分布が求まります。このように、尤度を掛けても事前分布と同じ族に留まる性質を共役性(conjugacy)と呼び、ベータ分布は二項分布(およびベルヌーイ分布)の共役事前分布です。

データが増えるとこの事後分布がどう変わるか見てみましょう。

ベータ-二項の共役更新 — データが増えるほど事後は真値に集中

この図では、一様に近い事前分布 $\mathrm{Beta}(2,2)$ から出発し、観測データが増えるにつれて事後分布が真値 $p=0.8$ の周りにどんどん集中していく様子が読み取れます。観測が少ない(オレンジ)うちは幅広い分布で「まだよくわからない」ことを表し、観測が多い(緑)と鋭いピークで「確信が高い」ことを表します。最尤推定の1点とは違い、ベイズ推定では推定の不確かさが分布の幅として自然に表現されるのです。詳しくはベータ分布の記事を参照してください。

ここまでの理論をPythonで実装し、グラフで確かめてみましょう。

Pythonでの実装

理論を実装で裏づけると理解が定着します。まずは二項分布の確率質量関数を可視化してみましょう。scipy.stats.binom を使えば簡単に計算できます。

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

N = 20
ps = [0.2, 0.5, 0.7]
k = np.arange(0, N + 1)

plt.figure(figsize=(8, 5))
for p in ps:
    pmf = binom.pmf(k, N, p)
    plt.bar(k, pmf, alpha=0.6, label=f"p = {p}")
    plt.axvline(N * p, ls="--", alpha=0.7)  # 平均 Np の位置

plt.xlabel("成功回数 m")
plt.ylabel("確率 P(m)")
plt.title("二項分布 Bin(20, p)")
plt.legend()
plt.show()

このコードを実行すると、$p=0.2, 0.5, 0.7$ の3つの二項分布が描かれます。3つの山の中心(破線)がそれぞれ $Np = 4, 10, 14$ の位置に来ることが確認でき、平均が $Np$ になるという理論と一致します。また $p=0.5$ の分布だけが左右対称で、$p=0.2$ は右に、$p=0.7$ は左に裾を引く非対称な形になっています。

次に、平均と分散の理論式を、乱数シミュレーションで検証してみましょう。

import numpy as np

rng = np.random.default_rng(0)
N, p = 30, 0.4
trials = 100000

# Bin(30, 0.4) から大量にサンプリング
samples = rng.binomial(N, p, trials)

print(f"標本平均: {samples.mean():.4f}  (理論値 Np = {N * p})")
print(f"標本分散: {samples.var():.4f}  (理論値 Np(1-p) = {N * p * (1 - p)})")

実行すると、標本平均は約12.0(理論値 $Np = 12$)、標本分散は約7.2(理論値 $Np(1-p) = 7.2$)と、理論式とよく一致します。大量にサンプリングして集計するだけで、先ほど数式で導いた平均と分散が再現できることが確認できました。

続いて、最尤推定を実装します。観測データから $\hat p = m/N$ を求め、尤度関数の形も描いてみます。

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

# 真の確率 0.65 のコインを20回投げたと仮定
N, m = 20, 13
p_hat = m / N
print(f"最尤推定値 p_hat = m/N = {p_hat}")

# 尤度関数を p の関数として描く
ps = np.linspace(0.001, 0.999, 500)
likelihood = binom.pmf(m, N, ps)

plt.figure(figsize=(8, 5))
plt.plot(ps, likelihood, lw=2)
plt.axvline(p_hat, color="red", ls="--", label=f"最尤推定 p_hat = {p_hat}")
plt.xlabel("成功確率 p")
plt.ylabel("尤度 L(p)")
plt.title("尤度関数のピークが最尤推定値")
plt.legend()
plt.show()

このコードは最尤推定値 0.65 を出力し、尤度関数のグラフを描きます。グラフのピークがちょうど $p = 0.65$ の位置にあり、「観測データをもっともよく説明する $p$ が尤度のピーク」という最尤推定の考え方が視覚的に確認できます。

最後に、ベータ分布を使ったベイズ更新を実装します。コインを投げるたびに事後分布が更新される様子を見てみましょう。

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

rng = np.random.default_rng(1)
true_p = 0.7
x = np.linspace(0, 1, 500)

# 一様事前 Beta(1, 1) から開始
alpha, beta_param = 1, 1
plt.figure(figsize=(8, 5))

for n in [0, 5, 20, 100]:
    # n 回投げたデータでパラメータを更新
    data = rng.binomial(1, true_p, n)
    m = data.sum()
    a_post = alpha + m
    b_post = beta_param + (n - m)
    plt.plot(x, beta.pdf(x, a_post, b_post), lw=2,
             label=f"N={n} → Beta({a_post}, {b_post})")

plt.axvline(true_p, color="black", ls=":", label=f"真値 p={true_p}")
plt.xlabel("成功確率 p")
plt.ylabel("事後密度")
plt.title("ベータ-二項の共役更新")
plt.legend()
plt.show()

このコードを実行すると、観測数 $N$ を増やすにつれて事後分布が真値 $p=0.7$ の周りに集中していくグラフが得られます。$N=0$ では平らな一様分布(事前分布)ですが、$N=100$ では鋭いピークになり、データが推定の確信度を高めていく様子が読み取れます。これがまさに共役性による「パラメータの足し算だけで完結するベイズ更新」です。

理論と実装が揃ったところで、二項分布が活躍する応用例を整理しておきましょう。

応用例

二項分布は理論だけでなく、実務のさまざまな場面で使われます。代表的な3つを紹介します。

ひとつ目は品質管理です。不良率 $p$ の製造ラインから $N$ 個サンプリングしたとき、不良品の個数は $\mathrm{Bin}(N, p)$ に従います。「不良品が $c$ 個以下なら合格」とする抜き取り検査の合格確率は、累積分布関数 $P(m \leq c)$ で計算できます。下の図は、PMFを足し上げることでCDFが得られる関係を示しています。

PMFとCDF — ○回以下となる確率

左の図で赤く塗った「$m \leq 10$ の領域」の面積が、右のCDFの該当する高さに対応します。$N=20, p=0.4$ のとき $P(m \leq 10) \approx 0.872$ と読み取れます。「○回以下」「○回以上」といった確率は、このCDFを使えば一発で求められます。

ふたつ目はA/Bテストです。Webサイトでボタンの色を変えたとき、クリック数は二項分布に従います。新旧2つの版のクリック率を比較し、改善が偶然の範囲を超えているかを統計的に判定します。先ほどのベータ-二項の共役性を使えば、ベイズ的に「新版のほうが優れている確率」を直接計算できます。

みっつ目は機械学習です。ロジスティック回帰は、各データ点がベルヌーイ分布(=試行回数1の二項分布)に従うと仮定し、その尤度を最大化してパラメータを学習します。二項分布の最尤推定の考え方が、そのまま分類モデルの学習につながっているのです。具体的には、入力 $\bm{x}$ に対する成功確率を $p = \sigma(\bm{w}^\top \bm{x})$($\sigma$ はシグモイド関数)とモデル化し、観測ラベルの二項(ベルヌーイ)尤度を最大化します。本記事で導いた対数尤度 $m \log p + (N-m)\log(1-p)$ が、そのまま交差エントロピー損失の形になっている点に注目してください。

具体的な数値で品質管理の例を完結させておきましょう。不良率 $p=0.05$ のラインから $N=20$ 個抜き取り、不良品が1個以下なら合格とする検査を考えます。合格確率は $P(m \leq 1) = P(0) + P(1)$ で計算できます。

$$ \begin{split} P(0) &= {}_{20} C_0 \cdot 0.05^0 \cdot 0.95^{20} \approx 0.358 \\ P(1) &= {}_{20} C_1 \cdot 0.05^1 \cdot 0.95^{19} \approx 0.377 \end{split} $$

よって合格確率は $P(m \leq 1) \approx 0.735$、つまり不良率5%のラインでも約27%の確率で「不合格(不良品が2個以上)」と判定されることがわかります。このように二項分布を使うと、抜き取り検査の「見逃し」や「過検出」のリスクを定量的に評価できます。

最後に、これらの応用の土台にあるコイン投げの直感をもう一度確かめておきましょう。

コイン投げの直感 — 個々の試行を集めると二項分布が現れる

左の図は、コインを10回投げる試行を5000回シミュレーションした結果(青)と理論値 $\mathrm{Bin}(10, 0.5)$(赤)を比較したものです。両者がよく一致しており、シミュレーションが理論を裏づけています。右の図は1回の試行例で、個々の投げは「表か裏か」の単純な2択ですが、これを集めると左のなめらかな二項分布が現れます。この「単純な試行の積み重ねが豊かな分布を生む」という視点が、二項分布を理解する最大のポイントです。

まとめ

本記事では、二項分布について基礎から応用まで解説しました。

  • 定義: 成功確率 $p$ のベルヌーイ試行を $N$ 回繰り返したときの成功回数の分布で、$\mathrm{Bin}(m \mid N, p) = {}_N C_m \, p^m (1-p)^{N-m}$
  • 導出: ベルヌーイ試行の足し算として組み立てられ、二項係数 ${}_N C_m$ が順番の数え上げを担う
  • 平均と分散: $E[m] = Np$、$V[m] = Np(1-p)$ を期待値の線形性と独立な和の分散の性質から証明した
  • 近似: $N$ が大きいときは正規近似(ド・モアブル-ラプラス)、$p$ が小さく $Np = \lambda$ 一定のときはポアソン近似が使える
  • 推定: 最尤推定では $\hat p = m/N$、ベイズ推定ではベータ分布との共役性により事後分布が $\mathrm{Beta}(\alpha+m, \beta+N-m)$ になる

二項分布は、ベルヌーイ分布(1回の試行)を出発点に、ポアソン分布・正規分布・ベータ分布・カテゴリカル分布といった重要な分布群とつながる「ハブ」のような存在です。ここで学んだ「ベルヌーイ試行の足し算」「共役性」「最尤推定」の考え方は、より高度なベイズ統計や機械学習の基礎になります。

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