投資のためのデータサイエンス

個人の投資活動に役立つデータ分析にまつわる話題を綴ります。

Pythonで学ぶ統計学(3): 連続型確率分布(その1)

連続型の確率分布で最も基本的なものは、区間 [a,b ]で一定の確率密度を持つ「一様分布」です。

 \displaystyle \begin{equation} f(x;a,b)= \left \{\begin{array}{l}(b-a)^{-1}\ (a \leq x \leq b), \\ 0 \ (otherwise) \end{array} \right. \end{equation}

上記の一様分布はある値の区間内であればどの値も同程度の確率で起こるというものですが、我々の身近にある数量の分布、例えば「ある中学校の1年生男子生徒の身長の分布」や「過去50年間の1月1日の最高気温の分布」などは、平均的な値をとることが多く、極端に大きい値や小さい値をとることは稀であると期待されます。このような確率分布の典型的なものが、以下で表される「正規分布」です。

 \displaystyle f(x;\mu , \sigma ^{2})=\frac{1}{\sqrt{2\pi \sigma^{2}}}\exp \left \{-\frac{1}{2\sigma^{2}}(x-\mu)^{2} \right \}

ここで \mu, \sigma^{2} はパラメータです。この分布の平均(期待値)は \mu 、分散は \sigma ^{2} となります。

次に、以下の式で表される「指数分布」を考えます。

 \displaystyle f(x;\lambda )=\lambda \exp (-\lambda x) \ \ \ (x \geq 0)

ただし、 \lambda は正の値をとるパラメータです。この指数分布の平均は 1/\lambda 、分散は 1/\lambda^{2} です。(長い時間平均すると)時間 1/\lambda 当たり一人の客がランダムに到着する窓口がある時、単位時間当たりの客の到着人数は平均 \lambda ポアソン分布で、客の到着間隔は平均 1/\lambda の指数分布でそれぞれ表されます。

以下のPythonコードは、平均50, 標準偏差10の正規分布確率密度関数と、同じ分布に従う乱数のヒストグラムを重ねて表示したものです。正規分布確率密度関数はscipyのnorm.pdf()関数で、正規分布の乱数はrandom.gauss()関数でそれぞれ計算しています。またヒストグラムを描くためのplt.hist()関数の戻り値が「各区間の度数」「区間の区切り位置」「描写に使われているmatplotlibのオブジェクト」であることを利用し、さらにdensity=Trueオプションで縦軸が相対頻度を表示するようにしています。

import numpy as np
from scipy.stats import norm
import math
import matplotlib.pyplot as plt
import random
mu, sigma = 50, 10
normrand = [random.gauss(mu, sigma) for i in range(1000)]
fig = plt.figure()
ax = fig.add_subplot(111)
count, bins, grpobj = ax.hist(normrand, 30, density=True)
ax.plot(bins, norm.pdf(bins,mu,sigma),linewidth=2,color='r')
ax.set_title('Normal Distribution \n mean='+str(round(mu,1))\
+' SD='+str(round(sigma,1)))
plt.show()

 

normal_random_density.png