データ分析系プログラマーのブログ

主にPythonを使ったデータ分析や機械学習をやっています。

Pythonを使ったポアソン分布の検定統計量の求め方

検定には、母平均、母比率、母分散を用いた検定の他に、二項分布、ポアソン分布、適合度、独立性の検定があります。このうち、ポアソン分布を用いた検定は、事故や地震などのようにサンプル数が非常に大きく、確率が非常に小さい場合にサンプル数×確率を一定とすることができポアソン分布に従います。また確率変数がポアソン分布に従う時、期待値=分散=λ(サンプル数×確率)となるので、統計検定量を求めてある期間における事象(事故や地震など)の起こりやすさを判定することができます。この記事では、Pythonを使って、ポアソン分布の統計検定量の求め方と検定の行い方について紹介しています。

ポアソン分布の検定

確率変数Xがポアソン分布に従い、サンプルサイズnが十分に大きい時には、次の式は標準正規分布に従います。


z=\frac{X-n\lambda}{\sqrt{n\lambda}} = \frac{\frac{X}{n}-\lambda}{\sqrt{\frac{\lambda}{n}}}

例えば、1分に1個の不良品が出る工場があり、改善した結果、1時間に40個となった時、有意水準を0.05とした場合、1分間の不良品の発生頻度は低下したと言えるかどうかは以下のようになります。

この場合、


\lambda=60/60=1

\frac{X}{n}=40/60=0.6667

n=60

となるので、以下のようになります。


z= \frac{\frac{X}{n}-\lambda}{\sqrt{\frac{\lambda}{n}}}
=\frac{0.6667-1}{\sqrt{\frac{1}{60}}}
=\frac{-0.3333}{0.129}=-2.58

Z_{0.05}=1.64

よって、帰無仮説を棄却し、対立仮説を採択するという結果になるので、この工場ではでは1分に1回の不良品が発生するとは言えないので、工場の改善によって不良品の発生数は改善されたと結論づけられます。

Pythonを使ったポアソン分布の検定統計量の求め方

pythonを使ってポアソン分布の統計検定量を求める場合は以下のようになります。まず、サンプル数は、改善後が1時間に40個とあるので、n = 60とします。また、λ(lambda1)は1分間に1個とあるので、1時間に60個となりまます。さらに、改善後の1時間当たりの不良品の数をXとしてそれぞれ用意します。次に、ポアソン分布における統計検定量を求めて、有意水準0.05の片側検定で検定を行います。

import math

n = 60 #1分に1個なので60分で60個
lambda1 = 60/60 #1分に1個を60分にしただけ
X = 40 #改善後の1時間あたりの不良品の数

z = (X/n - lambda1)/math.sqrt(lambda1/n)
print("ポアソン分布の統計検定量 = ", z)

ポアソン分布の統計検定量 = -2.5819888974716116

from scipy import stats
alpha = 0.05 #有意水準

z_value = stats.norm.ppf(1-alpha)

if z > z_value:
    print("z値は", z_value, "なので、帰無仮説を採択し、対立仮説を棄却するという結果になり、",
          "この工場ではでは1分に1回の不良品が発生するので、工場の改善によって不良品の発生数は改善されていない結論づけられます。")
    
else:
    print("z値は", z_value, "なので、帰無仮説を棄却し、対立仮説を採択するという結果になり、",
          "この工場ではでは1分に1回の不良品が発生するとは言えないので、工場の改善によって不良品の発生数は改善されたと結論づけられます。")

z値は 1.6448536269514722 なので、帰無仮説を棄却し、対立仮説を採択するという結果になり、 この工場ではでは1分に1回の不良品が発生するとは言えないので、工場の改善によって不良品の発生数は改善されたと結論づけられます。 ​

参考

統計学の時間 | 統計WEB