こんにちは。今日は、統計学に関する内容です!
最近、統計検定の勉強をしているのですが、その中でいろいろな統計分布の種類があることを知ったは良いものの、違いが直感的によく分からず、実務に活かせる気がしなかったので、実際に絵や式を書いてみながら自分の頭を整理しておきたいと思います。
今回はその中でも指数分布について整理してみたいと思います。
なお、各内容の詳細については、他のWebサイトに分かりやすい説明があれば、そちらを引用させていただき、紹介させていただいております。
それでは早速参ります!
Contents
指数分布の理論
概要
指数分布は連続型確率分布の1つです。
指数分布の概要については、こちらが非常に分かり易かったのでご紹介します。
https://bellcurve.jp/statistics/course/8009.html
指数分布は連続型確率分布の一つで、機械が故障してから次に故障するまでの期間や、災害が起こってから次に起こるまでの期間のように、次に何かが起こるまでの期間が従う分布です。
上記Webサイトより引用
ということで、実務的には、「単位時間の間に平均(期待値)でλ回発生する事象において次のx分以内に事象が発生する確率」といった問題を解くために活用されます。
確率関数(確率密度関数)
$$ f(x) = \begin{cases} \lambda e^{- \lambda x} & x \geq 0 \\ 0 & x < 0\end{cases} $$ 上の式から分かるように、指数分布は、パラメータλによって決定されます。このλは、単位時間における事象の発生回数の期待値となります。 ちなみに、指数分布が題材となる問題では、次の時間x"以内"に事象が発生する確率を求めたかったりするので、その場合には以下の累積分布関数を用います。 $$ F(x) = 1-e^(\lambda t) $$期待値
上で紹介したλを用いて、期待値は以下のように表現されます。
$$ E[X]=\frac{1}{\lambda} $$分散
こちらもλを用いて以下のように表現されます。
$$ V[X]=\frac{1}{\lambda^2} $$Pythonによる実装サンプル
Scipyを使って簡単に実装する
幾何分布は、Scipyが提供するメソッドで簡単に再現できてしまいます!
文法については以下から確認できます。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.expon.html
上の理論式だと、指数分布にはパラメータλがありますが、scipyのexpon(pdf)には、なぜか正規分布と同じlocとscaleのパラメータしかない。これはどういうことだ・・?(後で調べる)
from scipy.stats import expon
import numpy as np
mean, var, skew, kurt = expon.stats(moments='mvsk')
#Mean
print("Mean:", mean)
#Var
print("Var:", var)
#Skew
print("Skew:", skew)
#Kurt
print("Kurt:", kurt)
#PDF (Probablity Density Function)
x = np.linspace(expon.ppf(0.01), expon.ppf(0.99), 100)
plt.plot(x, expon.pdf(x), label="PDF")
plt.title("PDF")
plt.xlabel("Data Points")
plt.ylabel("Probablity")
plt.legend()
plt.show()
#CDF (Cumulative Density Function)
plt.plot(x, expon.cdf(x), label="CDF")
plt.title("CDF")
plt.xlabel("Data Points")
plt.ylabel("Cumulative Probablity")
plt.legend()
plt.show()
一から実装する
上では、Scipyを利用した方法をご紹介しましたが、もちろん最初に解説した理論に基づいて、一から実装することも可能です。
以下にサンプルコードを示します。
こちらでも、上と同じ結果を確認することができました。こちらでは、理論式の通り、lambdaをパラメータにした実装ができました。
import math
lmd1 = 1
lmd2 = 5
lmd3 = 10
def expon(l,t):
result = l*math.exp(-l*t)
return result
x = np.arange(0,1,0.01)
y1 = [expon(lmd1,i) for i in x]
y2 = [expon(lmd2,i) for i in x]
y3 = [expon(lmd3,i) for i in x]
plt.plot(x, y1, label="Lambda:1")
plt.plot(x, y2, label="Lambda:5")
plt.plot(x, y3, label="Lambda:10")
plt.xlabel("t")
plt.ylabel("Probablity Density")
plt.legend()
plt.show()
ここで、λの値によらずt=0が最も次の事象が起こる確率が高くなる理由が直感的によく分からない・・と思ったのですが、以下にまさにその点が解説されていました。
https://qiita.com/g-k/items/5809fb97a6b4807f648f
確率分布についてもっと勉強するなら・・・
確率分布は、統計検定2級の出題範囲となっています。理論的な部分をもっと勉強されたい方は、以下のテキストを読まれると、体系的に学ぶことができます。
私もこちらで勉強しています。統計検定の公式テキストではありますが、比較的に分かりやすく解説されており、何より知識が体系的に整理されているので全体像を掴んで、理論の概要を理解するには良いと思います。
このテキストで分かりづらいと思った部分は、部分毎にネットで詳しく解説された記事を探したり、Udemyなどのオンラインコンテンツを利用していけば十分に理解が深まると思います。
Udemy講座
以上、確率分布について勉強したり実験してみたことをまとめた記事でした。
最後までご覧いただきありがとうございました!