부트스트래핑
부트스트래핑이 필요한 이유
- 평균과 달리 중간값, 최빈값 등의 통계량은 오차범위를 이론적으로 유도하기 어려운 경우가 있음
- 표본이 충분히 크고 모집단을 어느 정도 대표한다면 부트스트래핑(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=상한)형태로 출력 - 시드를 설정하지 않으면 무작위 재표집 때문에 실행할 때마다 결과가 조금씩 달라질 수 있음
- 같은 데이터에서 신뢰수준을 높이면 일반적으로 부트스트랩 신뢰구간도 넓어짐