더북(TheBook)
<Note> 부트스트래핑(Bootstrapping)[24]

부트스트래핑은 주어진 데이터로부터 복원 표본을 구하는 작업을 여러 번 반복해 원하는 값을 추정한다. 한 가지 예로 평균의 신뢰 구간을 구하는 경우를 생각해보자. 평균의 신뢰 구간은 평균이 속할 범위를 95% 신뢰도로 찾는 것이다. 부트스트래핑은 데이터로부터 표본을 복원 추출로 구하고 이들의 평균을 기록하는 일을 반복한다. 이렇게 구한 평균들을 나열한 뒤 가장 작은 값으로부터 2.5%, 가장 큰 값으로부터 97.5% 지점의 평균 두 개를 구한다. 그러면 두 평균 사이의 구간이 평균의 95% 신뢰 구간이 된다.

예를 들어, 다음과 같이 평균 30, 표준 편차 3인 정규 분포로부터 1,000개의 난수를 만들고 이 난수로부터 역으로 평균을 추정해보자.

  > x <- rnorm(1000, mean=30, sd=3)
  > t.test(x)

      One Sample t-test

  data: x
  t = 314.3432, df = 999, p-value < 2.2e-16
  alternative hypothesis: true mean is not equal to 0
  95 percent confidence interval:
   29.78891 30.16317
  sample estimates:
  mean of x
   29.97604

t 검정 결과 평균의 신뢰 구간이 (29.78891, 30.16317)로 구해졌다. 이번에는 부트스트래핑으로 복원 추출을 통해 샘플을 구하고 평균을 구하는 작업을 10,000회 반복해보자.

  > library(foreach)
  > bootmean <- foreach(i=1:10000, .combine=c) %do% {
  +   return(mean(x[sample(1:NROW(x), replace=TRUE)]))
  + }

평균의 신뢰 구간은 이 평균들의 하위 2.5%, 상위 97.5%에 속하는 값의 구간이다.

  > bootmean <- sort(bootmean)
  > bootmean[c(10000*0.025, 10000*0.975)]
  [1] 29.78949 30.16196

보다시피 t 검정과 유사한 구간이 구해졌다.

부트스트래핑을 사용한 모델의 정확도 평가도 마찬가지로 수행된다. 데이터의 일부를 훈련 데이터로, 일부를 테스트 데이터로 복원 추출을 통해 구한다. 그리고 이를 수회 반복하여 정확도를 추정한다. 이것이 trainControl( )에서 method="boot"가 하는 일이다.

boot632는 boot와 같은 방법을 사용하되 검증 데이터에서 발견한 잘못된 예측 비율과 훈련 데이터에서 발견한 잘못된 예측 비율을 가중 평균하여 부트스트래핑이 가지는 편향성 문제[25]를 해결한다. 특히 가중치를 검증 데이터에서 발견한 오예측(misclassification)에 63.2%, 훈련 데이터에서 발견한 오예측에 26.8%로 부여하므로 boot632라는 이름을 사용하게 되었다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.