賢くなりたいトイプードルの日記

データサイエンス系の話をメインにしていきます

標準偏差の気持ち

標準偏差の前に理解しておくと良いことがあります。

平均と分散です。

平均(算術平均)とは、要素の総和を要素数で割った結果のことですね。

$$ \frac{1}{n} \sum_{j=1}^{n} x_j $$

これです。では分散はというと、

$$ \frac{1}{n} \sum_{j=1}^{n} (x_j - \bar{x})^2 $$

$\frac{1}{n} \sum_{j=1}^{n}$の右側が、平均では$x_j $で、分散では$(x_j - \bar{x})^2 $になってます。「(各要素) - (要素全体の平均)」の2乗の総和を要素数で割ったものが分散です。つまり、一個一個の要素が、平均に比べてどれだけ離れているかを調べて(負の値になったものを足さないようにするために2乗します)、その平均値を出しているということになります。

分散は要素の散らばり具合を調べる指標になりますね。

ここまでくれば標準偏差がわかります。

標準偏差は、

$$ \sqrt[2]{\frac{1}{n} \sum_{j=1}^{n} (x_j - \bar{x})^2} $$

です。つまり分散の平方根です。

なぜ平方根にするかというと、分散が2乗しているからです。分散を平方根にすることで、平均値からどれだけずれているかを把握することができます。

たとえば分散が100であれば、標準偏差が10になるので、平均値から平均的に10ばらついているということになります。

Pythonで実装してみましょう

import numpy as np

np.random.seed(seed=0)
nums = np.random.randint(0,100,10)
nums
array([44, 47, 64, 67, 67,  9, 83, 21, 36, 87])

平均(算術平均)$ \frac{1}{n} \sum_{j=1}^{n} x_j $は

(1/len(nums)) * sum(nums)
52.5

そして分散$ \frac{1}{n} \sum_{j=1}^{n} (x_j - \bar{x})^2 $は

(1/len(nums)) * sum((nums - (1/len(nums)) * sum(nums))**2)
593.25

標準偏差は$ \sqrt[2]{\frac{1}{n} \sum_{j=1}^{n} (x_j - \bar{x})^2} $

np.sqrt((1/len(nums)) * sum((nums - (1/len(nums)) * sum(nums))**2))
24.3567239176372

ということで、この十個の数値は52.5という平均値をとり、その平均値から平均的に24.4程度ばらついているということになります。