(O+P)ut

ITエンジニアのアウトプット録



(O+P)ut


【可視化】ポアソン分布入門

はじめに

本記事では、R言語で実際に可視化しながらポアソン分布について説明しています。


ポアソン分布(Poisson distribution)とは、数学者ポアソン氏が発表した確率分布で、ある時間間隔で発生する離散的な事象が扱えます。

ポアソン分布がどんな分布かと言えば、滅多に起こらない現象を一定の期間観測した際の分布モデルです。

例えば、ホームページに対する1分間あたりのアクセス数などをモデル化できます。

f:id:mtiit:20190226100926p:plain
GoogleAnalyticsより抜粋

ちなみに、離散的の意味ですが、事象が連続値でないことを指しています。アクセス数を考えて見れば分かりますが、1PV、2PVはあっても1.4PVなんてないですよね。よってアクセス数は離散的です。

他にも、

  • ある一定の時間内に特定の交差点を通過する車両の台数
  • ある一定の時間内の電話がかかってくる件数。
  • ある一定の時間内の店への来客数。

などを近似的に扱うことが可能です。




ポアソン分布の特徴

この分布でモデル化できると何が嬉しいのでしょうか?

この分布の特徴は、一定期間に起こる現象の発生回数の平均値さえ決めてあげれば分布図を書けることです。

例えば、1分あたり平均2人がアクセスしてくるブログに対して1分あたり4人がアクセスしてくる事象がどのくらいの起こりやすいのか等が分かります。

これはユニークな性質で、例えばクラスのテストの平均点だけ分かってもクラス全体の点数の分布は分かりません。一方、ポアソン分布では分布まで分かってしまいます。

つまり、滅多に起こらない現象を一定の期間観測するという特別ケースのみに適用可能な分布なのです。

式自体は以下になります。*1
f:id:mtiit:20190225215456p:plain
θは事象の平均発生回数です。例えば、1分間で2回発生する事象であればθは2となります。
Kは事象の発生回数です。事象が4回発生する確率が知りたければ上記数式に4を入れて関数電卓を叩けば数値が出ます。

世に色んな分布がありますが、平均値のみで決まる分布というのはとても珍しく、この単純さより確率分布の分野では入門として扱うことが多いので覚えておくとよいかと思います。

R言語で扱ってみる

θが1、2、3、5としてKが0~10をとる場合をポアソン分布dpois関数で可視化してみます。
横軸がKの値で、縦軸がそのKが発生する確率です。
0から始まるため、Index-1がKと思ってください。

> plot(dpois(c(0:10),1))

f:id:mtiit:20190225222635p:plain

> plot(dpois(c(0:10),2))

f:id:mtiit:20190225222655p:plain

> plot(dpois(c(0:10),3))

f:id:mtiit:20190225222716p:plain

> plot(dpois(c(0:10),5))

f:id:mtiit:20190225222737p:plain

直観的にもあっているように思います。
つまり、平均発生回数付近に山があり、そこから外れるほどに発生する確率が下がっていきます
また、平均発生回数が大きくなるにつれて分布の分散も大きくなっています。

これも覚えておくとよいポイントですが、分散の値は平均と同じθになります。

ちなみに、極端な例ですがθ=50でKが1~100までを描画してみました。
f:id:mtiit:20190225221418p:plain

正規分布に近づいてきます。実は、ポアソン分布は正規分布の近似という側面もあります。*2

> dpois(c(0:10),2)
 [1] 1.353353e-01 2.706706e-01 2.706706e-01 1.804470e-01 9.022352e-02
 [6] 3.608941e-02 1.202980e-02 3.437087e-03 8.592716e-04 1.909493e-04
[11] 3.818985e-0

plotした数値の値です。
冒頭の問いですが、1分間に平均2アクセスあるブログのとある1分間に4アクセスがある確率は約9%と算出できました。

rpoisで乱数を発生させる

R言語ではrpois(データの長さ,平均事象発生回数)で乱数を発生させることもできます。

> rpois(10,2)
 [1] 3 0 2 3 3 1 5 2 1 3
> rpois(10,2)
 [1] 0 1 1 2 3 3 2 1 2 1
> rpois(10,2)
 [1] 1 2 0 2 3 4 3 1 1 1

データを3600個用意して、ヒストグラムにして数えてみました。

> hist(rpois(3600,2),breaks=c(-1,0,1,2,3,4,5,6,7,8,9))

f:id:mtiit:20190225223525p:plain

確かに、plotした点に似ています。

この3600のデータの平均と分散が、やはり値は2に近づきます。乱数なのでぴったり一致はしていません。

> x <- rpois(3600,2)
> mean(x)
[1] 1.992222
> var(x)
[1] 2.012721

まとめ

ポアソン分布とは、頻繁に起こらない事象を扱う確率分布で、平均事象発生回数のみ分かれば分布の全体を描くことができます
統計学の初歩としてテーマになることが多い分布なので、知っておくとどこかで役立つと思います。

以上、ポアソン分布をR言語で可視化してみる記事でした。

*1:式に興味がある方は二項分布からの導出できるのではぜひ調べてみてください

*2:二項分布とポアソン分布と正規分布は密接にかかわりあっています