logo

신뢰구간

신뢰구간

  • 신뢰구간(confidence interval)은 대표적인 구간 추정 방법
  • 하나의 점 추정값만 제시하지 않고, 모수가 포함될 것으로 기대되는 범위를 제시함
  • 기본 형태
    • 신뢰구간 = 통계량 ± 오차범위
  • 신뢰수준, 표본의 크기, 데이터의 변산성 등을 고려하여 오차범위를 이론적으로 유도해 사용

오차 범위

  • 오차 범위(margin of error)는 표집 오차가 발생하는 범위
  • 6면체 주사위의 경우 표집오차는 아무리 커도 를 넘을 수 없음
  • 오차범위에 영향을 주는 요소
    • 신뢰수준: 얼마나 극단적인 경우까지 포함할 것인가
    • 표본의 크기: 표본에 얼마나 많은 사례를 포함할 것인가
    • 모집단의 변산성: 모집단의 변산성이 얼마나 큰가

신뢰수준

  • 신뢰수준(confidence level)은 오차범위에 고려하는 비율
  • 극단적인 경우까지 포함하면 오차범위는 커짐
    • 예: 6면체 주사위를 굴렸을 때 모두 1이나 모두 6이 나오면 표집 오차가 최대
  • 극단적인 경우를 배제하면 오차범위를 줄일 수 있음
  • 유의수준(significance level)
    • 배제하는 극단적인 경우의 비율
    • 예: 유의수준 5% = 5%의 극단적인 경우는 배제함
  • 신뢰수준 = 100% - 유의수준
  • 신뢰수준과 오차범위
    • 높은 신뢰수준 → 더 많은 가능성 → 넓은 오차범위
    • 낮은 신뢰수준 → 더 적은 가능성 → 좁은 오차범위
  • "신뢰"라는 말 때문에 헷갈리기 쉬우므로 주의

신뢰수준 95%와 99%의 오차범위 비교

신뢰 수준 100%면 안되는 이유

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

신뢰 수준 100%의 한계 예시

신뢰 수준의 결정

  • 신뢰수준은 적절한 수준에서 타협이 필요
  • 신뢰수준이 지나치게 높으면 가능성이 희박한 극단적 경우를 너무 많이 고려하여 의사결정이 어려워짐
  • 신뢰수준이 지나치게 낮으면 너무 많은 경우를 배제하여 의사결정의 타당성이 떨어짐
  • 교과서적으로는 95%, 99% 등을 추천하지만 절대적 기준은 아님

데이터의 변산성

  • 데이터의 변산성이 크면 오차범위가 커짐
  • 20면체 주사위를 굴리고 7을 빼면 기대값은 6면체 주사위와 똑같이 3.5
  • 하지만 20면체 주사위는 가능한 값의 범위가 더 넓기 때문에 오차범위가 훨씬 큼
  • 6면체 주사위를 10개 굴려서 모두 1이 나올 가능성은 매우 희박함
  • 20면체 주사위를 10개 굴려서 모두 8 이하가 나올 가능성은 그보다 훨씬 큼
  • 실험과 측정을 정확히 해서 변산성을 낮추면 오차범위가 작아짐
  • 데이터에 내재한 변산성은 없앨 수 없음

20면체 주사위 예시

표본의 크기

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

주사위 50개 굴리기 예시

주사위 10개 굴리기 예시

실습 준비

패키지를 설치합니다.

pip install pandas seaborn matplotlib pingouin statsmodels openpyxl

실습 파일을 불러옵니다.

import pandas as pd

df_ship = pd.read_excel("ship.xlsx")

평균의 신뢰구간

  • 모든 통계량에는 신뢰구간이 존재
  • 평균의 경우에는 이론적으로 신뢰구간을 비교적 간단히 구할 수 있음
  • pingouinttest 결과에서 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=상한) 형태로 출력
  • 시뮬레이션이므로 실행할 때마다 결과가 조금씩 달라질 수 있음
Previous
표집 오차