K-폴드 교차 검증이란?
K-폴드 교차 검증(K-Fold Cross Validation)은 데이터를 K개의 구간으로 나누고, 학습과 검증을 반복하여 모델의 성능을 평가하는 방법이다.
한 번만 학습·검증 데이터를 나누는 방식보다 데이터 분할에 따른 우연을 줄이고, 모델의 일반화 성능을 더 안정적으로 확인할 수 있다.
K-폴드 진행 방식
데이터를 5개 구간으로 나누는 5-Fold를 예로 들면 다음과 같다.
1회차: 1번 검증 / 나머지 학습
2회차: 2번 검증 / 나머지 학습
3회차: 3번 검증 / 나머지 학습
4회차: 4번 검증 / 나머지 학습
5회차: 5번 검증 / 나머지 학습
각 구간이 한 번씩 검증 데이터로 사용되며, 마지막에는 5번의 평가 점수를 평균 내어 최종 성능으로 사용한다.
장점
- 모든 데이터를 학습과 검증에 활용할 수 있음
- 데이터 분할에 따른 성능 편차를 줄일 수 있음
- 모델 간 성능 비교와 하이퍼파라미터 튜닝에 유용함
단점
- 모델을 K번 반복 학습하므로 시간이 오래 걸림
- K값이 커질수록 계산량이 증가함
- 시계열 데이터에는 일반 K-Fold를 그대로 사용하기 어려움
분류 문제에서는 Stratified K-Fold
분류 데이터의 클래스 비율이 불균형하다면 일반 K-Fold보다 Stratified K-Fold를 사용하는 것이 좋다.
Stratified K-Fold는 각 폴드에서 타깃 클래스의 비율이 원본 데이터와 비슷하게 유지되도록 분할한다.
예를 들어 전체 데이터의 결제 고객 비율이 10%라면, 각 폴드에서도 결제 고객 비율이 약 10%가 되도록 나눈다.
파이썬 예시
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(
random_state=42
)
scores = cross_val_score(
model,
X,
y,
cv=5,
scoring="f1"
)
print("각 폴드 점수:", scores)
print("평균 점수:", scores.mean())
K값 선택 시 고려사항
K값은 일반적으로 5 또는 10을 많이 사용한다.
| K가 작음 | 학습 데이터가 줄어 평가 편향이 커질 수 있지만 계산 속도가 빠름 |
| K가 큼 | 더 많은 데이터를 학습에 사용해 안정적인 평가가 가능하지만 계산량이 증가함 |
데이터가 충분히 많다면 보통 K=5를 사용하고, 데이터가 비교적 적고 더 안정적인 평가가 필요하다면 K=10을 고려할 수 있다.
다만 K가 너무 크면 각 폴드의 검증 데이터가 지나치게 적어지고 학습 시간이 길어질 수 있다. 특히 데이터 수만큼 폴드를 나누는 Leave-One-Out 방식은 계산 비용이 매우 크고 평가 결과의 변동성도 커질 수 있다.
분류 문제에서는 K값뿐 아니라 각 폴드에 모든 클래스가 충분히 포함되는지도 확인해야 한다. 예를 들어 소수 클래스 데이터가 5개뿐이라면 K=10은 사용할 수 없으며, K는 소수 클래스의 데이터 수보다 크지 않게 설정해야 한다.
주의할 점
교차 검증 과정에서도 결측치 대체, 스케일링, 인코딩 같은 전처리는 각 학습 폴드에서만 학습해야 한다.
전체 데이터를 먼저 전처리하면 검증 데이터의 정보가 학습 과정에 포함되는 데이터 누수가 발생할 수 있다.
이 문제를 방지하려면 Scikit-learn의 Pipeline을 사용하는 것이 좋다.
정리
K-폴드 교차 검증은 데이터를 K개로 나누어 학습과 검증을 반복하고, 여러 평가 점수의 평균으로 모델 성능을 판단하는 방법이다.
일반적인 분류 문제에서는 클래스 비율을 유지하는 Stratified K-Fold를 자주 사용한다.
'Data Analysis > 머신러닝' 카테고리의 다른 글
| 부스팅 (0) | 2026.07.31 |
|---|---|
| 결정트리 (0) | 2026.07.31 |
| 편향과 분산 (0) | 2026.07.31 |
| 손실함수 (0) | 2026.07.31 |
| 지도학습과 비지도학습 (0) | 2026.07.31 |