【統計・機械学習】確率変数と確率分布について徹底解説

サイコロを振ったら何が出るか、明日の最高気温が何度になるか、ある患者が薬に反応するかどうか。世の中には「やってみるまで結果がわからない」現象があふれています。こうした 不確実な現象を数学で扱うための言語 が、確率変数と確率分布です。

統計や機械学習の勉強を始めると、ほぼ最初のページで「確率変数 $X$ が分布 $p(x)$ に従う」という表現に出会います。ところがこの「確率変数」という言葉、名前に「変数」とついているのに、中身は $x=1$ のような単なる数字ではありません。ここでつまずくと、その後に登場する期待値・分散・最尤推定・ベイズ推定のすべてが砂上の楼閣になってしまいます。

逆に言えば、確率変数と確率分布をしっかり押さえておくと、応用が一気に広がります。たとえば次のような場面です。

  • 機械学習の損失関数: ロジスティック回帰やニューラルネットワークの学習は、「データが従う確率分布」を仮定し、その分布のもとでデータが観測される確率(尤度)を最大化する、という枠組みで定式化されます。確率分布を知らずにこの式を読むことはできません。
  • 異常検知・品質管理: センサーの測定値が「いつもの分布」からどれだけ外れているかを確率密度で測ることで、故障や異常を自動検出できます。
  • シミュレーションとリスク評価: 金融のリスク、通信路のノイズ、ロケットの飛行誤差。これらはすべて確率分布からのサンプリングとして表現され、モンテカルロ法で評価されます。

本記事の内容

  • 確率変数(離散・連続)の直感と正確な定義
  • 確率質量関数 PMF と確率密度関数 PDF の違い、そして「面積こそ確率」という見方
  • 累積分布関数 CDF と、PDF・CDF の双対的な関係
  • 確率の正規化(全部足すと 1 になる)という大原則
  • 期待値・分散への自然な接続、代表的な分布のギャラリー
  • matplotlib / scipy を使った Python での実装と可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。読まなくても本記事だけで完結するように書いていますが、より深く知りたい場合の参考にしてください。

確率変数とは — 「結果」を「数値」に変える写像

まず、確率変数を直感的にイメージしましょう。コインを2枚投げる、という試行を考えます。結果は「表表」「表裏」「裏表」「裏裏」の4通りです。この「表表」という結果そのものは数字ではないので、足したり平均をとったりできません。

そこで「表が出た枚数」というルールを決めると、それぞれの結果に数字が割り当てられます。表表なら 2、表裏と裏表なら 1、裏裏なら 0 です。この 「試行の結果を数値に対応づけるルール」こそが確率変数 です。記号では大文字の $X$ で書きます。

つまり確率変数とは、$x=3$ のような「決まった一つの値」ではなく、結果の集合から実数への関数(写像) なのです。初学者が「変数という名前なのに変数っぽくない」と混乱する最大の原因はここにあります。確率変数は「値」ではなく「結果を数値化する仕組み」だと理解してください。

なぜわざわざ結果を数値に変えるのか、と疑問に思うかもしれません。理由はシンプルで、数値にしないと計算ができない からです。「表表」という結果のままでは平均もばらつきも定義できませんが、「表の枚数」という数値に変換すれば、平均(期待値)やばらつき(分散)を計算できます。確率変数は、雑多な現実の結果を「数学で料理できる形」に整える、いわば翻訳機なのです。そして、同じ試行に対して確率変数の決め方は一通りではありません。コイン2枚なら「表の枚数」のほかに「表が出たら賞金1000円、裏なら0円」のように賞金額を割り当てる確率変数も作れます。何に注目したいかに応じて、確率変数を自由に設計できる、という柔軟さも覚えておきましょう。

確率変数は試行の結果を数値に対応づける写像

上の図は、左の「標本空間(試行の結果の集合)」から右の「実数値」へ矢印が伸びている様子を表しています。表裏と裏表という2つの異なる結果が、ともに「表1枚」として同じ値 1 に写されている点に注目してください。確率変数は1対1の対応である必要はなく、複数の結果を同じ数値にまとめてもよいのです。

少し言葉を整理しておきます。試行で起こりうる結果すべての集合、あるいは確率変数 $X$ がとりうる値の範囲を 標本空間(sample space) と呼びます。サイコロなら標本空間は $\{1,2,3,4,5,6\}$、上のコイン2枚の例(表の枚数)なら $\{0,1,2\}$ です。

ここで、表記についての約束も押さえておきましょう。確率変数そのものは大文字の $X$ で表し、その確率変数が具体的にとった値は小文字の $x$ で書く、という慣習があります。たとえば「サイコロを振ったら $X$ が値 $x$ をとった」のように使います。さらに、確率を表す記号にも大文字 $P$ と小文字 $p$ が出てきて、これも初学者を悩ませるポイントです。大文字の $P(X=x)$ は「確率変数 $X$ が特定の値 $x$ をとる確率」という一点の確率を指し、小文字の $p(x)$ は「$x$ を入れると確率(密度)を返す関数」、つまり分布全体を表す関数として使われることが多いです。本記事でもこの使い分けに従います。統計の教科書で大文字と小文字が混在していて戸惑ったら、「大文字は一点の確率、小文字は関数全体」と思い出してください。

ここで自然な疑問が湧きます。サイコロやコインのように「とびとびの値」をとる確率変数だけでなく、身長や気温のように「連続的な値」をとる確率変数もあるはずです。両者は数学的にかなり扱いが違うので、次の節で区別を明確にしておきましょう。

離散確率変数と連続確率変数

確率変数は、とりうる値の性質によって2種類に分かれます。

ひとつは 離散確率変数 です。サイコロの目 $\{1,2,3,4,5,6\}$ のように、とびとびの値(多くは整数)をとるものを指します。値を一つずつ数え上げられるのが特徴です。

もうひとつは 連続確率変数 です。ある学校の生徒の身長や体重を考えてみてください。身長は 170 cm のような切りのいい値だけでなく、170.3 cm でも 170.314 cm でも、原理的には無限の精度であらゆる実数値をとりえます。このように、ある区間の中の任意の実数値をとる確率変数を連続確率変数と呼びます。

離散確率変数と連続確率変数の対比

左はサイコロ(離散)で、6本の棒がそれぞれ $1/6$ の高さで立っています。右は成人の身長(連続)で、なめらかな曲線として表されています。離散では「各値に確率の棒が立つ」のに対し、連続では「曲線が広がる」という見た目の違いを覚えておくと、後の PMF と PDF の話がスッと入ってきます。

ここで連続確率変数には、初学者を最も悩ませる事実があります。連続確率変数では「ちょうどその値をとる確率」はゼロになる のです。身長がちょうど 170.0000… cm(無限桁まで 0)になる確率は、無限に細かい目盛りの中の一点を当てるようなもので、限りなく 0 になります。「確率がゼロなのに、身長は必ず何かの値をとるじゃないか」という矛盾めいた感覚こそ、連続の世界を理解する鍵です。この謎は、確率密度関数 PDF を学ぶと氷解します。

もう少し身近な例で離散と連続のイメージを固めておきましょう。離散確率変数の例としては、サイコロの目のほかに、コインの表裏(成功か失敗か)、1日にかかってくる電話の本数、アンケートで「とても良い/良い/普通/悪い」のどれを選ぶか、といったものがあります。いずれも「数えられる」「とびとび」という共通点があります。一方、連続確率変数の例としては、身長・体重・気温・電圧・反応時間・部品の寿命などが挙げられます。これらは「ものさしで測る」量で、いくらでも細かい値をとりえます。「数えるか、測るか」を意識すると、どちらの確率変数かを見分けやすくなります。

機械学習では離散と連続で扱い方が大きく変わります。たとえば離散なら確率を「足し算」しますが、連続なら「積分」します。クラス分類の問題(離散ラベル)と回帰の問題(連続値)で損失関数の形が違うのも、根っこをたどればこの離散・連続の違いに行き着きます。いま考えている確率変数がどちらなのかを、常に意識する習慣をつけましょう。まずは扱いやすい離散から、その確率を表す関数を見ていきます。

確率質量関数 PMF — 離散の世界の確率

離散確率変数では「それぞれの値がどれくらいの確率で出るか」を、一覧表のように対応づけられます。たとえばサイコロなら次の表です。

X = 1 X = 2 X = 3 X = 4 X = 5 X = 6
$\frac{1}{6}$ $\frac{1}{6}$ $\frac{1}{6}$ $\frac{1}{6}$ $\frac{1}{6}$ $\frac{1}{6}$

この「値 $\to$ 確率」の対応を関数として書いたものが 確率質量関数(Probability Mass Function, PMF) です。記号では $p(x)$ や $P(X=x)$ と書きます。直感的には「それぞれの値に、どれだけの確率の質量(重み)が乗っているか」を表す関数だと思ってください。サイコロなら

$$ p(x) = P(X = x) = \frac{1}{6}, \quad x \in \{1,2,3,4,5,6\} $$

です。各目に等しく $1/6$ の質量が乗っているわけです。

「質量」という言葉が使われるのは、物理のアナロジーから来ています。離散の世界では、それぞれの値(点)に確率という「重さ」がポツン、ポツンと乗っているイメージです。後で見る連続の「密度」が連続的に塗られた濃さであるのに対し、離散の「質量」は点に集中した重みだ、という対比で覚えると、PMF と PDF の名前の違いも腑に落ちます。

PMF が満たすべき性質は2つだけです。ひとつは どの値の確率も非負 であること、つまり

$$ p(x) = P(X=x) \geq 0 $$

です。確率がマイナスになることはありえません。もうひとつは すべての値の確率を足すと 1 になる ことで、

$$ \sum_{x} p(x) = 1 $$

と書きます。サイコロなら $1/6$ が6個で $6 \times \frac{1}{6} = 1$、ちゃんと 1 になります。この「全部足すと 1」という性質は、確率の世界の根幹をなす 正規化条件 です。あとで連続の場合と合わせて改めて掘り下げます。

PMF をもう少し面白い例で見てみましょう。コインを10回投げて表が出る回数 $X$ は、二項分布という分布に従います。

二項分布の確率質量関数 PMF

この図は二項分布($n=10$、表の確率 $p=0.4$)の PMF です。各棒の高さが「その回数だけ表が出る確率」を表しています。たとえば「表が4回」のところが最も高く、確率は約 $0.251$ です(後の Python 節で数値を確認します)。すべての棒の高さを足すと、ぴったり 1 になります。離散の世界では 棒の高さがそのまま確率 である、という点が決定的に重要です。

ところが連続確率変数では、先ほど述べたように「ちょうどその値をとる確率」が 0 でした。つまり棒の高さ=確率という発想が通用しません。では連続の確率はどう表せばよいのか。ここで登場するのが確率密度関数です。

確率密度関数 PDF — 連続の世界では「面積」が確率

連続確率変数で「身長がちょうど 170 cm の確率」を聞かれると 0 でした。しかし「身長が 169 cm から 171 cm の 範囲に入る 確率」なら、ちゃんと意味のある正の値になります。連続の世界では、点ではなく 区間 で確率を考えるのです。

この発想を支えるのが 確率密度関数(Probability Density Function, PDF) です。記号は離散と同じく $f(x)$ や $p(x)$ を使います。ポイントは、PDF の値 $f(x)$ そのものは確率ではない、ということです。$f(x)$ は「密度」、つまり単位区間あたりの確率の濃さを表します。

ここで初学者が最も間違えやすい点を強調しておきます。「PDF の値が 0.4 だから、確率は 40% だ」というのは 誤り です。$f(x)=0.4$ はあくまで「その付近の確率の濃さが 0.4」という意味で、確率そのものではありません。確率を取り出すには、密度を区間にわたって積分(=面積を計算)する必要があります。

$$ P(a \leq X \leq b) = \int_a^b f(x)\, dx $$

つまり連続の世界では、確率は曲線の下の面積 として現れます。

確率密度関数 PDF では確率は曲線の下の面積

上の図は標準正規分布の PDF で、$0.5 \leq X \leq 1.5$ の区間を塗りつぶしています。この塗りつぶした 面積 が、$X$ がこの区間に入る確率に等しく、値は約 $0.242$ です。縦軸の値(密度)が 1 を超えることすらあり得ますが、それでも面積(確率)は 0 から 1 の間に収まります。密度と確率を混同しないことが、連続確率変数を理解する第一歩です。

なぜ「密度」という見方が必要なのか、もう少し直感を補強しておきましょう。物理の質量を思い出してください。鉄の棒のある一点に存在する質量は 0 ですが、「線密度(kg/m)」を長さにわたって積分すれば、区間内の質量が出てきます。確率密度はこれと完全に同じ構造です。点には確率が乗らないが、密度を区間で積分すれば確率が出る、というわけです。実際、確率密度関数の単位を考えると「確率 ÷ $x$ の単位」になっており、たとえば身長(cm)の確率密度の単位は「1/cm」です。これは密度が確率そのものではなく、$x$ で割った濃さの量であることを物語っています。

ここで「点の確率が 0 になる」ことの面白い帰結も触れておきます。連続確率変数では、不等号に等号を含めても含めなくても確率は変わりません。つまり $P(a \leq X \leq b) = P(a < X < b)$ が成り立ちます。両端の点 $a$、$b$ それぞれの確率が 0 なので、含めても含めなくても結果は同じなのです。離散の場合は端点の確率が 0 ではないので、この性質は成り立ちません。離散と連続で確率の扱いがどう違うかを示す、典型的な例です。

では、離散のヒストグラムと連続の PDF は、本当に地続きなのでしょうか。実は、ヒストグラムの刻みをどんどん細かくしていくと PDF が立ち現れます。この橋渡しを次に見ます。

ヒストグラムから PDF へ — 両者をつなぐ橋

たくさんのデータを集めてヒストグラムを描くと、棒の高さでデータの「出やすさ」が見えてきます。このとき棒の幅を狭くしていくと何が起こるでしょうか。

ヒストグラムを細かくしていくと PDF に近づく

3枚のパネルは、同じ正規乱数 5000 個に対してビン幅を変えたものです。左の粗いビンではガタガタですが、右に行くほど(ビン幅を 0 に近づけるほど)滑らかになり、オレンジの理論 PDF にぴったり重なっていきます。これがまさに「離散的なヒストグラム」から「連続的な PDF」が生まれる瞬間です。

ここで density(密度)として描くために、ヒストグラムの各棒の高さは「頻度 ÷(全データ数 × ビン幅)」で正規化されています。こうすると棒の 面積の合計が 1 になり、PDF と同じ土俵に乗ります。PMF が「高さ=確率」だったのに対し、PDF・正規化ヒストグラムは「面積=確率」になる、という対比をここで完全に押さえておきましょう。

この「細かくしていく」操作は、数学的には積分そのものです。区間 $[x, x+\Delta x]$ にデータが入る確率は、ビン幅 $\Delta x$ が十分小さければ $f(x)\,\Delta x$(密度 × 幅 = 細い長方形の面積)で近似できます。これをたくさん足し合わせれば区間全体の確率になり、$\Delta x \to 0$ の極限で積分 $\int f(x)\,dx$ に一致します。つまり、ヒストグラムの棒を無限に細くしていく操作が、和を積分に変える操作と完全に対応しているのです。離散の「和」と連続の「積分」が地続きであることが、この図と式の両方から見て取れます。なお、限られたデータから滑らかな密度を推定する手法としては、ビン幅に依存しないカーネル密度推定(KDE)もよく使われます。

PDF が「区間の確率=面積」を与えてくれるなら、「ある値 $x$ 以下になる確率」を一気に与える関数があれば便利そうです。それが累積分布関数 CDF です。

累積分布関数 CDF — 「以下になる確率」を一望する

PDF や PMF は「その値ピンポイント」の話でしたが、実用では「$X$ が $x$ 以下になる確率」を知りたい場面が多くあります。たとえば「テストの点が60点以下の人の割合は?」「待ち時間が5分以内に収まる確率は?」といった問いです。

これに答えるのが 累積分布関数(Cumulative Distribution Function, CDF) で、$F(x)$ と書きます。定義はそのまま「$x$ 以下になる確率」です。

$$ F(x) = P(X \leq x) $$

連続の場合は、PDF を $-\infty$ から $x$ まで積分したもの、すなわち「左側の面積」として表せます。

$$ F(x) = \int_{-\infty}^{x} f(t)\, dt $$

この式は「PDF の左側を積み上げていったものが CDF」だと言っています。逆に、CDF を微分すれば PDF に戻ります。

$$ f(x) = \frac{dF(x)}{dx} $$

つまり PDF と CDF は 微分・積分で行き来できる、表裏一体の関係 にあります。

PDF の左側の面積が CDF の値

上のパネルは標準正規分布の PDF で、$x=1.0$ より左側を塗りつぶしています。下のパネルはその CDF で、$x=1.0$ における高さがちょうど上の塗りつぶし面積に一致し、値は約 $0.841$ です。PDF を左から積み上げた量が、そのまま CDF の高さになっている、という対応を視覚的に確認できます。

CDF には3つの基本性質があります。第一に、確率は 0 から 1 の間なので、CDF も常に $0 \leq F(x) \leq 1$ に収まります。第二に、$x$ が大きくなれば「以下になる確率」は増える一方なので、CDF は 単調増加 です(減ることはありません)。第三に、左端 $x \to -\infty$ で $F(x) \to 0$、右端 $x \to +\infty$ で $F(x) \to 1$ に達します。この「右端で 1」という事実は、確率変数が必ず何らかの値をとる以上、当然のことです。これは前から何度か触れてきた「全部足すと 1」という正規化条件の、CDF 版の表れにほかなりません。

CDF が実用で重宝するのは、「区間の確率」を引き算一発で出せるからです。$P(a \leq X \leq b) = F(b) – F(a)$ と書けるので、PDF を毎回積分しなくても、CDF の値さえあれば任意の区間の確率がわかります。先ほどの Python での例でも、$0.5 \leq X \leq 1.5$ の確率を cdf(1.5) - cdf(0.5) という CDF の差で求めました。さらに、CDF を逆向きにたどる関数(分位点関数・逆関数)を使えば、「上位 5% の境界はどこか」「中央値はいくつか」といった問いにも答えられます。離散の場合の CDF は階段状(とびとびに値が跳ね上がる)になりますが、「以下になる確率を積み上げる」という意味は連続とまったく同じです。次はこの正規化を、離散・連続をまたいで正面から扱います。

確率の正規化 — 全部足す・積分すると必ず 1

確率分布が「確率分布」であるための最も基本的な約束が、全体を集めると 1 になる という正規化条件です。これは「何かしらの結果は必ず起こる(確率 1)」という当たり前の事実を数式にしたものです。

離散の場合は、すべての値の確率を足します。

$$ \sum_{x} p(x) = 1 $$

連続の場合は、PDF を全範囲にわたって積分します。

$$ \int_{-\infty}^{\infty} f(x)\, dx = 1 $$

足し算が積分に変わっただけで、「全体を集めると 1」という精神はまったく同じです。離散と連続の最大の違いは、まさにこの「和か積分か」に集約されると言ってもよいでしょう。

確率の正規化: 全体を足す/積分すると必ず 1

左は離散(二項分布)で、すべての棒の高さを足すと 1 になります。右は連続(正規分布)で、曲線の下の全面積を数値積分すると、誤差を除いて 1 になります(後の Python 節で実際に計算します)。離散の「合計」と連続の「全面積」が、どちらも 1 という同じゴールに到達する点が、この図の主張です。

正規化条件には、もうひとつ実用上の重要な役割があります。確率分布の数式には、形だけ決めても正規化されていない「規格化前」の関数がよく登場します。そのとき「全体を積分して 1 になるように定数で割る」という操作(規格化)で、正式な確率分布に仕立て上げます。具体的には、正規化されていない関数を $\tilde{f}(x)$ とすると、正規化定数 $Z = \int_{-\infty}^{\infty} \tilde{f}(x)\,dx$ で割った $f(x) = \tilde{f}(x) / Z$ が正式な PDF になります。たとえば正規分布の式に出てくる $\frac{1}{\sqrt{2\pi}\sigma}$ という係数は、まさにこの正規化定数です。釣鐘型の $e^{-x^2/2}$ をそのまま積分すると $\sqrt{2\pi}$ になってしまうので、それで割って全面積を 1 に揃えているのです。ベイズ統計の事後分布などは、この正規化定数(周辺尤度)の計算が解析的に難しく、近似計算が研究テーマになるほど肝になります。逆に言えば、分布の「形」さえ決まれば、正規化定数は機械的に決まる、という見通しを持っておくと、複雑な分布の式に出会っても臆さずに済みます。

さて、分布の形がわかったら、次に知りたいのは「だいたいどのあたりに集まっているか」「どれくらいばらついているか」という要約です。これが期待値と分散です。

期待値と分散への接続

分布の全体像を一望できたら、次はその特徴を1〜2個の数字に要約したくなります。「平均的にはどのあたりの値になるか」を表すのが 期待値、「その平均からどれくらいばらつくか」を表すのが 分散 です。

期待値 $E[X]$ は、各値をその確率で重みづけして足し合わせた「重心」です。離散と連続で、和か積分かの違いだけがあります。

$$ E[X] = \sum_x x\, p(x) \quad \text{(離散)}, \qquad E[X] = \int_{-\infty}^{\infty} x\, f(x)\, dx \quad \text{(連続)} $$

たとえばサイコロの期待値は、$\frac{1}{6}(1+2+3+4+5+6) = 3.5$ です。3.5 という目は実際には存在しませんが、たくさん振ったときの平均値という意味で「期待される値」になります。記事末尾の Python では、実際にサイコロを何千回も振って、平均がこの 3.5 に近づくことを確かめます。

期待値の直感をもうひとつ。期待値はしばしば「賭けの公平性」を測る道具として使われます。たとえば「100円払うと、確率 $1/2$ で 250円もらえ、確率 $1/2$ で何ももらえないゲーム」の払戻しの期待値は $\frac{1}{2}\times 250 + \frac{1}{2}\times 0 = 125$ 円です。払う 100円より大きいので、このゲームは(払戻しの期待値で見れば)プレイヤーに有利だと言えます。このように期待値は、不確実な選択肢を一つの数字で比較するための、強力な意思決定の道具にもなります。

分散 $V[X]$ は、期待値からのズレの2乗の期待値です。ズレを2乗するのは、プラスのズレとマイナスのズレが打ち消し合わないようにするためです。

$$ V[X] = E\!\left[(X – E[X])^2\right] = \sum_x (x – \mu)^2 p(x) \quad (\mu = E[X]) $$

ここで右辺の総和を展開して整理すると、計算に便利な公式が得られます。$\mu$ は定数であることに注意して2乗を展開すると、

$$ V[X] = \sum_x (x^2 – 2\mu x + \mu^2)\, p(x) $$

となります。これを項ごとに分配すると、

$$ V[X] = \sum_x x^2 p(x) – 2\mu \sum_x x\, p(x) + \mu^2 \sum_x p(x) $$

になります。ここで $\sum_x x\, p(x) = \mu$(期待値の定義)、$\sum_x p(x) = 1$(正規化条件)を代入すると、

$$ V[X] = E[X^2] – 2\mu \cdot \mu + \mu^2 \cdot 1 = E[X^2] – \mu^2 $$

という有名な公式 $V[X] = E[X^2] – (E[X])^2$ にたどり着きます。導出の途中で、これまで学んだ「期待値の定義」と「正規化条件」がそのまま部品として効いている点に注目してください。

期待値は分布の重心、分散は広がりの大きさ

3本の正規分布はすべて重心(期待値)が $\mu=2$ で同じですが、分散が違います。分散が小さいほど鋭く尖り、大きいほど広く平たくなります。期待値が「どこを中心に分布しているか」、分散が「どれだけ散らばっているか」を表す、という役割分担がひと目でわかります。

分散にはもうひとつ実用上の注意点があります。分散 $V[X]$ は「ズレを2乗した量の平均」なので、単位も2乗になってしまいます。たとえば身長(cm)の分散は cm$^2$ という面積のような単位になり、直感的に解釈しづらいです。そこで分散の平方根をとった 標準偏差 $\sigma = \sqrt{V[X]}$ がよく使われます。標準偏差なら $x$ と同じ単位(cm)に戻るので、「平均から標準偏差ひとつぶんずれている」というように、ばらつきの大きさを元の量と同じスケールで語れます。正規分布では、平均 $\pm$ 標準偏差の範囲に約 68%、$\pm 2\sigma$ の範囲に約 95% のデータが入る、という有名な経験則もあり、標準偏差は分布の広がりを測る実質的な物差しになっています。

期待値と分散は分布を要約する2大指標です。より詳しい性質と導出は、専用の記事に譲ります。

ここまでで、確率分布の「形」と「要約」が揃いました。次は、実際の問題でよく登場する代表的な分布を一望しておきましょう。

代表的な確率分布のギャラリー

世の中の現象は、いくつかの典型的な確率分布で驚くほどうまく記述できます。最も有名なのは正規分布ですが、それ以外にも、目的に応じて使い分ける代表的な分布が数多くあります。これらの「顔」を覚えておくと、新しいモデルに出会ったときに「これはあの分布の組み合わせだな」と見通せるようになります。

代表的な確率分布: 離散と連続のギャラリー

上段が離散(青)、下段が連続(橙)です。上段左から、成功/失敗の2値を表すベルヌーイ分布、それを $n$ 回繰り返した二項分布、まれな事象の発生回数を表すポアソン分布。下段左から、最も基本的な正規分布、待ち時間などを表す指数分布、0〜1 の比率を表すベータ分布です。離散は棒、連続は曲線、という見た目の違いがここでも一貫しています。

それぞれの分布を簡単に紹介します。

基本的な離散確率分布

  • ベルヌーイ分布: コイン1枚のように、成功(1)か失敗(0)かの2値をとる、最も単純な分布です。
  • 二項分布: ベルヌーイ試行を独立に $n$ 回繰り返したとき、成功した回数の分布です。
  • ポアソン分布: 一定時間に「まれに起こる事象」が何回起きるか(例: 1時間あたりの来店客数)を表します。

基本的な連続確率分布

  • 正規分布: 測定誤差や身長など、多くの自然現象に当てはまる釣鐘型の分布。中心極限定理によって、さまざまな場面で自然に現れます。
  • 指数分布: 故障までの時間や待ち時間など、「次に何かが起こるまでの時間」を表します。
  • ベータ分布: 0 から 1 の間の値(比率や確率そのもの)を表すのに使われ、ベイズ統計で頻出します。
  • ガンマ分布: 待ち時間の和など、正の連続量を柔軟に表現できる分布です。

これらの分布には、互いに深いつながりがあります。たとえばベルヌーイ分布を $n$ 回繰り返すと二項分布になり、二項分布で試行回数 $n$ を非常に大きく、成功確率 $p$ を非常に小さく保ったまま極限をとるとポアソン分布になります。さらに、二項分布も試行回数を増やすと正規分布に近づいていきます(中心極限定理の一例)。このように、一見バラバラに見える分布が、極限操作や繰り返しを通じて互いに変身しあう、というのが確率分布の世界の面白さです。一つひとつの分布を孤立して覚えるのではなく、「どの分布がどの分布の親戚なのか」という関係図を意識すると、記憶も理解も格段に楽になります。

これらの分布は、より複雑な統計モデルや機械学習モデルの「部品」としても組み合わされます。たとえば混合ガウスモデルは複数の正規分布の重ね合わせですし、ベイズ推定ではベータ分布とベルヌーイ分布が組になって登場します(ベータ分布がベルヌーイ分布の成功確率 $p$ の事前分布になる、という関係です)。基本の分布をしっかり押さえることが、応用への近道です。

理論が一通り揃ったので、最後に Python で実際に手を動かし、ここまでの主張を数値とグラフで確かめましょう。

Python での実装と確認

ここからは、scipy と matplotlib を使って、これまで述べた性質を実際に確認していきます。まずは離散分布(二項分布)の PMF を描き、「高さ=確率」「合計=1」を数値で検証します。

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

# 二項分布 (n=10, p=0.4) の確率質量関数 PMF
n, p = 10, 0.4
xs = np.arange(0, n + 1)
pmf = stats.binom(n, p).pmf(xs)

print("x=4 の確率:", round(pmf[4], 4))   # その値が出る確率そのもの
print("PMF の合計:", round(pmf.sum(), 6))  # 正規化条件の確認

plt.figure(figsize=(8, 4.6))
plt.stem(xs, pmf, basefmt=" ")
plt.title("二項分布の PMF (n=10, p=0.4)")
plt.xlabel("x"); plt.ylabel("P(X=x)")
plt.show()

このコードの出力は x=4 の確率: 0.2508PMF の合計: 1.0 となります。読み取れることは2つです。第一に、PMF の値はそのまま「その値が出る確率」であり、$x=4$ なら約 25% です。第二に、すべての確率を足すと厳密に 1 になり、正規化条件が成り立っています。離散の世界では「高さ=確率」「合計=1」がそのまま成立する、という主張が数値で裏づけられました。

次に連続分布(正規分布)の PDF を見て、「面積=確率」と「全積分=1」を確かめます。

import numpy as np
from scipy import stats

rv = stats.norm(0, 1)  # 標準正規分布

# 区間 [0.5, 1.5] に入る確率 = その区間の面積 = CDF の差
prob = rv.cdf(1.5) - rv.cdf(0.5)
print("P(0.5 <= X <= 1.5):", round(prob, 4))

# 全範囲の面積 (正規化条件) を数値積分で確認
x = np.linspace(-5, 5, 500)
area = np.trapezoid(rv.pdf(x), x)   # numpy 2.x では trapezoid
print("全面積:", round(area, 4))

出力は P(0.5 <= X <= 1.5): 0.2417全面積: 1.0 です。図4で塗りつぶした区間の面積が約 0.242 だと述べましたが、それが cdf(1.5) - cdf(0.5) という CDF の差として正確に計算できています。区間の確率は「PDF の面積」であり「CDF の差」でもある、という二重の見方がここで一致します。また全範囲の台形則による数値積分は丸め誤差を除いて 1.0 となり、正規化条件 $\int_{-\infty}^{\infty} f(x)\,dx = 1$ が確かに成り立っていることが確認できます。手計算では大変な「全範囲の積分」が、こうしてコード数行で確かめられるのも、理論を実装で裏づける醍醐味です。

続いて、PDF と CDF が微分・積分で結ばれている関係を可視化します。

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

x = np.linspace(-4, 4, 500)
rv = stats.norm(0, 1)
x0 = 1.0
print("F(1.0):", round(rv.cdf(x0), 4))  # x0 以下になる確率

fig, axes = plt.subplots(2, 1, figsize=(8, 6.4), sharex=True)
axes[0].plot(x, rv.pdf(x))
axes[0].fill_between(x[x <= x0], rv.pdf(x[x <= x0]), alpha=0.35)
axes[0].set_ylabel("PDF f(x)")
axes[1].plot(x, rv.cdf(x))
axes[1].axvline(x0, ls="--"); axes[1].axhline(rv.cdf(x0), ls="--")
axes[1].set_ylabel("CDF F(x)"); axes[1].set_xlabel("x")
plt.show()

出力は F(1.0): 0.8413 です。上のパネルで $x=1.0$ より左側を塗りつぶした面積が、下のパネルの CDF の高さ 0.8413 にぴったり一致します。これは「PDF を左から積み上げたものが CDF」という関係そのものです。CDF が単調に増加し、右端で 1 に近づいていく様子も確認でき、CDF 版の正規化条件が見て取れます。

最後に、確率と統計をつなぐ最も美しい結果のひとつ、大数の法則 をシミュレーションで体感しましょう。サイコロの期待値は理論上 3.5 でした。試行を重ねると、実際の標本平均がこの 3.5 に近づいていくはずです。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
rolls = np.random.randint(1, 7, size=3000)        # サイコロを3000回
running = np.cumsum(rolls) / np.arange(1, 3001)   # 逐次的な標本平均

print("理論上の期待値:", 3.5)
print("3000回後の標本平均:", round(running[-1], 4))

plt.figure(figsize=(8.5, 4.6))
plt.plot(running, label="標本平均")
plt.axhline(3.5, ls="--", label="期待値 = 3.5")
plt.xscale("log")
plt.xlabel("試行回数 (対数軸)"); plt.ylabel("平均の出目")
plt.legend(); plt.show()

大数の法則: 標本平均は期待値に収束する

出力は 3000回後の標本平均: 3.5083 で、理論値 3.5 にきわめて近い値です。グラフを見ると、試行回数が少ないうちは標本平均が大きく振れますが、回数を増やすにつれて 3.5 の赤い破線に吸い寄せられるように収束していきます。これが大数の法則です。「確率分布の期待値」という抽象的な量が、「たくさん試したときの平均」という具体的な現象として立ち現れる、という確率論の根幹がここに表れています。確率変数・期待値・分布という概念が、現実のデータと地続きであることを実感できるはずです。

まとめ

本記事では、確率変数と確率分布の基礎を、直感から実装まで通して解説しました。要点を振り返ります。

  • 確率変数 は「値」ではなく、試行の結果を数値に対応づける 写像 である。とりうる値の性質で離散・連続に分かれる。
  • 離散では 確率質量関数 PMF が「高さ=確率」を与え、連続では 確率密度関数 PDF が「面積=確率」を与える。連続では1点の確率は 0 になる。
  • 累積分布関数 CDF は「以下になる確率」を表し、PDF とは微分・積分で結ばれる表裏一体の関係にある。
  • どの分布も 正規化条件(離散は合計 1、連続は全積分 1)を満たす。これが確率分布である最低条件。
  • 期待値(分布の重心)と 分散(広がり)で分布を要約でき、$V[X]=E[X^2]-(E[X])^2$ という便利な公式が正規化条件から導ける。
  • 大数の法則により、標本平均は試行を重ねると期待値に収束する。理論と現実のデータがつながる瞬間。

確率変数と確率分布は、これから学ぶほとんどすべての統計・機械学習の土台です。次のステップとして、まずは最も重要な分布である正規分布を深掘りし、続いて期待値・分散の性質、さらにベイズ推定へと進むのがおすすめです。