연속확률분포, 정규분포, 표준정규분포

2020. 7. 26. 20:38데이터 분석 기본

반응형

우리가 셀 수 있는 확률변수들의 분포를  이산확률분포라고 불렀습니다. 이러한 이상확률분포 중에는 대표적으로 이항분포와 포아송 분포가 있었습니다.

이산확률분포와는 다르게, 정규분포는 0과 1사이의 임의의 실수처럼 셀 수 없는 연속적인 값을 가지는 연속확률분포입니다. 정규분포는 연속적인 값을 가지는 확률변수의 분포를 나타내는데 가장 많이 적용되고 있는 분포입니다. 정규분포 외에도 데이터에 따라 더 적합한 분포들도 많이 제안되어 왔지만, 여전히 가장 강력하고 일상적으로 적용되고 있는 분포입니다.

[연속활률분포]

본격적으로 정규분포에 대해서 알아보기 전에, 연속확률분포에 대해서 알아보겠습니다. 연속확률분포는 이산확률분포처럼 발생가능한 모든 값에 확률을 대응/나열하여 표현하기가 어렵습니다. 발생 가능한 값이 무한대이기 때문입니다.

따라서 연속확률분포는 주어진 구간에서 확률이 어떻게 분포하는지를 판단하게 되고, 어느 구간의 확률이 작은지, 큰지를 나타낼 수 있는 함수를 이용하게 됩니다.

연속확률변수 X의 확률분포는 확률의 밀도를 나타내는 확률밀도함수에 의해 결정되며, 확률밀도함수는 아래와 같은 조건을 만족해야합니다.

연속확률분포에서는 정의 2) 에서 보는것과 같이 특정값을 가질 확률은 0입니다. 아래의 식처럼 구간의 크기가 0이기 때문입니다.

따라석 연속확률분포에서 엄밀하게 확률의 값을 정의하기 위해서는 "특정 구간"이 주어져야 합니다.(확률밀도함수의 값이 확률이 아님을 주의해야 합니다.)

[정규분포(normal distribution)]

정규뷴포는 "평균", "분산"에 의해서 그 분포가 확정됩니다. 그 확률밀도함수의 대략적인 특성은 다음과 같습니다.

출처:https://sites.google.com/site/nmrstudy/statistics/normalization

위의 사진에서 보는 것같이 확률 변수 X가 평균으로부터 1표준편차, 2표준편차, 3표준편차 사이에 있을 확률은 아래와 같습니다.

확률변수 X가 평균 μ, 표준편차 σ인 정규분포를 따를 때 주로 N(μ,σ^2)로 표현하게 됩니다. 표준편차 σ가 커질수록 정규분포의 모형은 옆으로 퍼지게 됩니다. 즉 퍼진정도가 커지게 됩니다.

출처:https://sites.google.com/site/nmrstudy/statistics/normalization

[표준정규분포(Standard normal distribution)]

표준정규분포는 평균이 0이고 표준편차가 1인 정규분포를 나타냅니다. 표준정규분포를 가지는 확률변수를 Z라고 표현했을 때 확률변슈 Z는 0을 중심으로 대칭인 분포를 가지게 됩니다.

출처:https://sites.google.com/site/nmrstudy/statistics/normalization

표준정규분포에서 확률변수 Z가 임의구간 [a,b]에 있을 확률은 아래와 같습니다.

만약 정규분포를 따르는 확률변수 X가 주어졌을 떄, 확률변수 X의 평균값(μ)과 표준편차값(σ)이용하여 평균이 0이고 표준편차가 1인 표준정규확률변수 Z로 변환할 수 있습니다.

 

파이썬을 활용하여 정규분포를 Simulation 해보도록 하겠습니다.

## 필요 Module Import

from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

mu = 10
std = 1
norm_ = norm(mu,std) ## 평균 10, 표준편차 1인 정규분포 생성

## 시각화
x = np.linspace(norm_.ppf(0.01), norm_.ppf(0.99),1000) ##  1%일때 x값, 99%일때 x값 사이의 x값 생성 
plt.plot(x, norm_.pdf(x),'r-', lw=5, alpha=0.6, label='norm pdf')
plt.legend()
plt.show()

data_norm = norm_.rvs(1000) ## 평균 10, 표준편차 1의 정규분포를 따르는 데이터 생성
plt.hist(data_norm, density =True, histtype = "stepfilled", alpha=0.2, label = "norm_hist")
plt.legend()
plt.show()

## 동시에 시각화 표현
fig, ax = plt.subplots(1, 1)
ax.plot(x, norm_.pdf(x),'r-', lw=5, alpha=0.6, label='norm pdf')
ax.hist(data_norm, density =True, histtype = "stepfilled", alpha=0.2, label = "simulation")
ax.legend(loc="upper right")
plt.show()

코드 참조

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html

반응형