データが少ないとき、頻度論は沈黙する

「新しいキャンペーンを 10 件試したところ 7 件が成功した。このキャンペーンの成功確率は?」

頻度論的な統計では、この問いに答えるのが難しい状況があります。サンプルサイズが 10 件では信頼区間が非常に広く、「p 値 < 0.05」という基準を通過するかどうかという二値の判断しか返せません。一方でビジネスの現場が欲しいのは「施策を続けるべきか」という意思決定のための情報です。

ベイズ統計は、この問いに「成功確率がおよそ 0.7 である確率は 60%、0.5 より高い確率は 90%」という形で答えます。答えが二値ではなく確率の分布として返ってくる点が根本的な違いです。

ベイズの定理——三つの要素

ベイズ統計の核心は次の一式に集約されます。

P(\theta \mid D) \propto P(D \mid \theta) \cdot P(\theta)

事後分布 ∝ 尤度 × 事前分布

それぞれの意味を整理します。

  • 事前分布 P(\theta): データを見る前の「θ についての信念」。コインが公平なはずという直感や、過去の実験で得た知識がここに入ります。
  • 尤度 P(D \mid \theta): θ が正しいとしたとき、観測データ D がどれほど自然に説明されるかを表す関数。「もし表が出る確率が 0.7 なら、10 回中 7 回表が出る確率は?」がこれに相当します。
  • 事後分布 P(\theta \mid D): データを観測した後の「θ についての更新された信念」。これがベイズ統計の最終的な出力です。

周辺化 P(D) は、θ のすべての値について尤度と事前分布の積を積分したもので、正規化定数として働きます。計算が複雑になるため比例記号 ∝ で省略することが多いです。

コインの表裏で直感をつかむ

具体例で確かめます。コインを 10 回投げて 7 回表が出ました。このコインは歪んでいるでしょうか?

事前分布の設定: コインについて何も知らないなら、表が出る確率 θ は 0 から 1 の間で等しくありえると仮定します。これを \text{Beta}(1, 1) と書きます。ベータ分布は [0, 1] 区間上の確率分布を表現するのに都合の良い形で、(1, 1) のときは一様分布(平坦な直線)になります。

尤度の計算: θ が定まったとき、10 回中 7 回表が出る確率は二項分布で表せます。

P(D \mid \theta) = \binom{10}{7} \theta^7 (1 - \theta)^3

事後分布の導出: ベータ事前分布と二項尤度を掛け合わせると、事後分布もベータ分布になります(共役事前分布と呼ばれる性質です)。

P(\theta \mid D) \propto \theta^7(1-\theta)^3 \cdot 1 = \theta^{(7+1)-1}(1-\theta)^{(3+1)-1}

つまり \text{Beta}(8, 4) です。この分布の平均は 8 / (8 + 4) = 0.667、最頻値は 7 / (8 + 4 - 2) = 0.7 となります。

事前分布から事後分布への更新を示すグラフ

データが増えるほど分布は尖り(不確かさが減り)、ピークはデータの経験率に近づいていきます。5 回試行後の中間段階 \text{Beta}(4, 3) と比較すると、その収束の様子が一目でわかります。

頻度論との違い

同じデータから何を引き出すかという点で、頻度論とベイズは根本的に異なります。

頻度論とベイズ統計の比較フロー図

観点 頻度論 ベイズ
θ の扱い 固定された未知の定数 確率分布で表される変数
出力 p値・信頼区間(二値判断) 事後分布・確率による確信度
事前知識 使わない(使えない) 明示的に組み込む
データ量が少ない場合 結論が出せないことが多い 事前分布で補完できる

頻度論の「p値 < 0.05 なら有意」は二値の判断です。これは「帰無仮説が真であるときにこれ以上極端な結果が出る確率が 5% 未満」という意味であり、「施策 A が B より優れる確率が 95%」という意味ではありません。

ベイズなら「施策 A が施策 B より優れる確率は 73%」という形で直接答えが得られます。意思決定のためのインプットとして、直感的に解釈しやすい形式です。

ビジネスでの使い道

ベイズ統計が特に力を発揮する場面は三つあります。

ベイズ A/B テストは、頻度論の仮説検定よりも途中経過を見ながら柔軟に判断できます。「現時点で施策 B が A より優れる確率が 95% を超えたら切り替える」という基準が立てられます。サンプルサイズを事前に固定する必要がなく、ビジネスのサイクルに合わせた意思決定が可能です。

レコメンドシステムの初期値でも事前分布が役立ちます。新規アイテムは評価データがゼロですが、似たカテゴリの平均クリック率を事前分布として与えることで、データが溜まるまでの期間も合理的な推薦ができます。これはコールドスタート問題への対応でもあります。

スパムフィルタはベイズ統計の古典的な応用です。「この単語が含まれるメールがスパムである確率」をベイズの定理で逐次更新することで、ユーザーごとにパーソナライズされたフィルタが学習していきます。

事前分布の選び方

事前分布の設定はベイズ統計で最もよく議論される部分です。

無情報事前分布は、特定の値を優遇しないように設計された事前分布です。コインの例での \text{Beta}(1, 1) がその一例で、「何も知らない」状態を表します。ただし「無情報」の定義は一意ではなく、変数変換のもとでの不変性を保証するジェフリーズ事前分布などが提案されています。

情報的事前分布は、過去のデータや専門知識を積極的に反映させます。たとえば過去の同様のキャンペーン 100 件で平均成功率が 60% だったなら、\text{Beta}(60, 40) を事前分布として使えます。この事前分布は「100 件の仮想実験」と等価の重みを持ちます。

事前分布の影響はデータが増えるほど薄れます。大量データがある場合は頻度論とベイズの結果はほぼ一致しますが、少数データの段階では事前分布の選択が結果を大きく左右します。

Python で試す

scipy.stats.beta を使えば数行で事後分布を計算・可視化できます。

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

# 観測データ: 10回中7回表
n_trials = 10
n_heads = 7

# 事前分布: Beta(1, 1) = 一様分布
prior_a, prior_b = 1, 1

# 事後分布: Beta(prior_a + n_heads, prior_b + n_tails)
n_tails = n_trials - n_heads
post_a = prior_a + n_heads
post_b = prior_b + n_tails
posterior = stats.beta(post_a, post_b)

# 確率の分布を可視化
theta = np.linspace(0, 1, 200)
plt.figure(figsize=(8, 4))
plt.plot(theta, stats.beta(1, 1).pdf(theta), 'b--', label='事前分布 Beta(1,1)')
plt.plot(theta, posterior.pdf(theta), 'r-', linewidth=2, label=f'事後分布 Beta({post_a},{post_b})')
plt.xlabel('θ(表が出る確率)')
plt.ylabel('確率密度')
plt.legend()
plt.title('ベイズ更新: 10回中7回表の後')
plt.show()

# θ > 0.5 となる確率(コインが表に偏っている確率)
prob_biased = 1 - posterior.cdf(0.5)
print(f'コインが表に偏っている確率: {prob_biased:.1%}')  # → 95.1%

posterior.cdf(0.5) は θ が 0.5 以下である累積確率なので、1 から引けば「表に偏っている確率」が直接得られます。頻度論の p 値と違い、この数字は「コインが歪んでいる確率」として直感的に解釈できます。

まとめ

ベイズ統計を使うべき状況とポイントを整理します。

  • データが少ない段階では、事前知識で補えるベイズが特に有効です。頻度論が「結論が出せない」と沈黙する場面でも確率の分布として回答を返します。
  • 累積的に学習したい場合は、今回の事後分布を次回の事前分布として再利用できます。この「オンライン更新」が頻度論にはない強みです。
  • 確率で語りたい場合——「70% の確率で成功する」という表現が自然に出てくるならベイズの枠組みが合っています。p 値の解釈に混乱が生じやすい状況でも、事後確率は直感に沿います。
  • 事前分布の選択は結論を変えます。特にデータが少ない場面では事前分布の影響が大きいため、根拠を明示する習慣が重要です。
  • 大量データがある場合は頻度論でもベイズでも結果はほぼ同じです。どちらを使うかは「答えをどう解釈したいか」「事前知識を組み込みたいか」という設計方針で決めます。