Skip to main content

確率分布 (Probability Distributions)

Made by Youkoutaku

確率分布は統計学と確率論の基礎概念です。この記事では、Pythonのscipyライブラリを使用して様々な確率分布を実装し、理論値と実測値を比較しながら各分布の特性を理解していきます。

ライブラリのインポート

# Library Import
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import bernoulli, binom, geom, nbinom, poisson, hypergeom, uniform, norm, expon, gamma, chi2

確率分布の種類

離散分布

  • bernoulli: ベルヌーイ分布
  • binom: 2項分布
  • geom: 幾何分布
  • nbinom: 負の2項分布
  • poisson: ポアソン分布
  • hypergeom: 超幾何分布

連続分布

  • uniform: 一様分布
  • norm: 正規分布
  • gamma: ガンマ分布
  • chi2: カイ二乗分布

主要メソッド

  • rvs: 確率変数の生成
  • pmf: 確率関数(離散)
  • pdf: 確率密度関数(連続)

1. 離散確率分布

1.1 ベルヌーイ分布

ベルヌーイ分布は、1回の試行で成功または失敗の2つの結果しかない離散確率分布です。確率パラメータ pp を設定し、それに従う疑似乱数列を生成します。

1.1.1 p=0.5p = 0.5

疑似乱数数列での分布関数と確率関数:

p = 0.5  # Probability
rv_bernoulli = bernoulli(p)
data_bernoulli = rv_bernoulli.rvs(size=1000) # size=1000

# Random Variable
plt.hist(data_bernoulli, alpha=0.7)
plt.title('Bernoulli Distribution')
plt.xlabel('Value')
plt.ylabel('Times')
plt.show()

# Probability mass function
x = np.linspace(0, 1, 100)
y = bernoulli.pmf(x, p)
plt.plot(x, y, 'ro', ms=8)
plt.vlines(x, 0, y, colors='r', lw=3, alpha=0.5)
plt.xlabel('Value')
plt.ylabel('p(x)')
plt.show()

ベルヌーイ分布のヒストグラム

ベルヌーイ分布の確率関数

特性値:

theoretical_mean = p
theoretical_std = np.sqrt(p * (1 - p))

# Calculation of actual values
mean_bernoulli = np.mean(data_bernoulli)
std_bernoulli = np.std(data_bernoulli)

# Comparison of theoretical and measured values
print("Bernoulli Distribution:")
print("Theoretical Mean:", theoretical_mean)
print("Computed Mean:", mean_bernoulli)
print("Theoretical Standard Deviation:", theoretical_std)
print("Computed Standard Deviation:", std_bernoulli)

1.1.2 p=0.1p = 0.1

p = 0.1  # probability
rv_bernoulli = bernoulli(p)
data_bernoulli = rv_bernoulli.rvs(size=1000) # size=1000

# Random Variable
plt.hist(data_bernoulli, alpha=0.7)
plt.title('Bernoulli Distribution')
plt.xlabel('Value')
plt.ylabel('Times')
plt.grid(True)
plt.show()

# Probability mass function
x = np.linspace(0, 1, 100)
y = bernoulli.pmf(x, p)
plt.plot(x, y, 'ro', ms=8)
plt.vlines(x, 0, y, colors='r', lw=3, alpha=0.5)
plt.xlabel('Value')
plt.ylabel('p(x)')
plt.show()

ベルヌーイ分布(p=0.1)のヒストグラム

ベルヌーイ分布(p=0.1)の確率関数

観察

実測値の平均と標本誤差は理論値とほぼ同じであることが確認できます。

1.2 2項分布

2項分布は、独立したベルヌーイ試行を複数回行った場合の成功回数の確率分布です。成功確率 pp と試行回数 nn の2つのパラメータを設定し、その分布を観察します。

1.2.1 p=0.5p = 0.5, n=10n = 10

n = 10  # number of random experiments
p = 0.5 # probability

# Random Variable
rv_binom = binom(n, p)
data_binom = rv_binom.rvs(size=1000)
plt.hist(data_binom, bins=np.arange(-0.5, n+1, 1), alpha=0.7)
plt.title('Binomial Distribution')
plt.xlabel('Value')
plt.ylabel('Times')
plt.show()

# Probability mass function
x = np.arange(0, 11)
y = binom.pmf(x, n, p)
plt.plot(x, y, 'ro', ms=8)
plt.vlines(x, 0, y, colors='r', lw=3, alpha=0.5)
plt.xlabel('Value')
plt.ylabel('p(x)')
plt.show()

2項分布のヒストグラム

2項分布の確率関数

1.2.2 p=0.25p = 0.25, n=20n = 20

2項分布(p=0.25, n=20)のヒストグラム

2項分布(p=0.25, n=20)の確率関数

1.3 幾何分布

幾何分布は、最初の成功までの試行回数の確率分布です。成功確率 pp を設定し、その分布を観察します。

1.3.1 p=0.5p = 0.5

p = 0.5
rv_geom = geom(p)
data_geom = rv_geom.rvs(size=1000)

# Random Variable
plt.hist(data_geom, bins=np.arange(0, 20, 1), alpha=0.7)
plt.title('Geometric Distribution')
plt.xlabel('Value')
plt.ylabel('Times')
plt.show()

# Probability mass function
x = np.arange(0, 21)
y = geom.pmf(x, p)
plt.plot(x, y, 'ro', ms=8)
plt.vlines(x, 0, y, colors='r', lw=3, alpha=0.5)
plt.xlabel('Value')
plt.ylabel('p(x)')
plt.show()

幾何分布のヒストグラム

幾何分布の確率関数

1.3.2 p=0.25p = 0.25

幾何分布(p=0.25)のヒストグラム

幾何分布(p=0.25)の確率関数

1.4 負の2項分布

負の2項分布は、成功回数が一定の値 rr に到達するまでのベルヌーイ試行の回数の確率分布です。成功確率 pp と成功回数 rr の2つのパラメータを設定し、その分布を観察します。

1.4.1 p=0.5p = 0.5, n=5n = 5

負の2項分布のヒストグラム

負の2項分布の確率関数

1.4.2 p=0.25p = 0.25, n=5n = 5

負の2項分布(p=0.25)のヒストグラム

負の2項分布(p=0.25)の確率関数

1.5 ポアソン分布

ポアソン分布は、ある一定の時間や領域内で起こる事象の発生回数の確率分布です。平均発生率 λλ を設定し、その分布を観察します。

1.5.1 λ=1λ = 1

ポアソン分布のヒストグラム

ポアソン分布の確率関数

1.5.2 λ=0.5λ = 0.5

ポアソン分布(λ=0.5)のヒストグラム

ポアソン分布(λ=0.5)の確率関数

1.6 超幾何分布

超幾何分布は、有限個の要素の中から非復元抽出した場合、成功の数が従う確率分布です。要素数 NN、成功の数 MM、抽出の数 KK を設定し、その分布を観察します。

1.6.1 N=20N = 20, M=7M = 7, K=12K = 12

超幾何分布のヒストグラム

超幾何分布の確率関数

1.6.2 N=20N = 20, M=5M = 5, K=5K = 5

超幾何分布(M=5, K=5)のヒストグラム

超幾何分布(M=5, K=5)の確率関数


2. 連続確率分布

2.1 一様分布

一様分布は、範囲内の値がすべて同じ確率で起こる確率分布です。下限 aa と上限 bb を設定し、その分布を観察します。

2.1.1 a=0a = 0, b=10b = 10

a = 0
b = 10
rv_uniform = uniform(a, b)
data_uniform = rv_uniform.rvs(size=1000)
plt.hist(data_uniform, bins=np.arange(a, b+0.1, 0.1), density=True, alpha=0.7)

x = np.linspace(a, b, 1000)
y = uniform.pdf(x, a, b-a)
plt.plot(x, y, color='red')

plt.title('Uniform Distribution')
plt.xlabel('Value')
plt.ylabel('Probability density')
plt.show()

一様分布のヒストグラム

2.1.2 a=5a = 5, b=10b = 10

一様分布(a=5, b=10)のヒストグラム

2.2 正規分布

釣り鐘型の分布です。 f(x)=12πσ2e(xm)22σ2f(x)=\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-m)^2}{2\sigma^2}}

平均値 mm と標準偏差 σ\sigma を設定し、その分布を観察します。

2.2.1 m=0m = 0, σ=1\sigma = 1

mean = 0
std = 1
data_norm = norm.rvs(loc=mean, scale=std, size=1000)
plt.hist(data_norm, bins=20, density=True)

x = np.linspace(mean - 3*std, mean + 3*std, 100)
y = norm.pdf(x, loc=mean, scale=std)
plt.plot(x, y, color='red')

plt.xlabel('Value')
plt.ylabel('Probability density')
plt.title('Normal Distribution')
plt.show()

正規分布のヒストグラム

2.2.2 m=5m = 5, σ=10\sigma = 10

正規分布(m=5, σ=10)のヒストグラム

2.3 指数分布

f(x)={λeλx,(x0)0,(x<0)f(x)=\begin{cases}λe^{-λ x},(x\ge 0)\\0 ,(x<0)\end{cases}

2.3.1 λ=1λ = 1

lambda_ = 1
data_expon = expon.rvs(scale=1/lambda_, size=1000)
plt.hist(data_expon, bins=20, density=True)

x = np.linspace(0, 10, 100)
y = expon.pdf(x, scale=1/lambda_)
plt.plot(x, y, color='red')

plt.xlabel('Value')
plt.ylabel('Probability density')
plt.title('Exponential Distribution')
plt.show()

指数分布のヒストグラム

2.3.2 λ=10λ = 10

指数分布(λ=10)のヒストグラム

2.4 ガンマ分布

f(x)=1Γ(α)βαxα1ex/β(x0)f(x)=\frac{1}{\Gamma(α)β^α}x^{α−1}e^{−x/β}\quad (x\ge0)

Γ(α)=0uα1eudu\Gamma(α)=∫_{0}^{∞}u^{α-1}e^{-u}du

2.4.1 α=1α = 1, β=2β = 2

ガンマ分布のヒストグラム

2.4.2 α=10α = 10, β=2β = 2

ガンマ分布(α=10, β=2)のヒストグラム

2.5 カイ二乗分布

f(x)=12ν/2Γ(ν/2)xν/21ex/2(x0)f(x)=\frac{1}{2^{ν/2}Γ(ν/2)}x^{ν/2−1}e^{−x/2}\quad (x\ge 0)

2.5.1 ν=1ν = 1

カイ二乗分布のヒストグラム

2.5.2 ν=10ν = 10

カイ二乗分布(ν=10)のヒストグラム


まとめ

この記事では、様々な確率分布について実装と可視化を行いました。各分布の特徴を理解し、理論値と実測値の比較を通じて確率分布の本質を学ぶことができました。

主要な学習ポイント

  1. 離散分布と連続分布の違い: 確率関数(PMF)と確率密度関数(PDF)の概念
  2. パラメータの影響: 各分布のパラメータが形状にどのような影響を与えるか
  3. 理論値と実測値の一致: 大数の法則による理論値への収束
  4. 実装スキル: SciPyライブラリを使った確率分布の効率的な実装
応用分野

これらの確率分布は以下の分野で広く活用されています:

  • 機械学習: ベイズ統計、生成モデル
  • 金融工学: リスク管理、オプション価格モデル
  • 品質管理: 統計的品質管理、信頼性工学
  • 自然科学: 物理現象のモデリング、生物統計
次のステップ

確率分布の理解を深めるために、以下の学習を推奨します:

  • 中心極限定理の理解と実装
  • ベイズ統計の基礎
  • 確率分布の組み合わせと変換
  • 実データへの分布フィッティング