목차
What is the OOB(Out of Bag) observations?
OOB(Out of Bag)는 Bagging(Bootstrap Aggregation)에서 등장하는 용어이다. 배깅에서 핵심은 bootstrap 표본을 만들어 트리를 반복 적합하는 것이다. 각각의 배깅된 트리는 평균적으로 관측치들의 2/3를 사용한다. 배깅된 트리를 적합하는데 사용되지 않은 나머지 1/3의 관측치들을 OOB(Out of Bag) 관측치라고 한다. 이것은 bootstrap 표본을 만들 때 복원추출을 하기 때문에 나타나는 현상이다. 이러한 성질 때문에 배깅이나 랜덤포레스트에서는 OOB 관측치를 test set처럼 사용할 수 있다.
Why OOB observations are around one-third of original observations?
그렇다면 왜 관측치들의 2/3만 사용되는 것일까? 원래 표본의 j번째 관측치가 bootstrap 표본에 포함되지 않을 확률을 생각해보면 된다.
먼저 첫 번째 bootstrap 관측치가 원래 표본의 j번째 관측치가 아닐 확률을 생각해보자. n개의 표본이 모두 동일한 확률로 추출될 수 있기 때문에 이 확률은
\[\frac{n-1}{n}=1-\frac{1}{n}\]
가 된다.
두 번째 boostrap 관측치가 원래 표본의 j번째 관측치가 아닐 확률을 생각해보자. 이 확률 역시
\[1-\frac{1}{n}\]
이다.
이제 원래 표본의 j번째 관측치가 bootstrap 표본에 포함되지 않을 확률을 구할 수 있고, 이 확률은
\[(1-\frac{1}{n})^n\]
이다.
따라서 n이 무한대로 가면 이 확률은
\[\underset{n \leftarrow \infty}{lim}(1-\frac{1}{n})^n=e^{-1} \approx \frac{1}{3}\]
약 1/3이 된다. 따라서 하나의 bootstrap 표본에서 평균적으로 약 2/3의 원래 표본의 관측치가 사용된다고 볼 수 있다.
1~10000까지의 각 정수 n에 대해 j번째 관측치가 bootstrap 표본에 있을 확률을 그래프로 나타내보면 아래와 같다.
probs <- c()
for (k in 1:10000){
probs[k] <- 1-(1-1/k)^k
}
plot(1:10000, probs, type="l", ylim=c(0.5, 1))
abline(h=1-1/exp(1), col="red", lty="dotted")
Experiment
bootstrap 표본을 직접 뽑아서 이것이 맞는지 경험적으로 확인해보자.
n=100인 bootstrap 표본을 반복적으로 생성하여 원래 표본의 3번째 관측치가 bootstrap 표본에 포함되는지를 기록한 후, 그 평균이 약 2/3가 되는지를 확인하면 된다.
bootsample <- c()
for (j in 1:10000){
bootsample[j] <- sum(sample(1:100, replace=T)==3) > 0
}
mean(bootsample)
## [1] 0.631
1-1/exp(1)
## [1] 0.6321206
2/3
## [1] 0.6666667
Reference
Gareth James , Daniela Witten, Trevor Hastie, Robert Tibshirani(2013). Introduction to Statistiacal Learning. Springer.