Pythonでポアソンモデルを実装する

確率分布
あい
あい

今回はpythonを使って
ポアソンモデルの
例題を計算
次にポアソン分布を
表示するプログラムを
pythonで実装します

[PR]※本サイトにはプロモーションが含まれています

ポアソン分布のモデル

ポアソン分布は

ポアソン分布とは二項分布の確率分布で

nが限りなく大きい場合の極限分布です。

二項分布はベルヌーイ試行(成功 or 失敗)

をN回行ってx回成功した確率を

表す確率分布です

二項分布は以下の式で表します

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

ポアソン分布は

\(np = λ\)と置き

\(n→∞ , p→0\)とし

以下の式に変換されます

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

ポアソンモデルの例題を準備

例題

50万回メモリの書き込みを行うと
1回は書き込みエラーが発生する
USBメモリが存在する
25万回で2個故障が
発生する確率をポアソン分布を
利用して求めよ

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

次に\(\displaystyle P_r(X=x)=\frac{λ^2}{x!}e^{-λ}\)

の計算をpythonで行います

poisson_pmf = poisson.pmf(x, lambda_parameter)

このコードで故障確率を計算することが出来ます

そしてλ = 0.5 , X =2を入れて以下のコードを描くと

2回故障する確率を計算してくれます

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

λ = 0.5
x = np.arange(0,11)
X =2
poisson_pmf = poisson.pmf(x, λ)
for i , z in zip(x,poisson_pmf):
  if i == X:
   print("メモリの書き込みが25万回行われたとき2回故障する確率は",z)
あい
あい

おおよそ故障確率は
7.6%だね!

このモデルのポアソン分布を見てみる

最後に以下のコード追加して

ポアソン分布を折れ線と棒グラフにして

観察してみます

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(λ))

# 上位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

λ = 0.5
x = np.arange(0,11)
X =2
poisson_pmf = poisson.pmf(x, λ)
for i , z in zip(x,poisson_pmf):
  if i == X:
   print("メモリの書き込みが25万回行われたとき2回故障する確率は",z)

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(λ))

# 上位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()
タイトルとURLをコピーしました