신뢰구간
신뢰구간
- 신뢰구간(confidence interval)은 대표적인 구간 추정 방법
- 하나의 점 추정값만 제시하지 않고, 모수가 포함될 것으로 기대되는 범위를 제시함
- 기본 형태
- 신뢰구간 = 통계량 ± 오차범위
- 신뢰수준, 표본의 크기, 데이터의 변산성 등을 고려하여 오차범위를 이론적으로 유도해 사용
오차 범위
- 오차 범위(margin of error)는 표집 오차가 발생하는 범위
- 6면체 주사위의 경우 표집오차는 아무리 커도 를 넘을 수 없음
- 오차범위에 영향을 주는 요소
- 신뢰수준: 얼마나 극단적인 경우까지 포함할 것인가
- 표본의 크기: 표본에 얼마나 많은 사례를 포함할 것인가
- 모집단의 변산성: 모집단의 변산성이 얼마나 큰가
신뢰수준
- 신뢰수준(confidence level)은 오차범위에 고려하는 비율
- 극단적인 경우까지 포함하면 오차범위는 커짐
- 예: 6면체 주사위를 굴렸을 때 모두 1이나 모두 6이 나오면 표집 오차가 최대
- 극단적인 경우를 배제하면 오차범위를 줄일 수 있음
- 유의수준(significance level)
- 배제하는 극단적인 경우의 비율
- 예: 유의수준 5% = 5%의 극단적인 경우는 배제함
- 신뢰수준 = 100% - 유의수준
- 신뢰수준과 오차범위
- 높은 신뢰수준 → 더 많은 가능성 → 넓은 오차범위
- 낮은 신뢰수준 → 더 적은 가능성 → 좁은 오차범위
- "신뢰"라는 말 때문에 헷갈리기 쉬우므로 주의

신뢰 수준 100%면 안되는 이유
- 신뢰수준을 100%로 잡으면 사실상 모든 가능한 극단적 경우를 포함해야 함
- 그러면 오차범위가 너무 넓어져 실질적인 의사결정에 도움이 되기 어려움
- 통계적 추정은 불확실성을 완전히 제거하는 것이 아니라, 합리적인 수준에서 관리하는 과정

신뢰 수준의 결정
- 신뢰수준은 적절한 수준에서 타협이 필요
- 신뢰수준이 지나치게 높으면 가능성이 희박한 극단적 경우를 너무 많이 고려하여 의사결정이 어려워짐
- 신뢰수준이 지나치게 낮으면 너무 많은 경우를 배제하여 의사결정의 타당성이 떨어짐
- 교과서적으로는 95%, 99% 등을 추천하지만 절대적 기준은 아님
데이터의 변산성
- 데이터의 변산성이 크면 오차범위가 커짐
- 20면체 주사위를 굴리고 7을 빼면 기대값은 6면체 주사위와 똑같이 3.5
- 하지만 20면체 주사위는 가능한 값의 범위가 더 넓기 때문에 오차범위가 훨씬 큼
- 6면체 주사위를 10개 굴려서 모두 1이 나올 가능성은 매우 희박함
- 20면체 주사위를 10개 굴려서 모두 8 이하가 나올 가능성은 그보다 훨씬 큼
- 실험과 측정을 정확히 해서 변산성을 낮추면 오차범위가 작아짐
- 데이터에 내재한 변산성은 없앨 수 없음

표본의 크기
- 표본의 크기가 크면 오차범위가 작아짐
- 주사위 10개 굴리기(10d6)와 50개 굴리기(50d6)를 비교하면 표본 수가 많은 쪽의 평균이 기대값에 더 가까워지는 경향
- 무한히 던지면 평균은 정확히 3.5에 가까워지고 오차범위는 0에 가까워짐
- 통계에서 거의 모든 문제의 해결 방법은 데이터를 더 모아서 표본의 크기를 키우는 것
- 하지만 표본을 늘리면 시간과 비용도 증가함


실습 준비
패키지를 설치합니다.
pip install pandas seaborn matplotlib pingouin statsmodels openpyxl
실습 파일을 불러옵니다.
import pandas as pd
df_ship = pd.read_excel("ship.xlsx")
평균의 신뢰구간
- 모든 통계량에는 신뢰구간이 존재
- 평균의 경우에는 이론적으로 신뢰구간을 비교적 간단히 구할 수 있음
pingouin의ttest결과에서CI95%는 평균의 95% 신뢰구간을 의미
import pingouin as pg
pg.ttest(df_ship.speed, 0, confidence=0.95)
여론조사의 표본오차
- 국내 여론조사 결과에서는 "표본 오차"라는 이름으로 오차 범위를 표시
- 중심극한정리에 따라 신뢰수준 95%에서 오차범위를 계산할 수 있음
- 찬성률 50%를 기준으로 계산하면 변산성이 가장 큰 보수적 상황을 가정하는 것
- 설문 응답자 수 이 커질수록 오차범위는 작아짐
- 원하는 오차범위로부터 필요한 설문 응답자 수를 역산할 수 있음
- 예: 오차범위면 충분할 경우 약 100명에게만 설문

부트스트래핑
- 평균과 달리 중간값, 최빈값 등의 통계량은 오차범위를 이론적으로 유도하기 어려움
- 표본이 충분히 크면 부트스트래핑(bootstrapping)이라는 시뮬레이션 기법을 사용해서 신뢰구간을 추정
- 부트스트래핑은 표본에서 반복적으로 재표집하여 통계량의 분포를 경험적으로 만드는 방법
import numpy as np
import scipy as sp
sp.stats.bootstrap(
[df_ship.speed], # 데이터
np.median, # 중간값
n_resamples=10000, # 10000번의 시뮬레이션
confidence_level=0.95, # 신뢰수준
)
- 결과는
ConfidenceInterval(low=하한, high=상한)형태로 출력 - 시뮬레이션이므로 실행할 때마다 결과가 조금씩 달라질 수 있음