Categories
자료 분포 모델링
이번 글에서는 주어진 자료로부터 계산한 산술 평균과 표준편차로부터 정규분포도를 그리는 방법과, 이를 해석하는 법에 대해 설명하려고 한다. 진행한 실험이나 논문을 본 적이 있다면, 그 실험의 신뢰도를 확인한 적이 있을 것이다. 신뢰도란 측정의 전반적인 일관성을 의미하는 것으로 이번에 소개할 정규분포와 관련이 깊다. 따라서 신뢰도를 설명하기 전에 정규분포에 대해 짚고 넘어가기로 한다.
정규분포란?
정규분포를 설명하기 위해, 아르바이트를 하는 국내의 모든 청년들의 월급을 조사하기로 했다고 가정하자. 물론 국내의 모든 청년들에게 일일이 물어봐서 기록하는 것이 가장 정확하겠지만, 900만(2019년 기준) 가까이 되는 청년들에게 일일이 아르바이트를 하는지, 월급은 얼마인지 물어보는 것은 사실상 매우 어렵다.
이런 경우 전체 집단을 조사하는 것보다 일부만을 조사해서 자료를 얻은 뒤, 데이터 분석을 하는 것이 더 바람직하다. 이렇게 별도로 표본을 추출해서 모집단의 성질을 추정하는 것을 표본조사라 한다. 표본조사 시행 시 이 표본이 모집단을 대표하는지, 편향성은 없는지, 조사해야할 표본의 수가 충분한지 등등 고려해야 할 사항이 많지만, 이 글에서는 모든 고려사항을 무시하고 정규분포를 설명하기에 적절한 데이터 셋을 가지고 컴퓨터로 그래프를 그려보도록 하겠다.
파이썬언어의 numpy와 matplotlib 라이브러리를 이용하면 주어진 표본의 수에 따라 랜덤으로(결과적으로 정규분포에 가까워지는) 숫자를 추출해 그래프를 빠르게 그릴 수 있다.
정규분포 그래프를 구하는 코드
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
N = 50
x = (15 * np.random.randn(N)) + 160
num_bins = 20
plt.hist(x, bins=num_bins, facecolor='blue', alpha=0.5)
bin_width = (x.max() - x.min()) / num_bins
plt.show()
우선 청년 50명의 월급을 조사헤서 그래프를 그려보자.
50이라는 적은 표본 수의 그래프는 데이터가 들쑥날쑥 함을 직관적으로도 알 수 있다. 160만원에서 170만원의 월급을 받는 청년의 수를 살펴보면, 1 명에서 6 명까지 범위가 큰 편이다. 이 표본 수만을 가지고는 전체 집단에 대한 통찰을 얻기 힘들다.
좀 더 열정적으로 조사를 해서 1000명의 월급 데이터를 수집해서 그래프를 그렸다고 가정해보자.
점점 그래프가 종형을 띠는 것이 보인다. 50명을 조사했을 때보다 그래프가 좀 더 세분화 되고 있는 것 같다. 만약, 1000명씩 조사하는 실험을 여러 번 반복하게 된다면, 그래프는 종형 곡선(bell curve) 모양을 나타내게 된다.
실험을 반복하면 할 수록, 그래프는 결국 종형 곡선 모양을 나타내게 될 것이다.
위 그래프에 따르면 정규분포는 다음과 같은 특징을 가진다. (μ = 평균, σ = 표준편차)
- 종 모양의 대칭 구조이다.
- 평균과 중앙값은 서로 같고, 분포의 중앙에 있다.
- 자료의 대략 68 %는 평균으로부터 오른쪽, 왼쪽으로 표준편차의 1배 내에 있다.
- 자료의 대략 95 %는 평균으로부터 오른쪽, 왼쪽으로 표준편차의 2배 내에 있다.
- 자료의 대략 99.7 %는 평균으로부터 오른쪽, 왼쪽으로 표준편차의 3배 내에 있다.
정규분포 그래프 해석
그렇다면 특정 범위 내의 월급을 받는 청년의 수는 전체 집단의 몇 %인지 알 수 있는 방법은 무엇일까? 130만원에서 150만원 사이의 월급을 받는 청년의 비율을 알고 싶을 경우, 다음 그림처럼 그래프의 면적을 구하면 된다.
다음과 같은 사항은 안 된다.
정규분포 그래프 내에서 이 질문에 대한 답을 구하고자 할 때, 단일 값에 ‘정확히’ 포함되는 비율은 구할 수 없다. 예를 들어 정확하게 160만원을 받는 청년의 비율을 구할 수 없다는 말이다. 월급에 여러 세금이 적용되는 것을 생각해보면, 이런 단위(150, 160, …)의 월급을 받는 사람은 극히 드물 것이다. 따라서 160~161 사이의 범위를 구하는 것과 같이 해야한다.
정규분포 그래프의 넓이를 구하는 공식을 사용하면 해당 비율을 알 수 있다.
k와 j = 구하고자 하는 범위, σ = 표준편차, μ = 평균
하지만 정규분포는 조사의 대상마다 다르기 때문에 매번 확률을 이렇게 계산하는 것은 매우 번거롭다. 훨씬 더 쉬운 방법이 있다. 먼저 정규분포를 표준화하여 표준정규분포로 전환한다. 표준화하는 방법은 다음 링크 를 참고하자.
표준화를 시행하면 이 그래프와 같이 범위에 대한 Z값을 얻을 수 있다. 이후 표준정규분포표로 여러 Z값에 해당하는 면적의 넓이인 확률을 구할 수 있다.
여기서 구해야 할 값은 -3에서 -1 사이의 범위를 구하는 것이므로, -1 이하의 면적이 나올 확률에서 -3 이하의 면적이 나올 확률을 빼주면 된다.
따라서 다음과 같이 계산된다.
0.0228 (-1 이하의 면적이 나올 확률) - 0.0013 (-3 이하의 면적이 나올 확률) = 0.0215 » 21.5 %
즉 이 자료에서 월급을 130만원과 150만원 사이로 받는 청년의 비율은 전체의 21.5 %라는 결과를 얻을 수 있다.