統計のお勉強です。今日はポアソン分布について。
ポアソン分布とは
ポアソン分布 (Poisson distribution) は、「稀にしか発生しない事象が、一定時間内にどれくらい発生するか」 をモデル化するときに使える確率分布です。 こういった事例は世の中にいくらでもあって、例えば、
- 雨の降る日数
- 来客数
- 注文数
- 事故発生数
- 不良品の個数
- サッカーの試合でのチーム別得点数
などがあります。 この確率分布の具体的な式は次のようになります。
この
ポアソン分布の例題
具体的な問題を見ると、ポアソン分布の使い方は簡単に分かります。
問題 1
1 週間に平均 2 日雨が降るとき、1 週間に 3 日雨が降る確率は?
この問題では「単位時間」が 1 週間で揃っているので、
… (1 週間あたりの)平均雨天日数 … (1 週間あたりの)雨天日数が 3 になる確率を求めたい
よって、3 日雨が降る確率は、約 18.04 %です。
同様に、
問題 2
1 時間あたり平均 2 人の客が来るとき、3 時間で 5 人の客が来る確率は?
このケースでは、求めるべき確率
… (3 時間あたりの)平均客数 … (3 時間あたりの)客数が 5 になる確率を求めたい
よって、5 人の客が来る確率は、約 16.06 %です。
問題 3
不良品率が 0.1 %のとき、1 日の生産が 1000 個で 1 日の不良品数が 2 個以下になる確率は?
この問題では、
… (1 日あたりの)平均不良品数 … (1 日あたりの)不良品数が 0 or 1 or 2 になる確率を求めたい
よって、不良品数が 2 個以下になる確率は、約 91.97 %です。
問題 4
過去 5 年間に大きな地震が 7 回起こっています。これから 3 日の間に大きな地震が 1 回起こる確率は?
… (3 日間の)平均発生回数 … (3 日間の)発生回数が 1 回になる確率を求めたい
よって、地震が 1 回発生する確率は、約 1.137 %です。
問題 5
日本の人口は 1 億 2737 万人とします。日本全体で、過去 5 年間に平均で 20204 人/年の食中毒が発生しました。千葉県松戸市(人口 484600 人)において食中毒にかかる人が 1 人も発生しない日の確率は?
数字がいっぱい出てきますが、落ち着いて考えればこれまでの問題と同じように計算できます。
「1 人も発生しない」というのは発生回数が 0 回ということなので、
… (松戸市での 1 日あたりの)平均発生回数 … (松戸市での 1 日あたりの)発生回数が 0 になる確率を求めたい
よって、松戸市で 1 日に 1 人も食中毒が発生しない確率は、約 81.01 %です。
問題 6
ある機械の単位時間あたりの修理回数を確率変数
この問題を解くには、ポアソン分布に従う確率変数
平均回数と分散が等しくなるというのは、ポアソン分布の面白いところです。
この問題では、運用コストが
よって、運用コストの期待値は 172 になります。
上記の計算では、
何度も出てくる
(おまけ)Python や Excel でポアソン分布の計算
Python の場合
Python でポアソン分布の確率質量関数 poisson()
を定義する例です。
def poisson(*, lam, k):
"""
Poisson distribution function.
Args:
lam (float): the average number of events in a unit of time.
k (int): the number of events.
Returns:
float: the probability of k events occurring in a unit of time.
"""
from math import exp, factorial
return exp(-lam) * lam**k / factorial(k)
# 使用例
print("{:.4f}".format(poisson(lam=2, k=3))) # 0.1804
print("{:.4f}".format(poisson(lam=6, k=5))) # 0.1606
あるいは、scipy.stats
モジュールが提供する poisson()
関数を使う方法もあります。
サンプルコードでは、poisson()
関数の最初の引数を *
とすることで、名前付き引数の形で呼び出すことを強制しています。
こうすることで、呼び出し時に引数の順番を間違えてしまうミスをなくせます。
Excel の場合
Excel では、セルに =POISSON.DIST(イベント数, 平均, 関数形式)
と入力するだけで、確率
- イベント数 …
のこと。単位時間にこの数だけ発生する確率を求めたい。 - 平均 …
のこと。単位時間の平均発生回数をセットする。 - 関数形式 …
TRUE
なら の累積確率、FALSE
なら の確率。今回はFALSE
をセットすれば OK。
例えば、
=POISSON.DIST(3, 2, FALSE)
のように入力すると、平均回数