StratifiedKFold 교차검증의 목적과 CV Scores 의미

calico·2025년 11월 25일

Artificial Intelligence

목록 보기
117/177

https://modern-manual.tistory.com/entry/K-Fold-Cross-Validation-%EA%B5%90%EC%B0%A8%EA%B2%80%EC%A6%9D-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

1. 교차검증(StratifiedKFold)의 목적


StratifiedKFold를 사용하는 목적은 다음과 같습니다.


1) 모델 성능을 더 정확하고 안정적으로 추정하기 위해


  • 단순한 Train/Test split은 데이터 분할의 운(luck)에 따라 성능이 달라짐

  • 교차검증은 여러 번 나누어 훈련/검증을 반복한 뒤 평균을 내서 보다 객관적이고 안정적인 모델 성능을 측정할 수 있음



2) 데이터 낭비를 줄이기 위해


  • Train/Test split은 Test 데이터가 고정되어 학습에 사용될 수 없음

  • 교차검증은 모든 샘플이 한 번씩은 Validation으로 사용되므로 데이터를 최대한 효율적으로 활용할 수 있음



3) 클래스 비율을 유지하기 위해 (Stratified 특징)


  • StratifiedKFold는 각 Fold에서도 y의 클래스 비율을 동일하게 유지

  • 불균형 데이터에서 매우 중요

    • 예: 0:90%, 1:10% 라면 각 Fold도 동일 비율
  • 모델 평가가 클래스 편향에 영향을 덜 받음

객관적인 성능 측정 + 데이터 활용 극대화 + 클래스 불균형 대응



2. CV Scores의 의미


코드에서 생성된 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 전체 샘플 수)

예시

  • Validation 샘플 300개 중 270개 맞힘
Accuracy = 270 / 300 = 0.90

→ 이 값이 Fold별 score로 저장됨



3. 왜 Fold별 점수를 따로 보나?


Fold별 점수는 모델의 안정성(variance)을 평가하는 데 중요합니다.


점수 예시 1


[0.88, 0.89, 0.87]
  • 평균은 낮아도 일관적, 즉 모델이 안정적



점수 예시 2


[0.75, 0.92, 0.65]
  • 평균은 괜찮아 보여도 편차가 커서 데이터 분할에 따라 성능이 흔들리는 불안정한 모델

따라서 실무에서는 평균 점수 + 분산(표준편차) 둘 다 확인하는 것이 필수.



4. CV Mean의 의미


CV 점수들의 단순 평균으로, “이 모델이 데이터 전체에서 예상할 수 있는 평균적인 성능”을 의미합니다.

CV Mean = (Fold1 + Fold2 + Fold3) / 3

실무에서는 이 값을

  • 모델 성능 보고

  • 모델 비교

  • 하이퍼파라미터 선택

에 사용하는 대표 성능지표로 활용합니다.



5. CV 표준편차(Standard Deviation)의 의미와 해석


CV 표준편차는 교차검증 Fold별 성능의 변동성(안정성)을 나타내는 지표입니다.
즉, 모델이 데이터 분할에 따라 성능이 얼마나 달라지는지를 보여줍니다.


표준편차가 매우 낮은 경우 (0.0 ~ 0.01)


  • Fold 간 성능 차이가 거의 없음

  • 모델이 매우 일관적으로 동작

  • 데이터 분포 변화에 영향을 거의 받지 않음

  • 재현성이 높은 안정적 모델



표준편차가 적당한 경우 (0.01 ~ 0.03)


  • 실무에서 흔히 나타나는 정상 범위

  • 일부 데이터 변동에 따라 성능 차이가 발생하지만 문제 없는 수준

  • 비교적 안정적인 모델로 판단 가능



표준편차가 다소 높은 경우 (0.03 ~ 0.07)


  • 데이터 분할에 따라 성능 변동이 뚜렷하게 발생

  • 다음과 같은 원인 가능성 존재

    • 데이터 샘플 부족

    • 모델 복잡도 과도 → 과적합 가능

    • Fold별 데이터 분포 차이

    • 특정 클래스가 일부 Fold에 몰림

  • 평균 성능만 보고 판단하기에는 위험할 수 있음



표준편차가 매우 높은 경우 (0.07 이상)


  • 모델이 매우 불안정

  • 운영 환경에서 성능이 크게 요동칠 가능성이 높음

  • 주로 다음과 같은 문제와 관련

    • 심한 클래스 불균형

    • 데이터 크기 부족

    • 과적합

    • 데이터 누수 가능성

    • Fold 분할이 원본 분포를 반영하지 못함



6. 표준편차가 높은 경우 점검해야 할 항목


  • StratifiedKFold를 사용해 클래스 비율을 균일하게 유지했는지

  • 모델이 과하게 복잡하지 않은지 (과적합 여부)

  • 데이터 크기가 충분한지

  • 특정 그룹, 기간, 고객군이 특정 Fold에 몰리지는 않았는지

    • 필요한 경우 GroupKFold 또는 TimeSeriesSplit 고려
  • 전처리 과정에서 데이터 누수(leakage)가 발생하지 않았는지



7. CV 평균과 표준편차 해석 예시


예시 출력:

CV Scores: [0.88, 0.91, 0.90]
Mean: 0.896
Std: 0.012
  • 평균 0.896 → 모델의 기대 성능은 약 0.90

  • 표준편차 0.012 → 매우 안정적

  • 데이터 분할 영향을 거의 받지 않는 모델로 판단 가능



8. 실무 관점에서의 결론


교차검증 결과를 해석할 때는 평균 성능(CV Mean)만으로 판단하면 안 되고, 반드시 표준편차(CV Std)를 함께 고려해야 합니다.

  • 평균 높고 표준편차 낮음 → 이상적인 모델

  • 평균 높고 표준편차 높음 → 성능은 좋지만 안정성 부족

  • 평균 낮고 표준편차 낮음 → 성능 개선 필요

  • 평균 낮고 표준편차 높음 → 성능도 낮고 불안정 → 모델 근본 개선 필요



profile
All views expressed here are solely my own and do not represent those of any affiliated organization.

0개의 댓글