과적합과 교차검증
학습·검증·테스트 분리, 과소적합·과적합, 편향·분산, 교차검증·정규화·조기종료와 데이터 누수를 학습한다.
1. 일반화
모델의 목적은 학습 데이터 자체를 외우는 것이 아니라 새 데이터에도 잘 작동하는 것이다. 이를 일반화라고 한다.
학습 데이터 성능 높음
+
새 데이터 성능 높음
=
좋은 일반화
학습 정확도만으로 모델을 평가하면 실제 운영 성능을 오해할 수 있다.
2. 과소적합과 과적합
| 상태 | 학습 성능 | 평가 성능 | 특징 |
|---|---|---|---|
| 과소적합 | 낮음 | 낮음 | 모델이 너무 단순하거나 학습 부족 |
| 적절 | 높음 | 높음 | 핵심 패턴 학습 |
| 과적합 | 매우 높음 | 낮음 | 노이즈·우연한 패턴까지 암기 |
과소적합 적절한 경계 과적합
-------- ~~~~~~~~~ /\/\/\/\/\
너무 단순 구조 반영 데이터 점마다 요동
3. 편향과 분산
- 높은 편향: 모델이 단순해 일관되게 중요한 패턴을 놓침
- 높은 분산: 데이터가 조금만 바뀌어도 모델이 크게 바뀜
복잡도 증가
편향 ↓
분산 ↑
최적 복잡도는 두 오류의 균형과 데이터 노이즈를 고려한다.
4. 데이터 분할
전체 데이터
├─ 학습 60~80%: 파라미터 학습
├─ 검증 10~20%: 하이퍼파라미터·모델 선택
└─ 테스트 10~20%: 최종 일반화 평가
테스트 데이터를 반복 확인하며 모델을 고르면 테스트셋도 사실상 검증셋처럼 사용되어 성능 추정이 낙관적으로 변한다.
5. 시간 데이터 분할
시계열·운영 데이터는 미래 정보를 과거 학습에 넣지 않도록 시간순으로 분리한다.
2024 데이터 → 학습
2025 상반기 → 검증
2025 하반기 → 테스트
무작위 분할을 하면 같은 고객의 미래 거래나 미래 상태가 과거 예측에 섞일 수 있다.
6. 계층화 분할
양성 비율이 낮은 분류에서는 각 데이터셋의 클래스 비율을 비슷하게 유지한다.
전체 양성 2%
↓ Stratified Split
Train 양성 2%
Valid 양성 2%
Test 양성 2%
단, 같은 개인·장비·기관의 레코드가 여러 세트에 동시에 들어가면 그룹 누수가 발생할 수 있으므로 그룹 단위 분할을 고려한다.
7. k-fold 교차검증
데이터를 k개로 나누고 한 폴드를 검증용으로 번갈아 사용한다.
Fold 1: [V][T][T][T][T]
Fold 2: [T][V][T][T][T]
Fold 3: [T][T][V][T][T]
Fold 4: [T][T][T][V][T]
Fold 5: [T][T][T][T][V]
각 검증 성능의 평균·변동 확인
장점:
- 데이터가 적을 때 안정적인 평가
- 모델 선택의 변동 확인
비용:
- 모델을 k번 학습
- 시간·그룹 구조를 무시하면 부적절
8. 하이퍼파라미터 튜닝
예:
- 트리 깊이
- 학습률
- 정규화 강도
- kNN의 k
- 군집 수
- 신경망 층·배치 크기
후보 설정
↓
교차검증 성능 비교
↓
최적 설정 선택
↓
학습+검증 데이터로 재학습
↓
테스트셋 1회 평가
테스트셋 점수를 기준으로 하이퍼파라미터를 고르면 평가 누수가 된다.
9. 과적합 완화
- 모델 단순화
- 더 많은 대표 데이터
- 특징 선택
- 정규화
- 데이터 증강
- 조기종료
- 드롭아웃
- 앙상블
- 가지치기
- 누수 제거
L1·L2 정규화 개념
손실함수 + λ × 복잡도 패널티
- L1은 일부 계수를 0에 가깝게 만들어 특징 선택 효과를 낼 수 있음
- L2는 큰 계수를 부드럽게 줄임
- λ가 너무 크면 과소적합 가능
10. 학습곡선
손실
▲
│\ 학습 손실
│ \
│ \________
│
│ 검증 손실
│ \____/^^^^ ← 이후 상승하면 과적합 신호
└────────────► 학습 반복
조기종료는 검증 성능이 더 이상 좋아지지 않을 때 학습을 멈춘다.
11. 데이터 누수 유형
- 목표값을 직접 포함한 변수
- 예측 시점 이후의 미래 정보
- 전체 데이터로 스케일·대체 규칙 계산
- 같은 개인·문서·장비가 학습과 테스트에 중복
- 테스트 데이터를 보고 특성·임계값 선택
- 운영에서는 얻을 수 없는 수작업 정보
고객 이탈 예측
잘못된 특성: "해지처리완료일"
→ 해지 결과를 이미 알고 있음
매우 높은 성능이 나왔다면 누수 가능성을 먼저 점검한다.
12. 클래스 불균형
양성이 매우 적으면 정확도가 높아도 유용하지 않을 수 있다.
대응:
- 적절한 지표
- 클래스 가중치
- 언더·오버샘플링
- 임계값 조정
- 더 많은 양성 데이터
- 업무 비용 기반 평가
샘플링은 학습 데이터 안에서만 수행해야 평가 분포를 왜곡하지 않는다.
13. 운영 중 성능 저하
- 데이터 분포 변화
- 개념 변화
- 입력 품질 변화
- 정책·사용자 행동 변화
- 외부 시스템 변경
- 피드백 루프
운영 입력·예측·결과 수집
↓
품질·분포·성능 모니터링
↓
임계치 초과
↓
원인 분석·재학습·롤백·중단
14. 교차검증 분할의 선택
- Stratified k-fold: 클래스 비율을 각 fold에 비슷하게 유지
- Group k-fold: 같은 사용자·환자·장비 그룹이 학습과 검증에 동시에 들어가지 않게 함
- Time-series split: 미래를 학습에 쓰지 않고 과거→미래 순서 유지
- Nested CV: 안쪽 반복에서 하이퍼파라미터 선택, 바깥 반복에서 선택 절차 전체를 평가
같은 환자의 여러 검사 행을 무작위로 나누면 거의 같은 정보가 양쪽에 들어가 성능이 부풀려질 수 있다. 이 경우 행이 아니라 환자 단위 그룹 분할이 필요하다.
15. 정규화와 복잡도 제어
L1: 손실 + λΣ|wj| → 일부 계수를 0으로 만들기 쉬움
L2: 손실 + λΣwj² → 큰 계수를 부드럽게 축소
λ가 너무 크면 과소적합, 너무 작으면 과적합 완화가 부족할 수 있다. Early stopping은 검증 손실이 개선되지 않을 때 학습을 멈추며, 검증 데이터를 학습 가중치 갱신에 직접 사용하지는 않지만 반복 선택에 사용되므로 최종 테스트 세트는 별도로 남겨야 한다.
16. 학습곡선 판독
학습·검증 성능 모두 낮고 서로 가까움 → 높은 편향 가능성
학습 성능 높고 검증 성능 낮음 → 높은 분산 가능성
데이터 증가에 따라 격차 감소 → 추가 데이터가 도움 될 가능성
고분산에는 데이터 증가·규제 강화·모델 단순화·앙상블 등이, 고편향에는 더 풍부한 특성·복잡한 모델·규제 완화 등이 후보가 된다.
17. 불균형 처리와 누수 방지
오버샘플링·SMOTE·언더샘플링은 각 fold의 학습 부분 안에서만 수행한다. 분할 전에 합성 샘플을 만들면 원본 이웃 정보가 검증 fold로 새어 나갈 수 있다. 클래스 가중치는 샘플을 복제하지 않고 손실 기여도를 조정한다.
18. 운영 드리프트와 재검증
- Covariate drift: 입력 분포 변화
- Prior drift: 클래스 비율 변화
- Concept drift: 입력과 정답의 관계 변화
- Calibration drift: 예측확률과 실제 빈도의 대응 변화
운영 지표가 나빠졌다고 즉시 재학습하기보다 데이터 지연, 레이블 정의 변경, 서비스 정책 변경을 먼저 확인한다. 새 모델은 동일 기간·동일 집단에서 기존 모델과 비교하고, 하위집단 성능과 롤백 조건을 정한다.
확인 문제
- 같은 환자 행이 양쪽에 섞이지 않게 하는 분할은?
- Nested CV의 바깥 반복 역할은?
- 일부 계수를 0으로 만들기 쉬운 규제는?
- 학습 성능은 높고 검증 성능이 낮으면?
- SMOTE는 교차검증 어디에서 수행해야 하는가?