앙상블·연습 문제

Out-of-Bag 인덱스

문제 설명PROBLEM

preview

Out-of-Bag (OOB) 인덱스

56번 Bootstrap 은 복원추출로 n 개를 뽑습니다. 큰 nn 에서 원본의 약 36.8% 는 한 번도 뽑히지 않음 — 이게 Out-of-Bag (OOB) 샘플:

P(i not drawn)=(11n)nne10.368P(i \text{ not drawn}) = \left(1 - \frac{1}{n}\right)^n \xrightarrow{n \to \infty} e^{-1} \approx 0.368

왜 유용한가

  • Bagging/Random Forest 에서, 샘플 ii 가 OOB인 모델들의 예측만 모아서 ii 를 평가 → 공짜 validation set.
  • n 개 모델이 있으면 평균 n × 0.368 ≈ 0.37n 개 모델이 각 ii 에 대해 OOB.
  • cross-validation 없이도 일반화 성능 추정 가능.

과제

함수 oob_indices(n, seed) 를 완성하세요.

  1. 내부적으로 bootstrap indices 하나 생성 (default_rng(seed).integers(0, n, size=n)).
  2. 원본 인덱스 [0, n) 중 bootstrap 에 안 들어간 것들 정렬된 배열로 반환.
  • 반환: np.ndarray[int] (1D), 정렬됨. 비어 있을 수 있음 (작은 n).
  • 힌트: np.setdiff1d(np.arange(n), boot).

테스트 케이스

#이름검증
11D 정수 배열
2OOB ⊂ [0, n)
3OOB + bootstrap 고유값 = [0, n)setdiff 관계
4n=1000 → OOB 비율 ≈ 0.368 ± 0.03
5시드 재현성
개념 노트와 실수 포인트

앙상블

  • 배깅(병렬, 분산↓, 랜덤포레스트) vs 부스팅(순차, 편향↓, 이전 오차 보정).
  • 스태킹은 모델 출력을 메타모델 입력으로.