【離散分布】ポアソン分布を例題を用いて優しく説明!その後Pythonで実装!

推定統計

こんにちわ!Yamuです!
前回の記事で離散分布の
ベルヌーイ分布、二項分布に
ついて解説していきました

今回はポアソン分布について
説明した後例題を用いて
確率計算
を行っていきます!

こんな人におススメ
  • ポアソン分布について勉強したい
  • ポアソン分布の例題を解きたい
  • Pythonでポアソン分布を実装したい

ポアソン分布とは?

ポアソン分布(Poisson distribution)
統計学,確率論において事象が均等に
発生
する確率変数x離散確率分布です

ポアソン分布とは二項分布の確率分布で
nが限りなく大きい場合の極限分布です。

1単位あたりの不良の数のような確率分布は
ポアソン分布に従います。

事象の起こる頻度が極端に
少なくめったに起こらない事象が
x回起こる確率を求める場合に利用します。”

ポアソン分布が成立する例
  • 製品の故障頻度
  • 火災事故の発見件数
  • 製品の傷、割れ
  • 故障件数

ポアソン分布の公式

日本国内で交通事故の人口を約1億人として
日本全国の事故の件数を50万件とすると
一人当たりが事故にあう確率はP=0.005です。
1件の発生確率をP=0.005とすると
x人が交通事故にあう確率二項分布となり

\(P_r(X=x)=nC_xP^x(1-P)^{n-x}\)

の分布に基づく
実際はnは日本の人口なので
nがとても大きく
確率Pがとても小さい
この時二項分布の式はポアソン
分布
の式に近似できます
工場の欠品数や事故件数などは
工程の状態が安定していたり事象が
安定している時、ポアソン分布に従います。

二項分布の確率モデルを使用する時
nが大きく,Pが小さい時

ポアソン分布を代わりに使うと
便利そうですね!
ポアソン分布の公式
紹介します。

ポアソン分布
\(\displaystyle P_r(X=x)=\frac{λ^2}{x!}e^{-λ}\)
\(λはnp\)

期待値
\(E(x)=λ=nP \)

分散
\(V(x)=λ=nP\)

次にポアソン分布の例題
を紹介します。

USBメモリの書き込みエラー

例題1

50万回メモリの書き込みを行うと
1回は書き込みエラーが発生するUSBメモリが存在する
25万回で2個発生する確率を求めてください。

USBメモリが1回の書き込みでエラーが発生する確率P
\(\displaystyle P=\frac{1}{500,000}\)
\(P=0.000002\)

\(λ=nP\)より

\(λ=250000*0.000002\)
\(λ=0.5\)

25万回で2個発生する確率\(P_r(X=2)\)

\(\displaystyle P_r(X=2)=\frac{0.5^2}{2!}e^{-0.5}\)

\(P_r(X=2)=0.0758\)

よってメモリを25枚書き込んだ時2回故障する確率は7.6%になります

次にPythonを使って
このモデルを実装していきます

ポアソン分布のPythonコード

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

lambda_parameter = 0.5  # 平均の事象発生率
x = np.arange(0, 15)  # 事象の発生回数の範囲
poisson_pmf = poisson.pmf(x, lambda_parameter)

plt.bar(x, poisson_pmf, align='center', alpha=0.7, label='Poisson PMF')
plt.plot(x, poisson_pmf, marker='o', label='Poisson PMF', linestyle='-', color='b')
plt.title('Poisson Distribution')
plt.xlabel('Number of Events')
plt.ylabel('Probability')

plt.title('Poisson Distribution PMF (λ={})'.format(lambda_param))

# 上位4つの要素のインデックスを取得
top_indices = np.argsort(poisson_pmf)[::-1][:4]
# 各バーの上に確率値を表示
for i in top_indices:
    plt.text(x[i], poisson_pmf[i] + 0.01, f'{poisson_pmf[i]:.3f}', ha='center')
  

plt.legend()
plt.show()

出力結果は

グラフを調整して確率密度関数だけの表示にすると

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

lambda_parameter = 0.5  # 平均の事象発生率
x = np.arange(0, 15)  # 事象の発生回数の範囲
poisson_pmf = poisson.pmf(x, lambda_parameter)


plt.plot(x, poisson_pmf, marker='o', label='Poisson PMF', linestyle='-', color='b')
plt.title('Poisson Distribution')
plt.xlabel('Number of Events')
plt.ylabel('Probability')

plt.title('Poisson Distribution PMF (λ={})'.format(lambda_param))

# 上位4つの要素のインデックスを取得
top_indices = np.argsort(poisson_pmf)[::-1][:4]
# 各バーの上に確率値を表示
for i in top_indices:
    plt.text(x[i], poisson_pmf[i] + 0.01, f'{poisson_pmf[i]:.3f}', ha='center')
#軸を端に持ってくる
plt.xlim(0, max(x) + 1)
plt.ylim(bottom=0)
plt.legend()
plt.show()

λを1から10まで0.1ずつステップさせてみると

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

lambda_values = np.arange(0.1, 10, 0.1)  # 平均の事象発生率
x = np.arange(0, 20)  # 事象の発生回数の範囲
poisson_pmf = poisson.pmf(x, lambda_parameter)
plt.figure(figsize=(10, 6))#サイズ調整
for λ in lambda_values:
    pmf = poisson.pmf(x, λ)
    plt.plot(x, pmf,marker='o', linestyle='-', color='b')

plt.title('Poisson Distribution')
plt.xlabel('Number of Events')
plt.ylabel('Probability')

plt.title('Poisson Distribution PMF,λ from 0.1 to 10,step is 0.1')

# 上位4つの要素のインデックスを取得
top_indices = np.argsort(poisson_pmf)[::-1][:4]
# 各バーの上に確率値を表示
#for i in top_indices:
   # plt.text(x[i], poisson_pmf[i] + 0.01, f'{poisson_pmf[i]:.3f}', ha='center')
#軸を端に持ってくる
plt.xlim(0, max(x) + 1)
plt.ylim(bottom=0)
plt.legend()
plt.show()

参考文献

まとめ

以上がポアソン分布を例題を用いて優しく説明!
その後Pythonで実装!でした。ありがとうございました。

タイトルとURLをコピーしました