Standard Deviation - 표준 편차

Standard Deviation - 표준 편차

Standard Deviation (std) 이란 통계에서 아마 평균다음으로 가장 많이 사용되는 항목이라고 생각 되는 매우 중요한 부분이라고 할 수 있다.


너무 많이 사용되다보니 numpy 나 pandas 등에 기본으로 탑재되어 있고, 결과적으로 이게 왜 이런값이 나오는지는 모르는 상황이 벌어진다.


Equation

먼저 수학적인 공식을 함께 살펴보자

$$\sigma(X) = \frac{1}{m}\sum(x_i-\mu)^2,\ where\ X=\{x_1,\ ...\ ,x_m\}\ for\ m\ \in N \\ s(X) = \frac{1}{n-1}\sum(x_i-\bar{X})^2,\ where\ X=\{x_1,\ ...\ ,x_n\}\ for\ n \in\ N$$

통상적으로 모집단 (population)의 표준편차는 σ, 표본 (sample)의 표준편차는 s로 표기한다

마찬가지로 모집단의 평균은 μ, 표본의 평균은 x̄로 표기한다.

 

공식에 의하면, 표준 편차란 각각의 포인트 x가 평균에서 얼마나 벗어나는 지를 구한 값이라고 할 수 있다.


가끔 듣는 질문으로 여기서 왜 제곱을 하냐고 하는데, 평균값을 빼주다보니 제곱을 하지 않으면 나오는 값들이 상쇄되어 0이 되기 때문에 절대값을 취하기 위해 제곱을 한다고 설명해주면 된다.

우리가 데이터와 씨름할 때, 모집단을 다룰일은 없다고 생각하면 된다. 전세계의 모든 정보를 수집해서 쓸 수 있지는 않으니까, 통상적으로 만지는 데이터는 표본이라고 가정하면 되고, 고로 위의 공식에서 s(X)를 사용하면 된다.


공식을 알았으니 python에서 가볍게 구해보자. 이해를 돕기위해 외부 라이브러리는 전혀 사용하지 않았다. 비교를 위해 사용한 데이터셋은 여기서 받을 수 있다. 

GoldenRatio.csv

Python

def standard_deviation(X):
    n = len(X)
    mean = sum(X)/n
    result = 0
    for x in X:
        result += (x - mean)**2
    result /= (n-1)
    return result ** 0.5

이제 실제 값들이 어떻게 나오는지 비교 해보자

import pandas as pd
df = pd.read_csv('./GoldenRatio.csv')

df.Height.std(ddof = 1)
# 11.236505594312428

import numpy as np
np.std(df.Height, ddof = 1)
# 11.236505594312428

standard_deviation(df.Height)
# 11.236505594312428

실제로 pandas는 ddof의 default값이 1로 되어있어서 굳이 선언할일 없지만, 비교를 위해 적어 넣었다.

ddof는 degree of freedom으로, 설명하기 시작하면 굉장히 길어지니 (...) 이번 포스트에서는 1이라고만 하고 넘어가도록 한다. 


여기까지 표준편차에 대해 가볍게 알아 보았다. 아직 몇몇 개념은 설명하지 않고 넘어갔지만, 추후 포스팅들과 함께 같이 이해해보자.


그래도 이해가 안된다면? QnA 게시판 바로가기