「データを見たけれど、どの確率分布を当てはめればいいのかわからない」——統計やデータ分析を学び始めると、誰もが一度はこの壁にぶつかります。ベルヌーイ、二項、ポアソン、正規、ガンマ、ベータ……名前は知っていても、いざ目の前のデータに対してどれを選べばよいのか、なぜその分布なのかが見えてこない。確率分布は数十種類もあり、しかも互いに複雑に関係し合っているため、一つずつ暗記しようとすると途方に暮れてしまいます。
しかし、確率分布は実はきれいな「地図」を持っています。「離散か連続か」「とりうる値の範囲はどこか」「何をモデル化したいのか」という少数の問いに答えるだけで、候補は一気に絞り込めます。さらに、多くの分布は「二項分布の極限がポアソン分布」「指数分布の和がガンマ分布」のように親戚関係でつながっており、その家系図を知れば全体を一望できます。
この地図を頭に入れておくと、現場での威力は絶大です。たとえばベイズ統計では、尤度の形から共役な事前分布を即座に選べるようになり、計算が劇的に楽になります。統計的検定では、検定統計量がカイ二乗分布やF分布に従う理由が腑に落ちます。機械学習では、生成モデルの出力層に置く分布(カウントならポアソン、割合ならベータ)を根拠を持って選べるようになります。
本記事は、当ブログにある40本以上の個別分布記事への「ハブ」として、確率分布の全体像を一枚ずつの図とともに整理します。
本記事の内容
- 確率分布の全体マップ(離散/連続、台の範囲、次元による分類)
- 主要分布を「どんな現象をモデル化するか」で一覧化
- 分布間の関係図(極限・和・正規化でつながる家系図)
- 使い分けフローチャートと共役事前分布の対応表
scipy.statsでの対応表と、各分布記事への入り口
確率分布の全体像
まずは細かい数式に入る前に、確率分布という「世界地図」を俯瞰しましょう。世界中の都市をいきなり全部覚えるのではなく、まず「大陸」を把握するのと同じ発想です。確率分布を分類する軸は、大きく次の3つです。
- 離散か連続か: とりうる値がとびとび(0個、1個、2個…)なら離散分布、連続的な実数値(1.37秒、2.04mなど)なら連続分布です。
- 台(とりうる値の範囲)はどこか: 値が $\{0, 1\}$ に限られるのか、非負の実数 $[0, \infty)$ なのか、$[0, 1]$ の割合なのか、実数全体 $(-\infty, \infty)$ なのか。
- 次元はいくつか: 1つの量を扱うのか(1次元)、複数の量を同時に扱うのか(多次元)。
この3軸でほとんどの分布が整理できます。下の図は、主要な分布をこの観点で配置した全体マップです。

この図から、確率分布の「住所」が見えてきます。離散分布は「カウント・回数」を、連続分布は「測定値・時間」をモデル化する道具だと大づかみできます。さらに離散側では台が有限(ベルヌーイ・二項・超幾何)か無限(ポアソン・幾何・負の二項)かで枝分かれし、連続側では実数全体(正規・t・コーシー)、非負(指数・ガンマ・ワイブル)、有界 $[0,1]$(一様・ベータ)へと分かれます。多次元になると、離散では多項分布、連続では多変量正規やディリクレ分布が登場します。
なぜこの3軸が効くのかを少し補足しておきます。第一の「離散か連続か」は、データの取得方法そのものから決まります。「数えて得たデータ」(人数、回数、件数)は必ず離散であり、確率質量関数 $P(X=k)$ で各値の確率を直接表します。一方「測って得たデータ」(時間、長さ、重さ)は連続であり、確率密度関数 $f(x)$ を考えて区間の積分で確率を求めます。この区別を間違えると、たとえば連続分布に当てはめるべき測定値を無理に離散分布に押し込めてしまい、モデルが破綻します。
第二の「台の範囲」は、データが物理的にとりうる値の制約から決まります。割合は必ず $0$ から $1$ の間に収まりますし、待ち時間や寿命は負になりえません。台を無視して正規分布(実数全体に裾を持つ)を割合データに当てはめると、確率が $1$ を超える領域に染み出すといった不自然なことが起きます。だからこそ、割合にはベータ、待ち時間にはガンマ、というように台に合った分布を選ぶことが大切なのです。
第三の「次元」は、複数の量を同時に、しかもその間の相関まで含めて表現したいかどうかで決まります。サイコロの各目の出方をまとめて扱うなら多項分布、複数の身体測定値の相関構造まで扱うなら多変量正規分布、という具合です。
このマップさえ頭にあれば、「待ち時間だから連続で非負、つまり指数かガンマあたりだな」という当たりがすぐにつけられます。次に、それぞれの分布が具体的にどんな形をしているのかを見ていきましょう。
主要分布の形を一望する
分布を理解する最短ルートは、その「形」を目に焼き付けることです。離散分布は棒グラフ(確率質量関数 PMF)、連続分布はなめらかな曲線(確率密度関数 PDF)で表されます。代表的な9つの分布の形を並べてみます。

このグリッドから、各分布の個性が読み取れます。ベルヌーイは2本の棒(成功か失敗か)だけのもっとも単純な分布です。二項とポアソンは山型ですが、ポアソンは試行回数の上限がない点が違います。幾何分布は右肩下がりで「初成功まで待つほど確率が下がる」様子を表します。正規分布は左右対称の釣鐘型、指数分布は単調減少です。ガンマは形状パラメータ次第で山の位置が動き、ベータは $[0,1]$ の中で実に多彩な形をとります。t分布は正規分布より裾が重い(外れ値が出やすい)ことが、点線の正規分布との比較で見て取れます。
これらの分布は、それぞれが代表する「現象」とセットで覚えるのが効率的です。次の表に、主要分布が何をモデル化するのかをまとめます。
どんな現象をモデル化するか(離散分布)
| 分布 | モデル化する現象 | 主要パラメータ | 記事 |
|---|---|---|---|
| ベルヌーイ | 1回の試行の成功/失敗(コイン1枚) | 成功確率 $p$ | ベルヌーイ分布 |
| 二項 | $n$回の試行での成功回数 | $n, p$ | 二項分布 |
| 多項 | $n$回試行で各カテゴリが出た回数 | $n, \mathbf{p}$ | 多項分布 |
| ポアソン | 一定時間・空間に起きる事象の回数 | 発生率 $\lambda$ | ポアソン分布 |
| 幾何 | 初めて成功するまでの試行回数 | $p$ | 幾何分布 |
| 負の二項 | $r$回成功するまでの試行回数(過分散カウント) | $r, p$ | 負の二項分布 |
| 超幾何 | 非復元抽出での成功回数(くじ引き) | $N, K, n$ | 超幾何分布 |
どんな現象をモデル化するか(連続分布)
| 分布 | モデル化する現象 | 台 | 記事 |
|---|---|---|---|
| 一様 | どの値も等しく起こりうる(無情報) | $[a, b]$ | 一様分布 |
| 正規 | 多数の要因の和(測定誤差・身長) | $(-\infty, \infty)$ | 正規分布 |
| 指数 | 一定率の事象が起こるまでの待ち時間 | $[0, \infty)$ | 指数分布 |
| ガンマ | $k$個の事象が起こるまでの待ち時間 | $[0, \infty)$ | ガンマ分布 |
| ベータ | $[0,1]$ の割合・確率そのもの | $[0, 1]$ | ベータ分布 |
| ディリクレ | 合計1の確率ベクトル(割合の組) | 単体 | ディリクレ分布 |
| t | 小標本の平均(裾が重い正規) | $(-\infty, \infty)$ | t分布 |
| カイ二乗 | 正規変数の2乗和(分散の検定) | $[0, \infty)$ | カイ二乗分布 |
| F | 2つの分散の比(分散分析) | $[0, \infty)$ | F分布 |
| ワイブル | 故障・寿命(時間とともに変わる故障率) | $[0, \infty)$ | ワイブル分布 |
| パレート | 富の分布・べき則(極端な大値) | $[x_m, \infty)$ | パレート分布 |
| 対数正規 | 対数が正規(株価・所得) | $(0, \infty)$ | 対数正規分布 |
この2つの表は、「現象から分布を引く辞書」として使えます。たとえば「サポートへの問い合わせが1時間に何件来るか」ならポアソン、「電球が切れるまでの時間」ならワイブル、というように現象から分布へたどれます。
各分布の直感的なイメージ
表だけでは無味乾燥なので、主要な分布が「結局のところ何を表しているのか」を、できるだけ平易な言葉で押さえておきましょう。一つひとつのイメージがつかめると、表の中の位置づけも腑に落ちます。
ベルヌーイ分布は、すべての離散分布の出発点です。コインを1枚投げて表か裏かを記録する——ただそれだけの、もっとも単純な確率モデルです。成功確率 $p$ という1つのパラメータしか持ちませんが、これを組み合わせることで二項・幾何・負の二項といった分布が次々と生まれます。「成功か失敗か」という二択で表せる現象は、まずベルヌーイから考え始めます。
二項分布は、ベルヌーイ試行を $n$回繰り返したときの成功回数を表します。10本のフリースローのうち何本決まるか、100通のメールのうち何通が開封されるか、といった「試行回数が決まっている成功数」の典型です。試行回数 $n$ に上限があるため、成功回数も $0$ から $n$ までの有限の範囲に収まります。
ポアソン分布は、二項分布の「試行回数の上限」という制約を外したものだと考えると理解しやすくなります。1時間あたりの来店客数、1ページあたりの誤植の数、ある交差点での月間事故件数——「機会は無数にあるが、各回の発生はまれ」という現象を表します。平均と分散がともに $\lambda$ に等しいという美しい性質を持ちます。
幾何分布と負の二項分布は、視点を「成功回数」から「成功するまでに何回かかるか」へと反転させた分布です。幾何分布は初めて成功するまでの試行回数を、負の二項分布は $r$回成功するまでの試行回数を表します。負の二項分布は、ポアソンでは表せない「ばらつきの大きいカウントデータ(過分散)」のモデルとしても広く使われます。
正規分布は、連続分布の王様です。多数の独立な要因が足し合わさると、その合計は中心極限定理によって正規分布に近づきます。身長、測定誤差、テストの点数など、自然界や社会のいたるところに現れます。平均 $\mu$ で位置を、標準偏差 $\sigma$ で広がりを決める、左右対称の釣鐘型です。
指数分布とガンマ分布は、待ち時間の分布です。指数分布は「次の事象が起こるまでの時間」を、ガンマ分布は「$k$個の事象が起こるまでの時間」を表します。両者はポアソン分布と表裏一体で、ポアソン過程という同じ確率過程を「回数で見るか時間で見るか」の違いにすぎません。
ベータ分布とディリクレ分布は、「割合そのもの」を確率変数として扱う分布です。ベータ分布は $[0,1]$ の1つの割合(クリック率、勝率、不良率)を、ディリクレ分布は合計が1になる複数の割合の組(各カテゴリのシェア)を表します。ベイズ統計では、確率パラメータの事前・事後分布として欠かせません。
t分布・カイ二乗分布・F分布は、統計的検定のために生まれた分布です。t分布は小標本での平均の検定、カイ二乗分布は分散や適合度の検定、F分布は2つの分散の比(分散分析)に使われます。いずれも正規分布を出発点として、和や2乗和、比をとることで導かれます。
このように、各分布は「何を測りたいか」という問いと固く結びついています。次は、これらの分布がどう生まれ、どうつながっているのかという「家系図」を見ていきましょう。これらの分布はバラバラに存在しているわけではなく、互いに深い親戚関係を持っています。
分布間の関係図——確率分布の家系図
確率分布を一つずつ覚えるのが大変なのは、それらを孤立した存在だと思っているからです。実際には、多くの分布は別の分布から「極限をとる」「和をとる」「正規化する」といった操作で生まれます。この家系図を知ると、記憶の負担が一気に減ります。

この関係図の矢印は、色で操作の種類を表しています。赤は「離散の極限・和」、青は「待ち時間・2乗和」、緑は「検定統計量への変換」、紫は「正規化」です。代表的な関係を言葉で整理すると次のようになります。
- ベルヌーイ → 二項: ベルヌーイ試行を $n$回繰り返した成功回数の和が二項分布です。
- 二項 → ポアソン: $n \to \infty$ かつ $np \to \lambda$ 一定とすると、二項分布はポアソン分布に収束します(少数の法則)。
- ベルヌーイ → 幾何 → 負の二項: 初成功までの回数が幾何分布、$r$回成功までの回数が負の二項分布です。
- ポアソン → 指数 → ガンマ: ポアソン過程で事象が起こるまでの待ち時間が指数分布、$k$個の事象が起こるまでが(形状 $k$の)ガンマ分布です。
- ガンマ ↔ カイ二乗: 形状 $k=\nu/2$、尺度 $\theta=2$ のガンマ分布がカイ二乗分布です。カイ二乗は標準正規変数の2乗和でもあります。
- t → 正規: t分布は自由度 $\nu \to \infty$ で正規分布に収束します。
- ガンマ → ベータ: 2つの独立なガンマ変数 $X, Y$ から $X/(X+Y)$ を作るとベータ分布になります。
これらの関係は単なる豆知識ではなく、実務に直結します。たとえば「カウントデータの待ち時間モデルを作りたい」と思ったとき、ポアソンと指数・ガンマが裏で同じ過程を見ていると知っていれば、整合的なモデルが組めます。これらの関係をさらに深掘りしたい方は、分布間の関係を導出と数値実験で確かめる を参照してください。
文章だけでは半信半疑かもしれません。代表的な2つの関係——「二項 → ポアソン」と「t → 正規」——を、実際にPythonで数値的に確かめてみましょう。
関係を数値で確かめる
二項分布はポアソン分布に収束する
まずは、二項分布の試行回数 $n$ を増やしながら平均 $np = \lambda$ を一定に保つと、本当にポアソン分布に近づくのかを確認します。平均を $\lambda = 4$ に固定し、$n$ を $8, 40, 200$ と増やしていきます。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# 日本語フォント設定
import matplotlib
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
plt.rcParams["font.family"] = cand
break
plt.rcParams["axes.unicode_minus"] = False
lam = 4.0
k = np.arange(0, 14)
plt.figure(figsize=(9, 5))
plt.bar(k - 0.25, stats.poisson.pmf(k, lam), width=0.18,
color="#e45756", label="ポアソン $\\lambda=4$")
for n, off, c in [(8, -0.05, "#9ecae1"), (40, 0.15, "#4292c6"), (200, 0.35, "#084594")]:
p = lam / n
plt.bar(k + off, stats.binom.pmf(k, n, p), width=0.18, color=c,
label=f"二項 $n={n}, p={p:.3f}$")
plt.xlabel("回数 $k$"); plt.ylabel("確率")
plt.title("二項分布はポアソン分布に収束する")
plt.legend(); plt.grid(alpha=0.3)
plt.show()
# 各nでのポアソンとの最大誤差を表示
for n in [8, 40, 200]:
p = lam / n
diff = np.max(np.abs(stats.binom.pmf(k, n, p) - stats.poisson.pmf(k, lam)))
print(f"n={n:3d}: ポアソンとの最大誤差 = {diff:.4f}")

このグラフと出力から、$n$ を大きくするほど二項分布の棒がポアソン分布(赤)にぴたりと重なっていくのが読み取れます。最大誤差は $n=8$ では約 $0.08$ ですが、$n=40$ で約 $0.01$、$n=200$ では約 $0.002$ まで小さくなります。これが「まれな事象($p$ が小さい)を多数回($n$ が大きい)試すとポアソン分布になる」という少数の法則の数値的な裏付けです。だからこそ、交通事故件数やサーバへのアクセス数のように「機会は無数にあるが各回の発生確率は小さい」現象はポアソン分布でうまくモデル化できます。
t分布は自由度を上げると正規分布になる
次に、t分布の自由度 $\nu$ を上げると正規分布に近づくことを確認します。これは「標本サイズが大きくなれば、t検定はz検定(正規近似)と一致する」という統計の基本事実に対応します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
x = np.linspace(-5, 5, 400)
plt.figure(figsize=(9, 5))
plt.plot(x, stats.norm.pdf(x), color="black", lw=2.5, ls="--", label="正規分布")
for nu, c in [(1, "#fdae61"), (3, "#f46d43"), (10, "#74add1"), (30, "#4575b4")]:
plt.plot(x, stats.t.pdf(x, nu), color=c, lw=1.8, label=f"$t$分布 $\\nu={nu}$")
plt.xlabel("$x$"); plt.ylabel("確率密度")
plt.title("自由度 $\\nu$ を上げると $t$分布は正規分布に近づく")
plt.legend(); plt.grid(alpha=0.3)
plt.show()
# 裾の確率を比較(|x|>3 になる確率)
for nu in [1, 3, 10, 30]:
tail = 2 * stats.t.sf(3, nu)
print(f"nu={nu:2d}: P(|x|>3) = {tail:.4f}")
print(f"正規 : P(|x|>3) = {2*stats.norm.sf(3):.4f}")

このグラフから、自由度が小さいほどt分布の裾が厚く、中心が低いことがわかります。出力を見ると、$|x|>3$ となる確率は自由度1(コーシー分布に一致)で約 $0.20$ ですが、自由度を上げると急速に小さくなり、正規分布の値 $0.0027$ に近づきます。つまり自由度が小さいときのt分布は「外れ値が出やすい」分布であり、これが小標本での推定の不確実性を表現しています。逆に自由度が大きければ正規分布とほぼ同じです。
数値で関係が確かめられたところで、いよいよ実践的な問いに移りましょう。「目の前のデータに、結局どの分布を当てはめればよいのか」という問題です。
使い分けフローチャート
分布選びは、いくつかの問いに順番に答えていくだけで体系的に絞り込めます。次のフローチャートは、データの性質から候補分布へたどり着く道筋を示しています。

このチャートの使い方を、いくつかの典型例で見てみましょう。
- 「1週間あたりのクレーム件数」: データの型は離散・カウント → 回数を数える → 試行回数の上限がない → ポアソン分布。もし分散が平均より大きい(過分散)なら 負の二項分布 を検討します。
- 「10問のテストで何問正解したか」: 離散・カウント → 試行回数 $n=10$ が固定 → 二項分布。
- 「コールセンターで次の電話が来るまでの時間」: 連続・測定値 → 非負の待ち時間 → 指数分布(複数件まとめてならガンマ分布)。
- 「広告のクリック率(0〜1の割合)」: 連続・測定値 → $[0,1]$ の割合 → ベータ分布。
- 「製品の寸法誤差」: 連続・測定値 → 待ち時間でも割合でもない → 正規分布。
このフローは万能ではありませんが、最初の当たりをつけるには十分です。実際の分析では、フローチャートで2〜3個の候補に絞ったあと、次の手順で最終決定します。まずデータのヒストグラムを描き、候補分布のPDF/PMFを重ねて目で見て妥当性を確認します。次に最尤法でパラメータを推定し、Q-Qプロット(理論分位点と標本分位点を比較する図)で裾までよく合っているかを見ます。最後にカイ二乗適合度検定やコルモゴロフ・スミルノフ検定で、当てはまりを定量的に評価します。
注意したいのは、「現実のデータが特定の分布に厳密に従うことはほとんどない」という点です。分布はあくまで現実を近似する道具であり、目的に対して十分な精度で説明できれば成功です。複数の候補が同程度に当てはまる場合は、解釈のしやすさや後段の計算のしやすさ(共役性など)で選ぶのが実務的です。
ところで、選んだ分布が「カウントか待ち時間か割合か」だけでなく「分散の振る舞い」でも区別できる場面があります。離散分布の代表3つを、平均をそろえて比べてみましょう。
平均が同じでも形は違う——分散で選ぶ
離散のカウントデータをモデル化するとき、ポアソン・二項・負の二項のどれを選ぶかは、しばしば「平均と分散の関係」で決まります。3つの分布を平均 $5$ にそろえて並べてみます。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
k = np.arange(0, 20)
mean = 5.0
plt.figure(figsize=(9.5, 5))
# ポアソン: 分散 = 平均
plt.bar(k - 0.25, stats.poisson.pmf(k, mean), width=0.2,
label="ポアソン(分散=平均)", color="#4c78a8")
# 二項: 分散 < 平均(過小分散)
n, p = 20, mean / 20
plt.bar(k - 0.05, stats.binom.pmf(k, n, p), width=0.2,
label="二項(分散<平均)", color="#54a24b")
# 負の二項: 分散 > 平均(過分散)
r = 3.0
pp = r / (r + mean)
plt.bar(k + 0.15, stats.nbinom.pmf(k, r, pp), width=0.2,
label="負の二項(分散>平均, 過分散)", color="#e45756")
plt.xlabel("回数 $k$"); plt.ylabel("確率")
plt.title("平均はすべて 5:分散の違いで分布を選ぶ")
plt.legend(); plt.grid(alpha=0.3)
plt.show()
# 各分布の分散を表示
print(f"ポアソン : 平均={mean:.2f}, 分散={mean:.2f}")
print(f"二項 : 平均={n*p:.2f}, 分散={n*p*(1-p):.2f}")
nb_var = r * (1 - pp) / pp**2
print(f"負の二項 : 平均={r*(1-pp)/pp:.2f}, 分散={nb_var:.2f}")

このグラフと出力から、平均が同じ $5$ でも分布の幅がまったく異なることがわかります。二項分布は分散 $3.75$ ともっとも幅が狭く(試行回数の上限があるため)、ポアソンは分散 $5$(平均と等しい)、負の二項は分散 $13.3$ ともっとも幅が広く裾を引きます。実データのカウントは「平均より分散が大きい(過分散)」ことが多く、その場合ポアソンでは当てはまりが悪いため、負の二項分布が選ばれます。この「平均と分散の比較」は、分布選びの強力な判断材料です。
分布を選んだら、次はそのパラメータを推定する段階です。とくにベイズ統計では、ここで「共役事前分布」という強力な道具が登場します。
共役事前分布の対応表
ベイズ統計では、事前分布と尤度を掛けて事後分布を求めます。このとき、事前分布と事後分布が同じ種類の分布になるように事前分布を選ぶと、計算が積分なしの「パラメータの更新」だけで済みます。こうした都合のよい事前分布を共役事前分布と呼びます。どの尤度にどの共役事前が対応するかは、丸暗記の対象としてよく使われます。

この表から、ベイズ更新の「型」が読み取れます。たとえばコイン投げ(ベルヌーイ・二項)で成功確率 $p$ を推定するなら、事前にベータ分布を置けば事後もベータ分布になります。具体的には、事前 $\mathrm{Beta}(\alpha, \beta)$ に成功 $s$ 回・失敗 $f$ 回を観測すると、事後は $\mathrm{Beta}(\alpha + s, \beta + f)$ となり、「成功数と失敗数を足すだけ」で更新できます。同様に、ポアソンの率 $\lambda$ にはガンマ分布、多項の確率ベクトルにはディリクレ分布が対応します。
具体例で考えてみましょう。あるバナー広告のクリック率を推定したいとします。事前知識がほとんどないので、一様分布に相当する $\mathrm{Beta}(1, 1)$ を事前分布とします。広告を100回表示して8回クリックされたとすると、成功 $s=8$、失敗 $f=92$ ですから、事後分布は $\mathrm{Beta}(1+8,\ 1+92) = \mathrm{Beta}(9, 93)$ になります。事後平均は $9/(9+93) \approx 0.088$ で、観測されたクリック率 $0.08$ に近い値です。積分計算は一切なく、ただ観測数を足すだけでベイズ更新が完了します。これが共役性のありがたみです。共役でない事前分布を選ぶと、事後分布が解析的に求まらず、MCMCなどの数値計算に頼らざるをえなくなります。
この対応関係を頭に入れておくと、「割合の推定にはベータ、率の推定にはガンマ」というように、ベイズモデルを組むときの事前分布選びが反射的にできるようになります。
この仕組みの背景には指数型分布族という統一的な枠組みがあります。詳しく学びたい方は 指数型分布族とは何か や、具体例として ベルヌーイ分布のベイズ推論、ディリクレ・カテゴリカルの共役関係 を参照してください。
ベイズの道具がそろったところで、連続分布のもう一つの重要な観点——「裾の重さ」を見ておきましょう。これはリスク評価や外れ値の扱いで決定的に重要になります。
裾の重さで分布を選ぶ
正規分布は便利ですが、現実のデータには「正規分布では説明できないほど極端な値」がしばしば現れます。金融の暴落、地震の規模、都市の人口、SNSの拡散数などは、正規分布よりもずっと裾の重い分布に従います。裾の重さを比較してみましょう。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
x = np.linspace(0.01, 10, 500)
fig, axes = plt.subplots(1, 2, figsize=(12, 4.8))
for ax, scale_log in zip(axes, [False, True]):
ax.plot(x, stats.norm.pdf(x, 2, 1), label="正規", lw=2)
ax.plot(x, stats.lognorm.pdf(x, 0.7, scale=np.exp(0.7)), label="対数正規", lw=2)
ax.plot(x, stats.pareto.pdf(x, 2.5, scale=1), label="パレート", lw=2)
ax.plot(x, 2 * stats.cauchy.pdf(x, 2, 1), label="コーシー(半分)", lw=2, ls="--")
ax.set_xlabel("$x$"); ax.set_ylabel("密度")
ax.legend(fontsize=9); ax.grid(alpha=0.3)
if scale_log:
ax.set_yscale("log")
ax.set_title("対数スケール(裾の重さが見える)")
else:
ax.set_title("通常スケール")
fig.suptitle("裾の重さの比較:正規 < 対数正規 < パレート・コーシー", fontsize=14)
fig.tight_layout()
plt.show()
# x=8 での密度を比較
print(f"正規 の x=8 密度: {stats.norm.pdf(8, 2, 1):.2e}")
print(f"対数正規 の x=8 密度: {stats.lognorm.pdf(8, 0.7, scale=np.exp(0.7)):.2e}")
print(f"パレート の x=8 密度: {stats.pareto.pdf(8, 2.5, scale=1):.2e}")

左の通常スケールでは違いが見えにくいですが、右の対数スケールでは裾の重さが一目瞭然です。出力を見ると、$x=8$ での密度は正規分布が $6 \times 10^{-9}$ とほぼゼロなのに対し、パレート分布は $10^{-3}$ 程度と5桁以上も大きい値を持ちます。対数正規も $10^{-2}$ 程度の密度を保っています。つまり正規分布では「ありえない」ような極端な値が、パレートやコーシーでは現実的な確率で起こります。リスク管理で正規分布を安易に使うと極端事象を大幅に過小評価してしまう——これが裾の重い分布を学ぶ理由です。所得や株価には対数正規、べき則的な現象にはパレート、というように、裾の振る舞いも分布選びの重要な軸になります。
ここまでで分布の選び方が一通りそろいました。最後に、これらの分布を実際にPythonで扱うための対応表をまとめておきます。
scipy.stats での対応表
Pythonで確率分布を扱うなら scipy.stats が標準です。各分布には共通のメソッドが用意されています。
pdf(x)/pmf(k): 確率密度・確率質量cdf(x): 累積分布関数ppf(q): 分位点(cdfの逆関数)rvs(size=n): 乱数生成mean(),var(): 平均・分散
主要分布の scipy.stats での名前は次の通りです。
| 分布 | scipy.stats の名前 | 主な引数 |
|---|---|---|
| ベルヌーイ | bernoulli |
p |
| 二項 | binom |
n, p |
| ポアソン | poisson |
mu(=$\lambda$) |
| 幾何 | geom |
p |
| 負の二項 | nbinom |
n, p |
| 超幾何 | hypergeom |
M, n, N |
| 多項 | multinomial |
n, p |
| 一様 | uniform |
loc, scale |
| 正規 | norm |
loc, scale |
| 指数 | expon |
scale(=$1/\lambda$) |
| ガンマ | gamma |
a, scale |
| ベータ | beta |
a, b |
| ディリクレ | dirichlet |
alpha |
| t | t |
df |
| カイ二乗 | chi2 |
df |
| F | f |
dfn, dfd |
| ワイブル | weibull_min |
c, scale |
| パレート | pareto |
b |
| 対数正規 | lognorm |
s, scale |
| コーシー | cauchy |
loc, scale |
実際の使い方は次のように共通です。
from scipy import stats
# 例: ポアソン分布(lambda=4)
dist = stats.poisson(mu=4)
print("P(X=2) =", dist.pmf(2)) # 確率質量
print("P(X<=3) =", dist.cdf(3)) # 累積確率
print("平均, 分散 =", dist.mean(), dist.var())
print("乱数5個 =", dist.rvs(size=5, random_state=0))
# 例: ベータ分布(alpha=2, beta=5)
b = stats.beta(a=2, b=5)
print("ベータの平均 =", b.mean()) # = a/(a+b) = 2/7
print("中央値 =", b.ppf(0.5)) # 分位点
このように、分布の名前さえわかれば、あとは共通のインターフェースで確率計算・乱数生成・分位点計算がすべて行えます。scipy.stats の引数(とくに scale のとり方)は分布ごとに微妙に異なるので、各分布の個別記事で定義式と引数の対応を確認しておくと安心です。
これで確率分布の地図が一通りそろいました。最後に全体を振り返り、学習の道筋を示します。
まとめ
本記事では、確率分布の全体像を地図・関係図・フローチャートで整理しました。
- 全体マップ: 分布は「離散/連続」「台の範囲」「次元」の3軸で分類できる
- 現象との対応: 各分布は「カウント」「待ち時間」「割合」など特定の現象とセットで覚える
- 関係図: 二項→ポアソン、指数→ガンマ、t→正規など、分布は極限・和・正規化でつながる家系図を持つ
- 使い分け: フローチャートで候補を絞り、平均と分散の関係や裾の重さで最終決定する
- ベイズと実装: 共役事前分布の対応表と
scipy.statsの対応表が実務の武器になる
確率分布は暗記するものではなく、「地図の上で位置づける」ものです。新しい分布に出会ったら、まずこの地図のどこに住んでいるか(離散か連続か、台はどこか、どの分布の親戚か)を確かめる習慣をつけると、理解が一気に立体的になります。
学習の推奨順序としては、まず基礎となる 正規分布 と ベルヌーイ分布 を固め、次にカウント系(二項 → ポアソン → 負の二項)と待ち時間系(指数 → ガンマ)を関係図とともに学ぶのがおすすめです。割合・ベイズに進むなら ベータ分布 と ディリクレ分布 を、検定に進むなら カイ二乗分布・t分布・F分布 を押さえましょう。分布どうしのつながりをさらに深く知りたい方は 分布間の関係まとめ へ進んでください。