본문 바로가기
데이터 노트 (Data Note)/통계학

[통계학] 8. 부트스트랩 신뢰 구간(Bootstrap Confidence Interval)이란?

by 맨 앞자리 학생 2019. 11. 25.

저번 포스트에서는 신뢰구간 (참고 : 신뢰구간(Confidence Interval)이란?)을 구할 때 우리는 데이터가 특정 분포를 따른다는 가정하에 진행했었죠. 근데 우리가 그 분포를 가정할 수 없다면 어떻게 해야 할까요? 부트스트랩은 확률 분포의 가정을 두지 않고 주어진 데이터를 원래의 모집단을 대표하는 독립 표본으로 가정하고 진행합니다. 그리고 데이터를 기반으로 중복을 허용한 무작위 재추출로 복수의 자료를 작성하고 각각에서 얻어진 통계량을 계산합니다. 

 

쉽게 말하면 우리가 가진 데이터를 우리가 알지 못하는 A라는 분포에서 추출되었다고 가정하고 그 안에서 무작위로 재추출하여 통계량을 측정하는 과정을 여러 번 반복합니다. 그리고 그 과정들에서 산출된 통계량들을 통해 통계적 추론을 하죠. 

 

부트스트랩은 여러 맥락에서 사용되는데 주로 통계량의 신뢰성을 평가하는데 용이합니다. 이번 포스트에서는 여러 응용법 중 하나인 부트스트랩 신뢰구간 (Bootstrap Confidence Interval)에 대해서 알아보겠습니다.

 

표집과 재추출 (Sampling and Resampling)

표집(Sampling)이란 모집단을 대표하는 표본을 추출하는 것입니다. 우리가 가진 데이터는 표집의 과정을 통해 얻어진 표본이죠. 모집단에 대한 특성을 알고 싶은데 전수조사를 하기에는 시간, 노력, 비용 등이 많이 들기 때문에 현실적으로 모두 조사하는 것은 어렵습니다. 따라서 모집단으로부터 일정 크기의 표본을 뽑아서 이들을 통하여 모집단의 특성을 추정하죠.

 

표집에는 크게 두 가지 방법이 있습니다. 

1. 표집된 표본은 제외된 상태에서 진행하는 비 복원 표집 (Sampling without replacement)

2. 표집 된 표본도 포함하여 표집을 진행하는 복원 표집 (Sampling with replacement)

 

예를 들어 우리나라 7세 아이들의 평균 키를 알아보고 싶을 때 A라는 아이의 키가 표집 과정에서 추출되었을 때 비 복원 표집은 A라는 아이를 다음번 표집에서 제외하고 표집을 진행하는 반면 복원 표집에서는 A라는 아이를 고려한 상태에서 표집을 진행합니다.

 

맥락에 따라 어떤 표집방법을 선택할지는 연구자의 선택이지만 통상적으로 큰 샘플 풀에서 작은 크기의 표본을 표집할 때는 두 방법의 차이는 미미합니다. 예를 들어 미국인 3억 명 중 500명의 표본을 출하 고자 할 때와 같은 상황을 생각해보면 같은 사람이 표본 500명 안에 두 번 들어갈 가능성은 극히 드물기 때문이죠. 

 

재추 출(Resampling)은 주어진 데이터 내에서 복원 표집을 하는 것입니다. 재추출 표본의 크기는 주어진 표본의 크기와 같습니다 (우리가 측정하고자 하는 통계량이 표본 크기에 영향을 받기 때문!). 우리가 공부할 부트스트랩은 재추출을 이용한 기법이죠. 

 

부트스트랩 (Bootstrap)

부트스트랩의 셋업(setup)은 다음과 같습니다 (여기서 *은 기존의 표본과 재 추출된 표본을 구분하기 위해서 쓰입니다).

1. $x_1, x_2, ..., x_n$은 미지의 A라는 분포에서 표집 된 데이터이다.

2. $u$는 위 표본에서 측정된 통계량(평균, 분산, 중앙값, etc)이다.

3. $A^*$은 추출된 표본에서 도출한 분포이다.

4. $x^*_1, x^*_2, ..., x^*_n$은 위 표본을 재 추출한 새로운 표본이다.

5. $u^*$은 재추출된 표본의 통계량이다.

 

부트스트랩을 통해 이론적으로는 다음과 같은 원리를 알 수 있습니다.

1. $A^* \sim A$ : 재 추출된 표본의 분포 $A^*$는 A라는 분포와 유사하다.

2. $u$의 변동폭은 $u^*$의 변동폭과 꽤 유사하게 측정될 수 있다.

 

부트스트랩 기법은 큰 수의 법칙 (참고 : 위키피디아)에 기반을 두고 있습니다. 여기서 간단히 설명하자면 표본의 크기가 충분히 크다면 표본의 분포는 모집단의 분포에 대한 좋은 근사치라는 것입니다. 하지만 우리가 한 가지 알아야 할 것은 부트스트랩은 더 정확한 점 추정 값을 구하는데 도움이 되지 않습니다. 점 추정 값 또한 표집된 표본 대한 통계량이기 때문이죠. 위에서 언급되었다시피 우리는 점 추정 값의 변동폭에 대한 정보만 얻을 수 있습니다.  

 

부트스트랩 신뢰구간 (Bootstrap Confidence Interval)

지난 시간 다루었던 서울대학교 학생들의 평균 IQ 예제로 부트스트랩 신뢰구간을 구해보겠습니다. 많은 반복 작업이 있기 때문에 R을 이용하여 구현해보았습니다. 아래 코드는 R코드로 바로 옮겨서 실행이 가능합니다.

 

# 시뮬레이션을 위해 서울대학교 학생들의 IQ가 N(115, 15) 분포를 따른다고 가정.
true_data <- rnorm(1200, 115, 15) # 재학생이 1200명 정도

sample_data <- sample(true_data, 30, replace = TRUE) # 표본크기 30의 샘플

repeat <- 50000 # 부트스트랩 반복횟수
n <- length(sample_data) # 샘플 크기

# 표본 크기가 30인 표본 50,000번 재추출.
resamples <- matrix(sample(sample_data, n*repeat, replace = TRUE)) # replace = TRUE는 복원표집

means <- apply(resamples, 1, mean) # 각 샘플별로 평균을 냄

quantile(means, c(0.025, 0.975)) # 가운데 95% 값
#     2.5%     97.5% 
# 92.45981 134.04152 

 

서울대학교 학생들의 IQ의 분포에 대한 별도의 가정 없이도 $\left [92.46, 134.04\right]$의 95% 신뢰구간을 구할 수 있었습니다. 

 


이번 포스트에서는 부트스트랩 기법의 기본적인 원리와 그를 이용한 신뢰구간을 구하는 방법을 공부해보았습니다. 부트스트랩 기법은 어떤 통계적 추론을 위해 수학공식을 필요로 하지 않는다는 장점이 있습니다. 이러한 장점 덕분에 간단하게는 신뢰구간 계산부터 머신러닝까지 다양하게 응용되고 있으므로 기본적인 이해를 갖는 것이 좋겠습니다.

댓글