오차 범위
오차 범위에 영향을 주는 요소
- 신뢰수준: 얼마나 극단적 경우까지 포함할 것인가?
- 표본 크기: 표본에 얼마나 많은 사례 포함할 것인가?
- 모집단 변산성: 모집단 데이터 퍼짐 정도 얼마나 큰가?
신뢰수준 (Confidence Level)
- 극단적인 경우를 포함하면 오차범위는 커짐
- 예: 6면체 주사위를 굴렸을 때 모두 1이나 모두 6이 나오면 표집 오차가 최대
- 극단적인 경우를 배제하면 오차범위를 줄일 수 있음
- 유의수준(significance level): 배제하는 극단적인 경우의 비율
- 예: 유의수준 5% = 5%의 극단적인 경우는 배제함
- 신뢰수준 = 100% - 유의수준
- 오차범위에 고려하는 비율
- 신뢰수준과 오차범위:
- 높은 신뢰수준 → 더 많은 가능성 → 넓은 오차범위
- 낮은 신뢰수준 → 더 적은 가능성 → 좁은 오차범위
- "신뢰"라는 말 때문에 헷갈리기 쉬우므로 주의
평균의 신뢰구간
pg.ttest(df.price, 0, confidence=0.95) # 95% 신뢰구간
pg.ttest(df.price, 0, confidence=0.99) # 99% 신뢰구간
중간값의 신뢰구간
sp.stats.bootstrap([df.price], np.median, confidence_level=0.95) # 95% 신뢰구간
sp.stats.bootstrap([df.price], np.median, confidence_level=0.99) # 99% 신뢰구간
신뢰 수준의 결정
- 신뢰수준은 적절한 수준에서 타협이 필요
- 신뢰수준이 지나치게 높으면, 가능성이 희박한 극단적인 경우를 너무 많이 고려 → 의사결정 불가능
- 신뢰수준이 지나치게 낮으면, 너무 많은 경우를 배제하여 의사결정의 타당성이 떨어짐
- 교과서적으로는 95%, 99% 등을 추천하나 절대적 기준은 없음
데이터의 변산성
- 데이터의 변산성이 크면 오차범위 커짐
- 20면체 주사위를 굴리고 -7을 하면 기대값은 6면체와 똑같이 3.5
- 오차범위는 훨씬 큼
- 6면체 주사위를 10개 굴려서 모두 1이 나올 가능성은 희박
- 20면체 주사위를 10개 굴려서 모두 8이하가 나올 가능성은 그보다 6천배 큼
- 실험과 측정을 정확히 해서 변산성을 낮추면, 오차범위가 작아짐
- 데이터에 내재한 변산성은 없앨 수 없음
표본의 크기
- 표본의 크기가 크면 오차범위 작아짐
- 주사위 10개 굴리기(10d6) vs. 50개 굴리기(50d6)
- 무한히 던지면 평균은 정확히 3.5에서 나옴(오차범위 0)
- 통계에서 거의 모든 문제의 해결 방법 → 데이터를 더 모아서 표본의 크기를 키운다(Big Data!)
- But, 시간과 비용이 증가
표본의 크기를 ¼로 줄일 경우
n, _ = df.shape
small = df.price.sample(n // 4, random_state=1234) # 1/4개 무작위 비복원 추출
pg.ttest(small, 0)
표본의 크기를 4배로 늘릴 경우
large = df.price.sample(n * 4, replace=True, random_state=1234) # 4배 무작위 복원 추출
pg.ttest(large, 0)
- 주의: 위는 표본의 크기가 변할 때 예시를 위한 것
- 실제 분석에서 데이터를 임의로 줄이거나 늘리면 절대 안됩니다!!
여론조사의 "표본오차" 항목
- 국내 여론조사 결과에서 "표본 오차"라는 이름으로 오차 범위를 표시
- 중심극한정리에 따라 신뢰수준 95%에서 오차범위는 다음과 같이 계산
- 계수의 의미:
- 1.96: 신뢰수준 95%에 해당하는 값 (신뢰수준 99%일 경우 2.58로 계산)
- 50: 찬성 50%를 기준으로 계산 여론조사의 변산성은 찬성률에 따라 달라지며, 50%일 때 변산성이 가장 큼
- : 설문 응답자 수
- 원하는 오차범위로부터, 필요한 설문 응답자 수를 역산할 수 있음
- 예: ±10% 오차범위면 충분할 경우 약 100명에게만 설문
- 표본의 크기를 4배로 키우면 오차범위가 1/2로 줄어듦
N을 알 때, 오차 범위 계산
N = 1000
신뢰수준 = 0.95
유의수준 = 1 - 신뢰수준
임계값 = sp.stats.norm.ppf(1 - 유의수준/2) # 양쪽으로 2.5%씩 제외하고 2.5% ~ 97.5% 구간
임계값 * 50 / np.sqrt(N)
원하는 오차 범위가 있을 때 필요한 N 구하기
오차범위 = 1 # 원하는 범위가 ±1%p일 경우
((임계값 * 50) / 오차범위) ** 2