統計では以前に紹介した二項分布のほかに、ポアソン分布というのも出てきます。ポアソン分布も二項分布同様確率分布のお話ですが、どのような分布なのかというところを確認していこうと思います。また、分布のイメージを掴むためにもPythonで分布の描画もしていきます。
本記事では、ポアソン分布をどのように求めるかではなく、ポアソンとはどういうもので、どんな時に使うかをざっくり理解できることを目標とします。
二項分布については以下記事をご覧ください。
ポアソン分布とは
ポアソン分布とは、「単位時間あたりに平均λ回起こる事象がk回起こる確率」を表す離散型確率分布です。確率変数Xがポアソン分布に従う場合、ある期間に平均λ回起こる現象がk回起こる(X=k)確率は、以下の式で求めることができます。
eはネイピア数と呼ばれる定数で、「e=2.71828…」と続く無理数です。
たとえばある事象が平均して10分間に5回起こる場合、10分間である事象が発生する回数はλ=5のポアソン分布モデルから求めることができます。
ポアソン分布を適用できる例
ポアソン分布が適用できる具体的な例をいくつか挙げてみます。
- 1時間にある交差点を通過する車の台数
- 1日に受信するメールの数
- 1時間あたりの店舗への来客数
では実際にポアソン分布を使った計算を1つやってみます、以下の例を考えて、みます。
例)1時間に平均5人来店する中華料理屋で、ある1時間に10人来客する確率を求めてみます。このときλ=5、k=10となります。
となり、その確率は1.8%となります。
ポアソン分布の性質
ポアソン分布はその期待値(平均)、分散がともにλとなる性質があります。
上記の中華料理屋の場合、1時間の来客数の期待値E(X)とその分散V(X)はともに5となります。
ポアソン分布を描画する
ここからはポアソン分布をPythonで描画してみます。ある時間で平均して10回起こる事象(青)、20回起こる事象(オレンジ)、50回起こる事象(緑)について、それぞれのポアソン分布を描画してみます。
Pythonではscipy.statsのpoissonを用いることで、簡単にポアソン分布での確率を計算することができます。
import numpy as np
from scipy.stats import poisson
import matplotlib.pyplot as plt
#データの作成
#1~80までの連番
x = np.arange(1, 80, 1)
#ポアソン分布における確率
y10= [poisson.pmf(i, 10) for i in x]
y20= [poisson.pmf(i, 20) for i in x]
y50= [poisson.pmf(i, 50) for i in x]
#ここからグラフの描画
fig, ax = plt.subplots(facecolor="w")
ax.bar(x,y10,alpha=0.5, label="Poisson λ= %d" % 10)
ax.bar(x,y20,alpha=0.5, label="Poisson λ= %d" % 20)
ax.bar(x,y50,alpha=0.5, label="Poisson λ= %d" % 50)
ax.legend()
ax.set_xlabel("k")
ax.set_ylabel("確率", fontfamily='Meiryo')
plt.show()
それぞれのグラフの頂点はλと一致していることがわかります。それぞれのグラフは左右対称で、グラフの頂点=平均となることから、これはE(X)=λを意味しています。
このグラフを見ると、たとえば平均して50回起こる事象について、40回起こる確率はおよそ2%であることがわかります。
また、λが大きくなるほどグラフの裾が広がっていると思います。これはV(E)=λとなることから、λが大きくなるにつれ分散が大きくなるためです。
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^
まとめ
ポアソン分布についてどのようなものなのかというところと、グラフを描画してその分布を確認しました。
数式だけ眺めてもイメージしにくいですが、実例やグラフを見るとなんとなくどんなことを計算したいのかがわかると思います。計算の目的をきちんと理解することで、実用シーンも見えてくると思います^^
ではでは👋