TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 - 수학 | 통계학>

[개발자를 위한 수학] 추론 통계

by 기록자_Recordian 2024. 10. 6.
728x90
반응형
추론 통계

 

추론 통계는 모집단에 대한 어떤 미지의 양상을 알기 위해 통계학을 이용하여 추측하는 과정을 지칭한다. 추론 통계에서는 표본과 모집단 간의 추상적인 관계가 본격적으로 작동한다.

추론통계의 목적은 주어진 데이터(sample)을 이용하여 모집단의 특성(모수)를 추론하는 것이다. 주로 추론 통계는 가설검정을 이용하여, 모수를 판단한다.
주로, 추론 통계는 1) 가설 설정 -> 2) 데이터 수집 -> 3) 귀무가설의 기각 여부를 결정하는 방법으로 이루어진다.

 

◆ 중심 극한 정리

정규 분포가 유용한 이유 중 하나는 앞서 진행했던 중학생의 몸무게처럼 자연에서 많이 나타나는 현상이기 때문이다. 하지만 정규 분포는 자연 개체군 밖에서 더 흥미롭게 나타나는데, 모집단에서 충분히 많은 표본을 추출하면 해당 모집단이 정규 분포를 따르지 않더라도 정규 분포가 드러난다.

 

중학생 몸무게 관련 정규 분포 글

 

[개발자를 위한 수학] 기술 통계: 평균, 분산, 정규 분포(+파이썬)

기술 통계 평균, 중앙값, 모드, 차트, 종, 곡선을 계산하거나 데이터를 설명하기 위한 통계.측정이나 실험에서 수집한 자료(data)의 정리, 요약, 해석, 표현 등을 통해 자료의 특성을 규명

puppy-foot-it.tistory.com

 

 

[파이썬으로 중심 극한 정리 실험하기]

# 파이썬으로 중심 극한 정리 실험하기
# 균등 분포에서 뽑은 표본의 평균은 정규 분포가 된다
import random
import plotly.express as px

sample_size = 31
sample_count = 1000

# 중심 극한 정리, 크기가 31개인 1000개의 표본
# 0.0과 1.0 사이의 난수
x_values = [(sum([random.uniform(0.0, 1.0) for i in range(sample_size)]) / sample_size) for _ in range(sample_count)]

y_values = [1 for _ in range(sample_count)]

px.histogram(x=x_values, y=y_values, nbins=20).show()

 

균일하게 무작위한 모집단을 측정한다고 가정해보자. 0.0과 1.0 사이의 모든 값은 동등한 가능성을 가지며 어떤 값도 우선권이 없다. 하지만 이 모집단에서 많은 표본을 채취하고 각각의 평균을 구한 다음, 히스토그램을 그려보면

 

균등하게 무작위한 숫자 31개를 추출한 다음 평균을 구했는데, 정규 분포를 형성하였다.

이는 표본에 있는 하나의 숫자만으로는 정규 분포를 만들 수 없고, 모든 숫자가 나올 가능성이 똑같은 평평한 분포가 되는데, 이를 균등 분포(uniform distribution) 라고 한다.

이 표본의 평균을 내면 정규 분포를 형성한다.

 

즉, 모집단에서 충분히 많은 표본을 채취해 각각의 평균을 계산하고, 이를 하나의 분포로 그리면 흥미로운 중심 극한 정리 (central limit theorem) 현상이 나타난다.

  • 표본 평균의 평균은 모집단 평균과 같다
  • 모집단이 정규 분포이면 표본 평균도 정규 분포가 된다
  • 모집단이 정규 분포가 아니지만 표본 크기가 30보다 큰 경우 표본 평균은 대략적으로 정규 분포를 따른다
  • 표본 평균의 표준 편차는 모집단 표준 편차를 n의 제곱근으로 나눈 값과 같다.

 

이러한 이론을 통해 정규 분포가 아닌 경우에도 표본을 기반으로 모집단에 대한 유용한 정보를 추론할 수 있다. 만약 표본 크기를 1 또는 2로 작게 하면 정규 분포가 나타나지 않는다.

 

[표본 크기를 1로 했을 경우]

# 파이썬으로 중심 극한 정리 실험하기
# 균등 분포에서 뽑은 표본의 평균은 정규 분포가 된다
import random
import plotly.express as px

sample_size = 1 # 표본 크기 줄이기
sample_count = 1000

# 중심 극한 정리, 크기가 31개인 1000개의 표본
# 0.0과 1.0 사이의 난수
x_values = [(sum([random.uniform(0.0, 1.0) for i in range(sample_size)]) / sample_size) for _ in range(sample_count)]

y_values = [1 for _ in range(sample_count)]

px.histogram(x=x_values, y=y_values, nbins=20).show()

★ 통계학에서의 31
31은 통계학에 있는 매직 넘버이다. 표본 평균이나 기타 파라미터를 측정할 때 표본 분포가 모집단 분포에 수렴하는 경우가 많기 때문이다.
표본 크기가 31미만인 경우 정규 분포가 아닌 t 분포(t-distribution) 를 사용해야 한다.
t 분포는 표본 크기가 작을수록 꼬리가 점점 더 두꺼워진다.

★ 충분한 표본의 크기는?
기본 분포가 멀티모달(평균이 하나가 아닌 여러 개의 정점이 있는 분포)이거나 비대칭인 경우에는 31보다 더 큰 표본이 필요하다. 
즉, 기본 확률 분포가 불확실한 경우에는 표본을 더 많이 확보하는 것이 좋다.

◆ 신뢰구간

신뢰구간(confidence interval)은 표본 평균(또는 다른 파라미터)이 모집단 평균의 특정 범위에 속한다고 얼마나 확실하게 믿는지를 보여주는 방법이다.

주로, 대통령 선거나 국회의원 선거날 뉴스에서 출구 조사 결과를 발표하는 등의 여론 조사 관련하여 많이 들어서 익숙할 것이다.

 

오차범위? 신뢰수준? 여론조사의 비밀을 풀어보자 - 정치∙사회

‘박-문 후보 오차범위 초접전.’ 요즘 신문이나 방송에서 가장 많이 보게 되는 표현이에요. ‘박’은 박근혜 새누리당 후보, ‘문’은 문재인 민주통합당 후보를 말하죠. 나를 뽑아달라고 말하

www.pagi.co.id

 

그렇다면, 이러한 신뢰 구간은 어떻게 알 수 있을까?

먼저 모집단 평균 범위에 대한 확률을 포함할 수 있는 신뢰 수준(level of confidence, LOC) 을 선택한다. 표본 평균이 앞으로 계산할 모집단 평균 범위에 속한다는 95%의 확신을 갖고 싶다고 가정한 경우, 이게 LOC 이며 중심 극한 정리를 활용해 이 모집단 평균의 범위를 추론할 수 있다.

먼저, 중앙의 95% 확률에 해당하는 표준 정규 분포의 대칭 범위인 임계 z 값(critical z-value)이 필요하다.

 

면적의 0.95를 포함하는 이 대칭 범위를 계산하기 위해서는 먼저 역CDF를 활용해야 한다.

중앙에서 대칭 영역의 95%를 얻으려면 나머지 5%의 면적을 가진 꼬리를 잘라내야 한다. 나머지 5%의 면적을 반으로 나누면 각 꼬리에서 2.5%의 면적이 남는다.

따라서 0,025와 0.975에 대한 x 값을 찾아야 한다.

해당 x 값을 찾으면 면적의 95%를 포함하는 중앙 범위를 얻을 수 있고, 그런 다음 이 영역을 포함하는 최소 z 값과 최대 z 값을 반환한다. 여기서는 표준 정규 분포를 사용하므로 양수/음수 부호 외에는 두 값이 동일하며,

이 전체 과정을 파이썬으로 계산해보면 아래와 같다.

 

[임계 z 값 검색]

# 임계 z 값 검색
from scipy.stats import norm

def critical_z_value(p):
    norm_dist = norm(loc=0.0, scale=1.0)
    left_tail_area = (1.0 - p) / 2.0
    upper_area = 1.0 - ((1.0 -p) / 2.0)
    return norm_dist.ppf(left_tail_area), norm_dist.ppf(upper_area)

print(critical_z_value(p=0.95))

± 1.95996 은 표준 정규 분포의 중심에서 확률의 95%에 해당하는 임계 z 값이다.

 

다음으로 중심 극한 정리를 활용해 해당 신뢰 수준에서 모집단 평균을 포함하는 표본 평균의 범위인 허용 오차(E, margin of error)를 계산한다.

허용 오차의 공식은 아래와 같다.

 

예를 들어, 표본의 수는 31, 표본의 평균은 64.408이고 표준 편차는 2.05인 데이터의 허용 오차를 구한다면

 

95% 신뢰 구간 = 64.408 ± 0.72164

 

이며, 이를 파이썬으로 계산하면 아래와 같다.

 

[파이썬에서 신뢰 구간 계산하기]

# 파이썬에서 신뢰 구간 계산하기
from math import sqrt
from scipy.stats import norm

def critical_z_value(p):
    norm_dist = norm(loc=0.0, scale=1.0)
    left_tail_area = (1.0 - p) / 2.0
    upper_area = 1.0 - ((1.0 -p) / 2.0)
    return norm_dist.ppf(left_tail_area), norm_dist.ppf(upper_area)

def confidence_interval(p, sample_mean, sample_std, n):
    # 표본 크기는 30보다 커야 한다

    lower, upper = critical_z_value(p)
    lower_ci = lower * (sample_std / sqrt(n))
    upper_ci = upper * (sample_std / sqrt(n))

    return sample_mean + lower_ci, sample_mean + upper_ci

print(confidence_interval(p=0.95, sample_mean=64.408, sample_std = 2.05, n=31))

▶ 해당 결과를 토대로 하면,

'표본 평균이 64.408이고, 표본 표준 편차가 2.05인 31개의 데이터 표본을 기반으로 모집단 평균이 63.686 사이에서 65.129 사이에 있다고 95% 확신한다' 라고 해석할 수 있다.

 

또한, 오차 범위 공식에서 n 이 커질수록 신뢰 구간이 좁아지는데, 이는 표본이 클수록 모집단 평균이 더 좁은 범위 안에 속한다고 확신할 수 있기 때문이다.

 

주의할 것은 이 방법이 제대로 작동하려면 표본 크기가 최소 31이어야 하며, 더 작은 표본에서 신뢰 구간을 적용하려면 t 분포를 사용해야 한다.


◆ p 값

일반적으로 통계적 유의성의 임계값은 5% 이하의 p 값, 즉 0.05이다.만약 확률이 0.05보다 작으면 귀무 가설을 기각할 수 있고, 반대 의견인 대립 가설을 지지할 수 있다.

  • 귀무가설(null hypothesis, H0): 일반적으로 연구에서 검정하는 가설
  • 대립가설(alternative hypothesis, H1): 연구자가 연구를 통해 입증되기를 기대하는 예상이나 주장하는 내용

※ 통계적 유의성(statistical significance): 연구자가 자신의 실험 (또는 기존 데이터에 대한 연구) 결과가 우연히 일어난 것인지 아니면 우연히 일어날 수 없는 극단적인 것인지를 판단하는 방법. 통계적 유의성은 귀무 가설을 기각할 확률인 유의 확률(p-value)을 통해 평가하며, 이 값이 유의 수준 이하일 때 특별히 유의하다고 말한다.


 

◆ t 분포; 소규모 표본 처리

신뢰 구간을 계산하거나 가설 검정을 수행할 때 표본의 크기가 30 이하라면 정규 분포 대신 t 분포를 사용한다. t 분포는 정규 분포와 비슷하나 더 많은 분산과 불확실성을 반영하기 위해 꼬리가 더 두꺼우며 표본 크기가 작을수록 더 두껍다.

그러나 표본 크기가 30에 가까워지면 t 분포가 정규 분포와 거의 구분할 수 없게 되며, 이는 중심 극한 정리의 개념을 잘 반영한다.

 

아래는 95% 신뢰도에 대한 임계 t 값(critical t-value)을 찾는 방법을 보여주는데, 표본 크기가 30이하일 때 신뢰 구간 및 가설 검정을 위해 이 값을 사용할 수 있다. 개념적으로는 임계 z 값과 동일하지만, 더 큰 불확실성을 반영하기 위해 정규 분포 대신 t 분포를 사용하며, 표본 크기가 작을수록 범위가 커져 더 큰 불확실성을 반영한다.

 

※ 임계값( critical number): 하나의 변수 x가 어느 값이 되었을 때 특이한 상태나 급격한 변화가 일어나 임계 상태에 있을 때의 x값. 임계란 '경계'와 비슷한 개념으로, 어떤 변화가 나타나기 시작하는 지점을 말한다.

 

[t 분포로 임곗값 범위 구하기]

# t 분포로 임계값 구하기
from scipy.stats import t

# 표본 크기가 25일 때
# 95% 신뢰도에 대한 임계값 범위 구하기

n = 25
lower = t.ppf(0.025, df=n-1)
upper = t.ppf(0.975, df=n-1)

print(lower, upper)

df는 자유도(degree of freedom) 매개변수이며, 표본 크기보다 하나 작아야 한다.


다음 내용

 


[출처]

개발자를 위한 필수 수학

위키백과

연금술사 - 티스토리

TTA정보통신용어사전

Uno Laboratory - 티스토리

자카르타 경제신문

728x90
반응형