確率・分布●●●○○

一様分布

Uniform Distribution ・ いちようぶんぷ

すべての値が等しい確率で出る分布。乱数生成とシミュレーションの出発点

✦ 30秒で試す — 航海平らな乱数だけから、どんな形の分布でも作れる写した先で、粒が多く集まるのは?予想してみる

概要

一様分布は、取りうる値のどれもが「まったく同じ確からしさ」で出る確率分布です。歪みのないサイコロの目(1〜6がそれぞれ確率 1/6)のように値が飛び飛びの離散一様分布と、「0以上1未満の実数がどこでも同じ密度で出る」ような連続一様分布の2種類があります。連続版はグラフに描くと平らな長方形になるため、矩形分布とも呼ばれます。

形としてはこれ以上ないほど単純な分布ですが、その単純さこそが価値です。「どの値も特別扱いしない」という状態を数学的に表現したものが一様分布であり、「偏りがない」「情報がない」「完全にランダム」といった言葉を厳密に定義するときの基準点になります。ルーレット、くじ引き、暗号鍵の生成など、「公平さ」が求められる場面の理想モデルはすべて一様分布です。

そして実務上もっとも重要な役割は、乱数生成の出発点であることです。コンピュータが作る乱数の原料は「0以上1未満の一様乱数」で、正規分布でも指数分布でも、あらゆる分布に従う乱数はこの一様乱数を変換して作られます。一様分布は、シミュレーションの世界のいわば「素材そのもの」なのです。

なぜ生まれたか

確率論の出発点は17世紀の賭博の問題でした。サイコロやカードの計算では「どの目も同じ確からしさで出る」ことを暗黙の前提とし、「起こりうる場合の数のうち、目的の場合が占める割合」として確率を定義していました。この古典的確率の定義そのものが、実は離散一様分布の仮定です。つまり一様分布は、確率という概念が生まれたその瞬間から、名前が付く前にすでに使われていた最古の分布だと言えます。

これを連続の世界に拡張する必要が生じたのは、「線分上のどこか一点をランダムに選ぶ」「針が止まる角度は0度から360度のどこでも同じ」といった幾何学的確率の問題を扱うようになってからです。個々の点の確率はゼロなのに範囲の確率は定まる、という連続分布特有の考え方(確率密度)は、この平らで単純な分布を通して整備されました。さらに20世紀半ば、コンピュータによるシミュレーションが登場すると、新しい問題が生まれました。機械が直接作れるのは「0と1のあいだの数を均等に出す」ことだけなのに、核分裂の中性子の飛距離や待ち行列の到着間隔など、欲しいのは形の違うさまざまな分布の乱数です。モンテカルロ法を開発したフォン・ノイマンらはこの隙間を、「まず一様乱数を作り、それを変換して目的の分布を得る」という手順で埋めました(彼は1951年の論文で、一様乱数から目的の分布を切り出す棄却法などの技法をまとめています)。こうして一様分布は、理論の基準点から計算の実用部品へと役割を広げました。

詳細

離散一様分布と連続一様分布

離散一様分布は、n通りの値がそれぞれ確率 1/n で出る分布です。サイコロなら n=6 で、期待値は目の平均の 3.5 になります。一方、連続一様分布は区間 a から b の間のどこでも確率密度が一定(1/(b−a))で、区間の外ではゼロです。密度が平らなので、「ある範囲に入る確率」は単純に「その範囲の幅 ÷ 全体の幅」で求められます。期待値は区間のちょうど真ん中 (a+b)/2 です。

abx1x2高さ 1/(b−a)x1〜x2 に入る確率= 幅 ÷ 全体の幅確率密度値区間の外は密度 0
連続一様分布 — 区間の中では密度が平らで、範囲に入る確率は幅に比例する

なお「一様」と聞くと分散と標準偏差が小さそうに感じるかもしれませんが、逆です。値が中心に集まらず端まで均等に散らばるため、同じ範囲に収まる分布の中では、ばらつきはむしろ大きい部類に入ります。区間 a から b の連続一様分布の分散は (b−a)²/12、区間 0 から 1 なら 1/12 です。この 1/12 は、測定値を最小目盛りに丸めたときの丸め誤差の分散(目盛り幅の2乗の1/12)としても登場します。

乱数生成の原料として — 逆関数法

コンピュータの疑似乱数生成器が直接作り出すのは、区間 0 以上 1 未満の一様乱数です。ここから他の分布の乱数を作る代表的な方法が「逆関数法」です。目的の分布の累積分布関数 F(値がそこ以下になる確率を返す関数)の逆関数、つまり分位数を返す関数に一様乱数 u を入れると、出てきた値 x = F⁻¹(u) は目的の分布に従います。指数分布なら F⁻¹(u) = −log(1−u)/λ という1行の式で済みます。

なぜこれでうまくいくのかは、図で見ると分かります。縦軸の確率の目盛りを 0.1 刻みに等間隔に取り、それを累積分布関数の曲線に当てて横軸へ写すと、x の目盛りは等間隔になりません。曲線が急な所(密度の高い所)では狭く詰まり、緩い所(密度の低い裾)では広く開きます。u は各目盛りのあいだに同じ確率 0.1 ずつ入るので、狭く詰まった区間ほど x が密集する——これがちょうど目的の密度になっているのです。

00.51u を 0.1 刻み(等間隔)u = F(x)累積分布関数 F密度が高い所では詰まる裾では広く開くx各目盛りのあいだには同じ確率 0.1 ずつ入る → 詰まった所ほど x が密集する
逆関数法 — 等間隔の確率 u を累積分布関数に当てて写すと、x の目盛りは密度の高い所で詰まり、裾で開く(指数分布の例)

「確率の目盛り(0〜1)の上を一様に選び、それを値の目盛りへ引き戻す」——一様分布が「あらゆる分布の共通の原料」になっている仕組みはこれだけです。目標の曲線を切り替えたり、自分で描いたりして、平らな粒からどんな山でも作れることを確かめてみてください。

⚡ 体験: 一様乱数を曲線に当てて落とす
目標の分布
u の度数累積分布関数 F(x)落ちた x のヒストグラム(0粒)
一様乱数 ux = F⁻¹(u)目標の密度u を 0.1 刻みで写した線
変換した粒0u の最多/最少階級—x の最多階級—

左の縦軸(0〜1)に一様乱数の粒が現れ、右へ飛んで曲線 F にぶつかり、真下へ落ちます。「30粒 流す」を押して、下にどんな形の山ができるか見てください。

左: 一様乱数 u(0〜1)とその度数。上: 目標分布の累積分布関数 F。下: 落ちた x = F⁻¹(u) のヒストグラムと目標の密度(点線)

この性質は逆向きにも使えます。どんな連続分布のデータも、その分布の累積分布関数に通せば一様分布に変換できます(確率積分変換)。残差分析とモデル診断では、「正しくモデル化できていれば一様に均されるはず」という原理で予測分布の当てはまりを点検します。身近な例がp値です。帰無仮説が正しく、検定統計量が連続なら、p値は 0〜1 の一様分布に従います。だから帰無仮説が正しい状況で検定を20回繰り返せば、平均して1回は p < 0.05 が出てしまうのです。

シミュレーションと「情報がない」ことの表現

モンテカルロ法では、一様乱数で点を無数に打ち、条件を満たした点の割合から面積や確率を推定します。正方形に一様に点をばらまき、円の内側に入った割合から円周率を推定する例が有名です。「どこにでも同じ確率で点が落ちる」一様分布の性質が、割合と面積を直結させてくれるわけです。

また、ベイズの定理を使う推論では、「事前に何の情報も持っていない」状態を表す事前分布として一様分布がよく選ばれます。どの値も特別扱いしないという中立性の表現で、たとえば比率 p に置く 0〜1 の一様分布は、ベータ分布の Beta(1, 1) にあたります。ただし「一様=無情報」は万能ではありません。目盛りの取り方(たとえば長さについて一様か、面積について一様か)を変えると一様でなくなるため、「何について一様なのか」を常に意識する必要があります。

実務での使いどころと落とし穴

現実のデータそのものが一様分布に従う場面は、実はそれほど多くありません。だからこそ「一様であるはずのものが一様でない」ことは異常のサインになります。宝くじの当選番号、ハッシュ関数の出力、ランダム化実験の割り付けなどは設計上一様になるはずで、偏りが見つかれば実装バグや不正を疑えます。逆に、会計データの先頭桁は一様にならず小さい数字ほど多いことが知られており(ベンフォードの法則)、「ランダムなら一様のはず」という思い込みが落とし穴になる例です。分布を仮定する前に度数分布を描いて平らかどうかを確かめる習慣が、一様分布との正しい付き合い方です。

実装の側にも落とし穴があります。1つは区間の端です。多くの言語の一様乱数は 0 を含み 1 を含まないので、指数分布の乱数を −log(u) で作ると、ごくまれに u = 0 が出て無限大になります(1−u を使えば避けられます)。もう1つは整数への変換です。「0〜99 の整数」を大きな乱数の剰余(% 100)で作ると、元の範囲が 100 で割り切れない限り小さい数がわずかに出やすくなります。暗号や抽選のように厳密な公平さが要る用途では、言語が用意した範囲指定の関数を使うのが安全です。

試問

0〜1 のどの値も同じ確からしさで出る一様乱数 u を、累積分布関数 F の曲線に水平に当てて、真下の x に落とす装置です(逆関数法)。目標を「手描き」にすると、金色の丸を上下にドラッグして F を描き替えられます(描き替えると落ちた粒は消えます)。

✦ 命題挑戦中

材料は平らな一様乱数のまま、曲線 F を描き替えて、x = 4〜5 に粒の半分以上が集まり、x = 0〜2 にはほとんど落ちないようにせよ

  • 目標を「手描き」にして、描いた曲線で 1000粒以上落とす(いま 0粒)
  • x = 4〜5 に、落ちた粒の半分以上が集まる(いま —)
  • x = 0〜2 に落ちる粒は 5% 以下(いま —)
⚡ 体験: 一様乱数を曲線に当てて落とす
目標の分布
u の度数累積分布関数 F(x)落ちた x のヒストグラム(0粒)
一様乱数 ux = F⁻¹(u)目標の密度u を 0.1 刻みで写した線
変換した粒0u の最多/最少階級—x の最多階級—

左の縦軸(0〜1)に一様乱数の粒が現れ、右へ飛んで曲線 F にぶつかり、真下へ落ちます。「30粒 流す」を押して、下にどんな形の山ができるか見てください。

左: 一様乱数 u(0〜1)とその度数。上: 目標分布の累積分布関数 F。下: 落ちた x = F⁻¹(u) のヒストグラムと目標の密度(点線)