こんにちわ!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メモリの書き込みエラー
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で実装!でした。ありがとうございました。