StratifiedKFold를 사용하는 목적은 다음과 같습니다.
단순한 Train/Test split은 데이터 분할의 운(luck)에 따라 성능이 달라짐
교차검증은 여러 번 나누어 훈련/검증을 반복한 뒤 평균을 내서 보다 객관적이고 안정적인 모델 성능을 측정할 수 있음
Train/Test split은 Test 데이터가 고정되어 학습에 사용될 수 없음
교차검증은 모든 샘플이 한 번씩은 Validation으로 사용되므로 데이터를 최대한 효율적으로 활용할 수 있음
StratifiedKFold는 각 Fold에서도 y의 클래스 비율을 동일하게 유지
불균형 데이터에서 매우 중요
모델 평가가 클래스 편향에 영향을 덜 받음
객관적인 성능 측정 + 데이터 활용 극대화 + 클래스 불균형 대응
코드에서 생성된 scores 리스트는 각 Fold에서 계산된 성능 지표(Accuracy)입니다.
예:
scores = [0.88, 0.91, 0.90]
1번째 Fold Accuracy = 0.88
2번째 Fold Accuracy = 0.91
3번째 Fold Accuracy = 0.90
각 값은 다음 식으로 계산됩니다.
Accuracy = (Validation에서 맞게 예측한 샘플 수) / (Validation 전체 샘플 수)
예시
Accuracy = 270 / 300 = 0.90
→ 이 값이 Fold별 score로 저장됨
Fold별 점수는 모델의 안정성(variance)을 평가하는 데 중요합니다.
[0.88, 0.89, 0.87]
[0.75, 0.92, 0.65]
따라서 실무에서는 평균 점수 + 분산(표준편차) 둘 다 확인하는 것이 필수.
CV 점수들의 단순 평균으로, “이 모델이 데이터 전체에서 예상할 수 있는 평균적인 성능”을 의미합니다.
CV Mean = (Fold1 + Fold2 + Fold3) / 3
실무에서는 이 값을
모델 성능 보고
모델 비교
하이퍼파라미터 선택
에 사용하는 대표 성능지표로 활용합니다.
CV 표준편차는 교차검증 Fold별 성능의 변동성(안정성)을 나타내는 지표입니다.
즉, 모델이 데이터 분할에 따라 성능이 얼마나 달라지는지를 보여줍니다.
Fold 간 성능 차이가 거의 없음
모델이 매우 일관적으로 동작
데이터 분포 변화에 영향을 거의 받지 않음
재현성이 높은 안정적 모델
실무에서 흔히 나타나는 정상 범위
일부 데이터 변동에 따라 성능 차이가 발생하지만 문제 없는 수준
비교적 안정적인 모델로 판단 가능
데이터 분할에 따라 성능 변동이 뚜렷하게 발생
다음과 같은 원인 가능성 존재
데이터 샘플 부족
모델 복잡도 과도 → 과적합 가능
Fold별 데이터 분포 차이
특정 클래스가 일부 Fold에 몰림
평균 성능만 보고 판단하기에는 위험할 수 있음
모델이 매우 불안정
운영 환경에서 성능이 크게 요동칠 가능성이 높음
주로 다음과 같은 문제와 관련
심한 클래스 불균형
데이터 크기 부족
과적합
데이터 누수 가능성
Fold 분할이 원본 분포를 반영하지 못함
StratifiedKFold를 사용해 클래스 비율을 균일하게 유지했는지
모델이 과하게 복잡하지 않은지 (과적합 여부)
데이터 크기가 충분한지
특정 그룹, 기간, 고객군이 특정 Fold에 몰리지는 않았는지
전처리 과정에서 데이터 누수(leakage)가 발생하지 않았는지
예시 출력:
CV Scores: [0.88, 0.91, 0.90]
Mean: 0.896
Std: 0.012
평균 0.896 → 모델의 기대 성능은 약 0.90
표준편차 0.012 → 매우 안정적
데이터 분할 영향을 거의 받지 않는 모델로 판단 가능
교차검증 결과를 해석할 때는 평균 성능(CV Mean)만으로 판단하면 안 되고, 반드시 표준편차(CV Std)를 함께 고려해야 합니다.
평균 높고 표준편차 낮음 → 이상적인 모델
평균 높고 표준편차 높음 → 성능은 좋지만 안정성 부족
평균 낮고 표준편차 낮음 → 성능 개선 필요
평균 낮고 표준편차 높음 → 성능도 낮고 불안정 → 모델 근본 개선 필요