개념
- 교차검증(Cross-validation)은 주어진 데이터셋을 여러 개의 "접힘(fold)"로 나눠, 각 접힘을 검증 세트로 순차적 사용하여 모델을 학습, 평가해 일반화 성능을 추정하는 방법입니다.
- 데이터가 한 번만 학습,평가에 사용될 때보다 안정적인 성능 추정이 가능합니다.
수학적 기초
- 실제 위험(Generalization Error)
- R(f) = E(x,y)~p[L(f(X), Y)]
L : 손실함수(제곱오차, 로그손실)입니다.
- R(f) = E(x,y)~p[L(f(X), Y)]
- K-Fold 교차검증 추정치
- R^CV=K1k=1∑K∣Dk∣1(xi,yi)∈Dk∑L(f(−k)(xi),yi)
Dk: k번째 fold의 검증 데이터
f^(-k): Dk를 제외한 데이터로 학습한 모델
- R^CV=K1k=1∑K∣Dk∣1(xi,yi)∈Dk∑L(f(−k)(xi),yi)
주요 기법 및 적용 상황
기법 | 특징 | 사용 예시 |
KFold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html?utm_source=chatgpt.com |
데이터를 균등한 크기의 K개로 분할하여 순차 평가 | 범주형 불균형이 크지 않은 일반 회귀, 분류 |
StratifiedKFold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedGroupKFold.html?utm_source=chatgpt.com |
각 fold가 클래스 비율을 유지 | 이진, 다중 분류에서 클래스 불균형 |
GroupKFold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GroupKFold.html?utm_source=chatgpt.com |
같은 그룹(label, 고객ID 등)이 훈련/검증에 중복되지 않도록 분할 | 고객,환자 등 그룹별 종속성이 있을 때 |
TimeSeriesSplit https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html?utm_source=chatgpt.com |
과거 -> 미래 순서 보존, 훈련 세트가 점점 커지는 시계열 전용 | 주가, 수요예측 등 시계열 예측 |
Purged K-Fold / CPCV https://stats.stackexchange.com/questions/443159/what-is-combinatorial-purged-cross-validation-for-time-series-data?utm_source=chatgpt.com |
검증 구간과 겹치는 라벨 또는 특징을 제거(purge)하고 embargo 기간을 두어 누수 방지 | 금융 시계열, 이벤트 중심 데이터 ("진짜 미래" 평가 보장) |
반응형