기초통계

확률과 통계 II : 모집단, 표본 그리고 표집

2022. 8. 16. 16:52

확률과 통계 II


 

모집단과 표본

•  모집단 population

: 연구의 관심이 되는 집단 전체

 

•  표본 sample

: 특정 연구에서 선택된 모집단의 부분 집합

 

•  표집 sampling

: 모집단에서 표본을 추출하는 절차. "표본 추출"이라고도 함

 

 

 대부분의 경우 집단 전체를 전수조사하기는 어려우므로 무작위로 표본을 추출하여 모집단에 대해 추론한다.


모수

population parameter


 

 파라미터 parameter

: 어떤 시스템의 특성을 나타내는 값

 

모수

: 모집단 population의 파라미터 → 모집단의 특성을 나타내는 값

 

예시: 
•   모집단의 평균 (모평균)
•   모집단의 분산 (모분산)


주의.

"표본의 크기"를 "모수"라고 하는 경우도 있으나 이는 잘못된 표현
 모수를 구하기 위해서는 전수조사가 필요하지만 사실상 어려움.


통계량

표본에서 얻어진 수로 계산한 값 (=통계치)


 예시:
•   표본의 평균 (표본평균)
•   표본의 분산 (표본분산)

 

 주의:
•   "모집단의 통계량"이라는 표현은 없음 ( 통계량은 표본에서 구한 값 )
•   "표본의 모수" 같은 말도 없음 ( 모수모집단에서 구한 값 )

 

 

추론 통계 inferential statistics: 

표본 통계량을 일반화하여 모집단에 대해 추론 하는 것


< 통계량  시뮬레이션 >

 

모든 면이 나올 확률이 같은 주사위 100개를 던짐.

import numpy as np 

size = 100
x = np.random.randint(1, 7, size=size) 
sns.histplot(x, bins=[1,2,3,4,5,6,7])

 

> 1~6이 나올 확률이 모두 같으므로 모집단의 평균은 3.5

m = np.mean(x)


•  표본의 평균은 그보다 조금 크거나 작음.

 

 


표집분포

sampling distribution


표집분포

  통계량확률의 분포  

 

모집단에 대한 추론의 바탕이 되는 이론적 분포

동일한 모집단에서, 동일한 크기의 표본을, 동일한 방법으로 뽑더라도  통계량이 조금씩 다른 것을 확인할 수 있음.

 

* 주의 : 표본의 분포가 아님

 


< 표집분포  시뮬레이션 >

 

표본 뽑기를 1000번 반복했을 때, 표본 평균의 분포

import numpy as np
size = 100

ms = []
for _ in range(1000):
    x = np.random.randint(1, 7, size=size)
    m = np.mean(x)
    ms.append(m)
    
sns.histplot(ms, kde=True)

 

표집분포의 특성

•  각 표본의 분포는 모집단의 분포와 비슷
•  1~6이 대체로 고르게 나옴
•  표집 분포는 모수를 중심으로, 모수와 가까운 값이 더 많이 나옴
•  평균의 표집 분포는 3.5 근처에서 많이 나옴
•  어떤 통계량(예: 평균)은 표집 분포의 형태를 이론적으로 알 수 있음


 

평균의 표집분포

표준 오차 (standard error)

: 표집 분포의 표준 편차

 

•  시뮬레이션에서 관찰된 표준오차
np.std(ms)

 

•  이론적으로 예측된 표준오차
np.std([1,2,3,4,5,6]) / np.sqrt(size)

 

 

데이터를  많이  모아야  하는  이유

•  데이터가 많을수록 표준 오차가 작아짐
•  표본의 통계량이 모수에 더 가깝게 나옴
•  표준오차는 1/ 𝑛 으로 줄어들기 때문에, 데이터를 4배 늘리면 2배 더 정확.

 


추정

estimation


추정 esimation

통계량으로부터 모수를 추측하는 절차

 

• 점 추정 point estimate

: 하나의 수치로 추정

 

• 구간 추정 interval estimate

: 구간으로 추정

 

 


신뢰구간 confidence interval

대표적인 구간 추정 방법

  신뢰구간  =  통계량 ± 오차범위

 

 

신뢰수준 confidence level

신뢰구간에 모수가 존재하는 표본의 비율

 

  신뢰수준이 높음   → 많은 표본을 포함 → 더 넓은 오차범위 → 정보가 적음
  신뢰수준이 낮음 → 적은 표본을 포함 → 더 좁은 오차범위 → 정보가 많음

 

   신뢰수준 개념 이해하기   

더보기

ex1)

치킨을 배달을 시키려고 하는데

치킨집 사장님을 배달이 얼마나 걸린다고 이야기를 할까?

보통 20 -30분 걸린다.

 

사장님 생각 > 길이 막힐수도 있으니 한 20~40분

                           비가 많이 올 수도 있지 않을까 20~60분

                           싱크홀이 생길 수도 있지 않을까 20~80분

                           갑분 전쟁이 나면 다 죽을지도 모르잖아? 20 ~ ∞

 

희박한 확률을 고려하면, 예외적인 케이스를 더 많이 포함하므로 신뢰구간이 넓어질 수 밖에 없다.

신뢰수준이 높다는 얘기는 정확하다는 이야기가 아니라 경우의 수가 많다는 이야기


•  신뢰구간이 좁으면 신뢰수준이 낮으므로 타협이 필요
•   교과서적으로는 95%, 99% 등을 추천하나 절대적 기준은 없음
•   감수할 수 있는 수준에서 결정

 


평균의  95% 신뢰구간 구하기

pip install pingouin

# 위 코드로 패키지 설치 안될 경우
import sys
!{sys.executable} -m pip install <패키지명>

# 평균의 95% 신뢰구간
import pingouin as pg
pg.ttest(df.price, 0, confidence=0.95)

CI95% < 전체 중고차 시장을 모두 조사하면 이 범위 내에 가격이 있을것이다.


 

부트스트래핑 (bootstrapping)

평균과 달리 중간값, 최빈값 등의 통계량은 표집분포의 형태를 간단히 알기가 어렵다.

표본이 충분히 크면, 부트스트래핑이라는 시뮬레이션 기법을 사용해서 신뢰구간을 추정

 

전체 관측값들 중 일부를 뽑아서 통계값을 측정하는 과정을 여러번 반복

복원 추출법(sampling with replacement) 사용

 

 

import scipy.stats

import pandas as pd

 

scipy.stats.bootstrap([컬럼], 통계값)

import scipy
import pandas as pd

df = pd.read_excel('car.xlsx')
scipy.stats.bootstrap([df.price], np.mean)

 

> 신뢰구간의 99%의 스트래핑

import scipy.stats
import numpy as np

scipy.stats.bootstrap([df.price], np.mean, confidence_level=0.99)

 

 


 

신뢰구간에 영향을 주는 요소

•  신뢰구간이 좁을수록 예측된 모수의 범위가 좁으므로 유용
•  신뢰수준 낮추기: 큰 의미는 없음
•  표본의 변산성 낮추기:

   - 실험과 측정을 정확히 해서 변산성을 낮춤
   - 데이터에 내재한 변산성은 없앨 수 없음
•  표본 크기 키우기 :  가장 쉬운 방법이나 시간과 비용이 증가