logo

부트스트래핑

부트스트래핑이 필요한 이유

  • 평균과 달리 중간값, 최빈값 등의 통계량은 오차범위를 이론적으로 유도하기 어려운 경우가 있음
  • 표본이 충분히 크고 모집단을 어느 정도 대표한다면 부트스트래핑(Bootstrapping)으로 통계량의 신뢰구간을 추정할 수 있음
  • 부트스트래핑은 현재 표본에서 새로운 표본을 반복적으로 재표집하여 통계량의 분포를 경험적으로 만드는 시뮬레이션 기법

부트스트랩 재표집의 원리

  • 크기가 인 원래 표본에서 같은 크기 의 부트스트랩 표본을 복원추출함
  • 복원추출이므로 하나의 관측값이 여러 번 뽑히거나 한 번도 뽑히지 않을 수 있음
  • 각 부트스트랩 표본에서 관심 통계량을 계산함
  • 이 과정을 여러 번 반복해 부트스트랩 통계량의 분포를 만듦
  • 이 분포를 이용해 표준오차나 신뢰구간을 추정함

부트스트래핑의 전제와 한계

  • 원래 표본이 모집단을 어느 정도 대표해야 재표집 과정도 모집단 표집 과정을 비슷하게 흉내 낼 수 있음
  • 편향된 표본에서 반복해서 재표집해도 원래 표본의 편향이 자동으로 사라지지는 않음
  • n_resamples를 늘리면 시뮬레이션 결과는 더 안정적이 되지만 원래 표본의 관측값이 늘어나는 것은 아님
  • 반복 횟수가 늘어날수록 계산 시간도 증가함

중간값의 95% 신뢰구간 계산

실습 파일을 불러옵니다.

import pandas as pd

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

scipy.stats.bootstrap으로 속도 중간값의 신뢰구간을 계산합니다.

import numpy as np
import scipy as sp

np.random.seed(1234)  # 재현성 있는 결과를 위해 시드 설정

result = sp.stats.bootstrap(
    [df_ship.speed],          # 재표집할 데이터
    np.median,                # 각 표본에서 계산할 통계량
    n_resamples=10000,        # 재표집 반복 횟수
    confidence_level=0.95,    # 신뢰수준
)

result.confidence_interval
  • 결과는 ConfidenceInterval(low=하한, high=상한) 형태로 출력
  • 시드를 설정하지 않으면 무작위 재표집 때문에 실행할 때마다 결과가 조금씩 달라질 수 있음
  • 같은 데이터에서 신뢰수준을 높이면 일반적으로 부트스트랩 신뢰구간도 넓어짐
Previous
신뢰구간