AI&ML

모델 평가 방법(Cross Validation + Bootstrap)

Jin_Omics 2025. 4. 9. 16:30

어떤 모델을 만들면, 

데이터를 넣어서 학습을 하고, 그 성능을 평가를 해야 한다.

하지만 이 학습과 평가 과정을 단 한번 수행한다면,

그 결과가 운인이 실력인지 알기 어렵다.

그래서 우리는 평가를 여러 번 반복하는 전략을 쓴다.

 

Cross ValidationBootstrap 방식이 대표적이다.

 

Cross Validation은 모델이 새로운 데이터라 얼마나 잘 작동하는지를 확인하는 성능 일반화를 확인하는데 초점이 있,

Bootstrap은 불확실성 평가와 신뢰구간 추정에 초점이 있다.

 

따라서,

Cross Validation은 여러개의 학습/검증 셋을 나눠 모델 일반화의 성능을 평가하고,

Bootstrap은 여러 개의 무작위 샘플을 (중복 허용) 생성하여 신뢰 구간을 추정한다.

모델 평가 방법
├── Cross Validation (CV)
│   ├── ✂️ K-Fold
│   │   ├── ✂️ Stratified K-Fold           ← 분류 문제에서 클래스 비율 유지가 필요할 때
│   │   └── ✂️ Repeated Stratified K-Fold  ← 성능 안정성을 위해 여러 번 반복할 때
│   ├── ✂️ Group K-Fold                    ← 같은 그룹(예: 환자/사용자)이 나눠지면 안 될 때
│   ├── ✂️ Leave-One-Out (LOOCV)           ← 데이터 수가 매우 적고, 최대한 많이 학습에 활용해야 할 때
│   └── ✂️ TimeSeriesSplit                 ← 시간 순서가 중요한 시계열 데이터를 다룰 때
│
└── Bootstrap
    └── (중복 샘플링으로 신뢰 구간 추정 및 불확실성 평가에 사용)

 

특히, K-Fold strategy를 중점적으로 그 개념에 대해 알아보고 이해해보자.


📌 K-Fold

Image created with AI · Curated by JINetic CODE

  • 데이터를 K개로 나눠서, 각 Fold를 한 번씩 검증용으로 사용
  • 가장 기본적인 교차 검증 방법
  • 📌 여러 조각으로 나눠가며 공평하게 검증하는 느낌
  • 적당한 데이터 크기일반적인 ML 문제에 적합

📌 Stratified K-Fold

reference: https://www.researchgate.net/figure/Graphical-representation-of-modified-stratified-k-fold-cross-validation-The-number-of_fig7_351865104

  • 분류 문제에서 클래스가 불균형할 경우
  • 각 Fold에서 클래스 비율을 유지하도록 분할
  • “각 조각에도 비율을 맞춰 나눠야 맛이 유지됨 (예: 김밥 속 재료 균형)”
  • 📌 의료, 금융처럼 극단적 클래스 불균형이 있을 때 유리
  • 예) 암 환자: 일반환자 비율이 1:9 일 때, 각 fold마다 이 비율을 유지

📌 Repeated Stratified K-Fold

reference: https://amueller.github.io/aml/04-model-evaluation/1-data-splitting-strategies.html

  • Repeated Stratified K-Fold = Stratified K-Fold × 여러 번 (반복)
  • “한 번만 나눠보면 운일 수도 있으니, 여러 번 테스트해보자”
  • 📌 모델의 안정성(variance)을 확인하고 싶을 때

📌 Group K-Fold

reference: https://amueller.github.io/aml/04-model-evaluation/1-data-splitting-strategies.html

  • 그룹 단위 정보가 있을 때 (예: 환자, 사용자, 실험 단위)
  • 한 그룹이 train/valid에 동시에 들어가면 안 되는 상황
  • “한 가족의 데이터를 나눠서 비교하면 안 되니까 한쪽에 몰아야 해요”
  • 📌 반복 측정 데이터, 사용자 행동 로그 등
  • 예) 한 명의 환자가 여러 번 진료받은 기록이 있다면, 그 사람의 데이터는 반드시 한 fold에 존재해야 함.

📌 LOOCV (Leave-One-Out)

reference: https://www.researchgate.net/figure/Schematic-representation-of-the-leave-one-out-cross-validation-LOOCV-method_fig1_344613547

  • 전체 데이터가 N개라면 → N개의 Fold로 나눔
  • 매번 한 개만 검증용으로 빼고 나머지로 학습
  • “하나씩 꼼꼼히 검증하고 싶을 때, 대신 계산량은 어마어마
  • 📌 데이터가 아주 작을 때만 사용

📌 TimeSeriesSplit

reference; https://amueller.github.io/aml/04-model-evaluation/1-data-splitting-strategies.html

  • 시간 순서가 중요한 데이터 (예: 주가, 환자 생체 신호)
  • 과거 데이터를 학습에, 미래 데이터를 검증에 사용
  • “미래를 예측하는데 과거 말고 미래를 미리 보면 반칙”
  • 📌 시계열, 예측 모델, 알림 시스템 등에서 필수

 


📌 Bootstrap

reference: https://bradleyboehmke.github.io/uc-bana-4080/lesson-3b-resampling.html

  • 전체 데이터에서 중복 허용으로 뽑아 훈련 데이터 생성
  • 안 뽑힌 데이터로 성능 평가
  • 데이터가 적거나, 모델의 결과가 얼마나 흔들리는지(불확실성)를 알고 싶을 때
  • 이걸 수백 번 반복해서 성능 분포 확인
  • “무작위로 다시 뽑아서 통계를 여러 번 내는 방식”
  • 📌 신뢰 구간 추정, 모델 불확실성 평가

“어떤 평가 방법을 언제 써야 할까?” 

방법 추천 상황 장점 단점
K-Fold 일반 ML 문제 널리 쓰임 다소 느림
Stratified K-Fold 분류 + 불균형 클래스 클래스 비율 유지 -
Group K-Fold 반복 데이터 (환자, 사용자) 그룹 혼동 방지 Fold 수 제한 가능
LOOCV 데이터 매우 적을 때 최대한 학습 활용 계산량 큼
TimeSeriesSplit 시계열 데이터 시간 순서 반영 일반 모델에 부적합
Bootstrap 신뢰 구간 확인 불확실성 추정 가능 약간 랜덤성 포함

 

 

Image created with AI · Curated by JINetic CODE


'참... 쉽죠?'

'AI&ML' 카테고리의 다른 글

Foundation Model  (0) 2025.03.31