교차검증(Cross-Validation) 완전 정복_ADsP 3과목

🔁 교차검증(Cross-Validation) 완전 정복 🌈

📘 모델의 ‘진짜 실력’을 확인하는 가장 공정한 방법!


🎯 1️⃣ 교차검증이란?

머신러닝 모델이 새로운 데이터(미래 데이터) 에서도 잘 작동하는지를 확인하기 위해

데이터를 여러 번 나눠 훈련(train)검증(validation) 을 반복하는 방법이에요 🔄

👉 한 번만 나누는 홀드아웃(Hold-out) 보다 훨씬 안정적이고

👉 과적합(Overfitting) 을 미리 막을 수 있어요 💪


🧩 2️⃣ 교차검증 방법 한눈 정리표

방법핵심 아이디어장점단점사용 상황
🧱 홀드아웃(Hold-out)한 번만 나눠서 Train/Valid 평가빠름, 간단분할 운에 좌우됨 😅데이터 많고 탐색 단계
🔄 k-겹 교차검증(k-Fold)k번 나눠 번갈아 검증안정적 평균계산량 ↑표준 실전용 (k=5~10)
⚖️ 층화 k-겹(Stratified k-Fold)클래스 비율 유지불균형에 강함분류 문제 기본
🔁 반복 k-겹(Repeated k-Fold)여러 번 셔플 반복평균 안정 ↑시간 ↑데이터 적을 때
👨‍👩‍👧 그룹 k-겹(Group k-Fold)그룹 단위로 분리누수 방지그룹 지정 필요고객/환자 등 동일 그룹
📘 LOOCV1개 검증, 나머지 학습데이터 최대 활용매우 느림 😵소형 데이터
💫 LpOCVp개 검증, 나머지 학습(조합 반복)편향↓, 정교함계산량 폭발💥n 작고 p 작을 때
시계열 CV과거→미래로만 검증누수 방지구현 복잡시계열 문제

🧱 3️⃣ 홀드아웃 검증 (Hold-out Validation)

가장 단순한 검증법이에요 👇

  • 데이터를 훈련용 80% + 검증용 20% 으로 한 번만 나눠 모델 평가
  • 분류 문제에서는 층화(Stratify) 로 클래스 비율을 유지
  • 시계열은 시간 순서대로 분할(과거→미래) 해야 해요 ⏱️

장점

  • 빠르고 간단! 모델 탐색 단계에 딱이에요 ⚡

⚠️ 단점

  • 한 번만 나누기 때문에, 분할 운(운빨)에 따라 결과가 흔들릴 수 있어요 😅
  • 그래서 최종 평가에는 보통 k-겹 교차검증을 사용합니다.

🧮 4️⃣ LpOCV (Leave-p-Out Cross-Validation)

💡 LOOCV(Leave-One-Out) 의 확장판이에요.

즉, 한 번에 p개의 데이터만 검증용으로 두고, 나머지는 학습에 사용합니다.

📘 예를 들어

  • 데이터 10개 중 2개(p=2)를 검증에 사용 → 조합 가능한 모든 경우의 수로 반복

장점

  • 매우 정교하고, 편향(Bias) 이 적음
  • 작은 데이터셋에서 정확한 일반화 성능 확인 가능

⚠️ 단점

  • 조합 수가 C(n, p)폭발적이에요 💣
  • → n=100, p=2이면 4,950번 반복 😱
  • 그래서 실전에서는 거의 사용되지 않지만,
  • 시험에선 개념적으로 출제돼요!

📊 5️⃣ k-겹 교차검증 (k-Fold CV)

📘 데이터를 k개의 폴드(fold) 로 나눈 뒤,

한 폴드씩 번갈아 검증하고 나머지 k−1개로 학습합니다.

예시 👉 5-Fold라면

  • Fold 1: 검증, 나머지 4개 Train
  • Fold 2: 검증, 나머지 4개 Train
  • … 이렇게 총 5번 반복 후 평균 성능 계산 ✨

✅ 안정적 평균으로 운빨 제거

✅ 과적합 여부 파악 가능

📌 일반적으로 k=5 또는 10 사용!


🧭 6️⃣ 시계열 교차검증 (Time-Series CV)

⏰ 시계열 데이터는 시간 순서가 중요해요!

  • 과거 데이터로 학습 → 미래 데이터로 검증
  • 절대 무작위 섞으면 ❌ 미래 정보 누수 발생

📘 예시

  • Expanding: (2019)→2020, (2019-20)→2021, (2019-21)→2022
  • Rolling: (2019)→2020, (2020)→2021 … (윈도우 굴림)

🧯 7️⃣ 데이터 누수(Leakage) 방지 체크리스트 ✅

항목주의 포인트
⚙️ 전처리fit은 Train에서만, Valid/Test엔 transform만
⏱️ 시계열미래 정보 금지 (시간 순서 유지)
👨‍👩 그룹 데이터동일 그룹이 Train/Valid에 동시에 등장 금지
🧮 파생 변수라벨 정보 포함된 파생 변수 생성 금지

⚙️ 8️⃣ 교차검증 + 튜닝의 황금 조합 🎛️

  • 그리드/랜덤/베이지안 서치 × (층화) k-겹 CV
  • 조기 종료(Early Stopping) 기준은 CV의 검증 점수
  • 공정한 모델 비교엔 Nested CV 사용
  • (바깥 루프 → 성능 평가 / 안쪽 루프 → 튜닝)

📏 9️⃣ 분할 비율 & k값 가이드

방법비율 / k값특징
🧱 홀드아웃Train : Valid = 8 : 2 또는 7 : 3탐색용, 빠름
🔄 k-겹k = 5 (기본), k = 10 (데이터 적을 때 안정↑)표준 실전용
💫 LpOCVp = 1~2 (LOOCV 포함)소형 데이터 전용, 계산량 주의

🧾 10️⃣ 시험에 자주 나오는 포인트 ✍️

✅ 홀드아웃은 가장 간단한 검증법, 빠르지만 운에 좌우됨

✅ k-겹은 데이터 효율과 안정성 모두 좋음

✅ LOOCV = LpOCV(p=1)의 특수형

✅ 시계열 CV는 시간 순서 유지가 생명

✅ 전처리 fit / transform 분리 안 하면 데이터 누수!


🌈 11️⃣ 한 줄 요약

💬 “홀드아웃은 빠르고 간단,

k-겹은 표준 실전용,

LpOCV는 작은 데이터에서 정교하지만 계산이 많다!”

핵심은 데이터 특성에 맞게 검증법을 선택하고,

전처리는 반드시 ‘폴드 안에서만 fit’ 하는 것!