어떤 모델을 만들면,
데이터를 넣어서 학습을 하고, 그 성능을 평가를 해야 한다.
하지만 이 학습과 평가 과정을 단 한번 수행한다면,
그 결과가 운인이 실력인지 알기 어렵다.
그래서 우리는 평가를 여러 번 반복하는 전략을 쓴다.
Cross Validation과 Bootstrap 방식이 대표적이다.
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
- 데이터를 K개로 나눠서, 각 Fold를 한 번씩 검증용으로 사용
- 가장 기본적인 교차 검증 방법
- 📌 여러 조각으로 나눠가며 공평하게 검증하는 느낌
- 적당한 데이터 크기와 일반적인 ML 문제에 적합
📌 Stratified K-Fold
- 분류 문제에서 클래스가 불균형할 경우
- 각 Fold에서 클래스 비율을 유지하도록 분할
- “각 조각에도 비율을 맞춰 나눠야 맛이 유지됨 (예: 김밥 속 재료 균형)”
- 📌 의료, 금융처럼 극단적 클래스 불균형이 있을 때 유리
- 예) 암 환자: 일반환자 비율이 1:9 일 때, 각 fold마다 이 비율을 유지
📌 Repeated Stratified K-Fold
- Repeated Stratified K-Fold = Stratified K-Fold × 여러 번 (반복)
- “한 번만 나눠보면 운일 수도 있으니, 여러 번 테스트해보자”
- 📌 모델의 안정성(variance)을 확인하고 싶을 때
📌 Group K-Fold
- 그룹 단위 정보가 있을 때 (예: 환자, 사용자, 실험 단위)
- 한 그룹이 train/valid에 동시에 들어가면 안 되는 상황
- “한 가족의 데이터를 나눠서 비교하면 안 되니까 한쪽에 몰아야 해요”
- 📌 반복 측정 데이터, 사용자 행동 로그 등
- 예) 한 명의 환자가 여러 번 진료받은 기록이 있다면, 그 사람의 데이터는 반드시 한 fold에 존재해야 함.
📌 LOOCV (Leave-One-Out)
- 전체 데이터가 N개라면 → N개의 Fold로 나눔
- 매번 한 개만 검증용으로 빼고 나머지로 학습
- “하나씩 꼼꼼히 검증하고 싶을 때, 대신 계산량은 어마어마”
- 📌 데이터가 아주 작을 때만 사용
📌 TimeSeriesSplit
- 시간 순서가 중요한 데이터 (예: 주가, 환자 생체 신호)
- 과거 데이터를 학습에, 미래 데이터를 검증에 사용
- “미래를 예측하는데 과거 말고 미래를 미리 보면 반칙”
- 📌 시계열, 예측 모델, 알림 시스템 등에서 필수
📌 Bootstrap
- 전체 데이터에서 중복 허용으로 뽑아 훈련 데이터 생성
- 안 뽑힌 데이터로 성능 평가
- 데이터가 적거나, 모델의 결과가 얼마나 흔들리는지(불확실성)를 알고 싶을 때
- 이걸 수백 번 반복해서 성능 분포 확인
- “무작위로 다시 뽑아서 통계를 여러 번 내는 방식”
- 📌 신뢰 구간 추정, 모델 불확실성 평가
“어떤 평가 방법을 언제 써야 할까?”
방법 | 추천 상황 | 장점 | 단점 |
K-Fold | 일반 ML 문제 | 널리 쓰임 | 다소 느림 |
Stratified K-Fold | 분류 + 불균형 클래스 | 클래스 비율 유지 | - |
Group K-Fold | 반복 데이터 (환자, 사용자) | 그룹 혼동 방지 | Fold 수 제한 가능 |
LOOCV | 데이터 매우 적을 때 | 최대한 학습 활용 | 계산량 큼 |
TimeSeriesSplit | 시계열 데이터 | 시간 순서 반영 | 일반 모델에 부적합 |
Bootstrap | 신뢰 구간 확인 | 불확실성 추정 가능 | 약간 랜덤성 포함 |
'참... 쉽죠?'
'AI&ML' 카테고리의 다른 글
Foundation Model (0) | 2025.03.31 |
---|