모델 평가와 과적합: 데이터 나누기 · 혼동 행렬 · 정규화
데이터 나누기 · 혼동 행렬 · 정밀도/재현율 · ROC-AUC · L2 정규화 · 조기 종료를 손계산으로
먼저 알아야 할 것
다루는 내용
모델을 정직하게 평가하고 과적합을 다루는 법을 자체 해설로 정리한 수업입니다. 학습 · 검증 · 테스트 나누기와 데이터 누수, 혼동 행렬로 계산하는 정확도 · 정밀도 · 재현율 · F1과 불균형 데이터의 함정, 임곗값에 따른 ROC 곡선과 AUC의 뜻, 손실 곡선으로 하는 과적합 진단, L2 정규화 · 조기 종료 · k-겹 교차 검증을 작은 숫자로 직접 계산합니다.
해설
모델 평가와 과적합: 데이터 나누기 · 혼동 행렬 · 정규화
학습 데이터에서 잘 맞는 모델이 새 데이터에서도 잘 맞는다는 보장은 없습니다. 이 수업은 모델을 "정직하게" 평가하는 법 — 학습 · 검증 · 테스트 나누기, 혼동 행렬과 정확도 · 정밀도 · 재현율 · F1, 임곗값과 ROC · AUC — 과, 과적합을 알아보고 줄이는 법 — 손실 곡선, L2 정규화, 조기 종료, 교차 검증 — 을 손계산으로 익힙니다.
| 항목 | 내용 |
|---|---|
| 참고 자료 | Google Machine Learning Crash Course의 '분류(Classification)' 모듈과 '데이터셋 · 일반화 · 과적합' 모듈 · developers.google.com/machine-learning/crash-course/classification |
| 트랙 · 수준 | 머신러닝 · 기초 |
| 이 수업의 범위 | 데이터 나누기, 혼동 행렬, 정확도 · 정밀도 · 재현율 · F1, 임곗값 · ROC · AUC, 불균형 데이터, 과적합 · 과소적합, 손실 곡선, L2 정규화, 조기 종료, k-겹 교차 검증 |
| 먼저 알면 좋은 것 | 로지스틱 회귀(확률 출력), 손실과 경사 하강법, 분수 계산 |
들어가기 전에
- 로지스틱 회귀와 소프트맥스: 확률을 내는 분류기 — 시그모이드 · 로그 손실 · 기울기 p−y · 소프트맥스를 손계산하는 로지스틱 회귀
- 구글 머신러닝 단기 집중 과정으로 배우는 머신러닝 첫걸음 — 손실 · 경사 하강법 · 하이퍼파라미터, 그리고 확률을 내는 로지스틱 회귀를 알고 오면 됩니다.
- 스탠퍼드 CS229 머신러닝 강의 노트 — 편향-분산 트레이드오프의 뜻(과소적합 = 편향, 과적합 = 분산)을 이 수업에서 실제 진단 방법으로 바꿉니다.
한눈에 보기
- 왜 데이터를 학습 · 검증 · 테스트로 나누고, 테스트 데이터는 왜 끝까지 아껴야 하는지 압니다.
- 혼동 행렬의 네 칸(TP · FP · FN · TN)으로 정확도 · 정밀도 · 재현율 · F1을 직접 계산합니다.
- 임곗값을 바꾸면 정밀도와 재현율이 어떻게 맞바뀌는지, ROC 곡선과 AUC가 무엇을 요약하는지 6개 예제로 계산합니다.
- 손실 곡선으로 과적합을 알아보고, L2 정규화와 조기 종료가 왜 효과가 있는지 압니다.
- k-겹 교차 검증으로 적은 데이터에서도 안정적으로 평가하는 법을 익힙니다.
1. 데이터 나누기: 시험 문제를 미리 보지 않기
직관(해설용 비유): 기출문제만 외운 학생은 기출 시험에서는 만점이지만 새 문제에서는 무너집니다. 모델도 학습에 쓴 데이터로 평가하면 실력보다 좋게 나옵니다. 그래서 "모델이 한 번도 보지 못한 데이터"로 평가합니다.
| 묶음 | 쓰임 | 언제 보나 |
|---|---|---|
| 학습(training) | 가중치를 학습 | 매 갱신마다 |
| 검증(validation) | 하이퍼파라미터 · 모델 선택, 조기 종료 판단 | 학습 중 여러 번 |
| 테스트(test) | 최종 성능 보고 | 맨 마지막에 한 번 |
비율은 데이터 크기에 따라 정합니다. 예를 들어 예제 1만 개라면 학습 8,000 · 검증 1,000 · 테스트 1,000처럼 나눌 수 있습니다(해설용 예).
주의할 점
- 검증 데이터도 닳습니다. 검증 점수를 보며 설정을 수십 번 고치면 검증 데이터에 맞춰진 모델이 됩니다. 그래서 별도의 테스트 데이터가 필요합니다.
- 데이터 누수(data leakage): 같은 사람의 사진, 같은 문서의 문장이 학습과 테스트에 나뉘어 들어가면 점수가 부풀려집니다. 사람 · 문서 · 시간 단위로 나눠야 합니다.
- 분포를 맞춥니다. 학습 · 검증 · 테스트가 같은 분포에서 나와야 비교가 의미 있습니다. 실제 서비스 데이터와 비슷한 데이터로 테스트해야 합니다.
2. 혼동 행렬과 네 가지 지표
이진 분류의 결과는 네 칸으로 나뉩니다. '양성(positive)'은 찾고 싶은 쪽(스팸, 사기, 병)입니다.
| 실제 양성 | 실제 음성 | |
|---|---|---|
| 예측 양성 | 참양성 TP | 거짓양성 FP |
| 예측 음성 | 거짓음성 FN | 참음성 TN |
| 지표 | 질문 |
|---|---|
| 정확도(accuracy) | 전체 중 맞힌 비율은? |
| 정밀도(precision) | "양성"이라고 한 것 중 진짜 양성은 얼마나? |
| 재현율(recall, = 참양성률 TPR) | 진짜 양성 중 모델이 찾아낸 것은 얼마나? |
| F1 점수 | 정밀도와 재현율의 조화 평균 — 둘 다 높아야 높음 |
| 거짓양성률(FPR) | 진짜 음성 중 잘못 양성이라 한 비율 |
숫자로 해 보기(해설용): 메일 1,000통 중 실제 스팸이 100통입니다. 모델이 90통을 스팸이라 했고 그중 72통이 진짜 스팸이었습니다.
- TP , FP , FN , TN
- 정확도
- 정밀도 , 재현율
- F1
정확도의 함정: 같은 데이터에서 "모든 메일은 정상"이라고만 답하는 모델도 정확도 입니다. 하지만 재현율은 0, 스팸을 하나도 못 잡습니다. 양성이 드문 불균형 데이터(imbalanced data)에서는 정확도 대신 정밀도 · 재현율 · F1을 봐야 합니다. 이 원리는 확률과 통계 최소한의 베이즈 정리 예(드문 병의 양성 판정)와 같습니다.
어느 지표를 우선하나: 놓치면 큰일인 문제(암 검진, 사기 탐지)는 재현율을, 잘못 경보하면 비용이 큰 문제(정상 메일을 스팸함에 넣기, 무고한 계정 정지)는 정밀도를 우선합니다. 업무 비용으로 정하는 설계 선택입니다.
3. 임곗값 · ROC 곡선 · AUC
직관: 로지스틱 회귀는 확률을 냅니다. "0.5 이상이면 스팸"의 0.5가 임곗값(threshold)입니다. 임곗값을 낮추면 더 많이 잡지만(재현율 ↑) 헛경보도 늘고(정밀도 ↓), 높이면 반대입니다.
숫자로 해 보기(해설용): 예제 6개, 실제 양성 3개(점수 0.9, 0.8, 0.4), 실제 음성 3개(점수 0.7, 0.3, 0.2)입니다.
| 임곗값 | 양성 판정 | TP | FP | 재현율(TPR) | FPR | 정밀도 |
|---|---|---|---|---|---|---|
| 0.85 | 0.9 | 1 | 0 | 1/3 | 0 | 1 |
| 0.75 | 0.9, 0.8 | 2 | 0 | 2/3 | 0 | 1 |
| 0.5 | 0.9, 0.8, 0.7 | 2 | 1 | 2/3 | 1/3 | 2/3 |
| 0.35 | + 0.4 | 3 | 1 | 1 | 1/3 | 3/4 |
| 0.25 | + 0.3 | 3 | 2 | 1 | 2/3 | 3/5 |
| 0.1 | 전부 | 3 | 3 | 1 | 1 | 1/2 |
ROC 곡선(Receiver Operating Characteristic): 가로축 FPR, 세로축 TPR로 위 점들을 이은 곡선입니다. 왼쪽 위 모서리(FPR 0, TPR 1)에 가까울수록 좋은 모델입니다.
AUC(Area Under the Curve): ROC 곡선 아래 넓이입니다. 위 점 아래 넓이는 입니다.
AUC에는 깔끔한 뜻이 있습니다. "양성 하나와 음성 하나를 무작위로 뽑았을 때, 모델이 양성에 더 높은 점수를 줄 확률"입니다. 위 예에서 (양성, 음성) 쌍 9개 중 양성 점수가 더 큰 쌍은 0.9가 3쌍, 0.8이 3쌍, 0.4가 2쌍(0.3, 0.2보다 큼)으로 8쌍, 로 넓이와 같습니다. 무작위로 찍는 모델은 0.5, 완벽한 모델은 1입니다.
flowchart LR
A[전체 데이터] --> B[학습 · 검증 · 테스트로 나누기]
B --> C[학습 데이터로 가중치 학습]
C --> D[검증 데이터로 손실 곡선 · 지표 확인]
D --> E{과적합? 과소적합?}
E -- 과적합 --> F[정규화 · 조기 종료 · 데이터 늘리기]
E -- 과소적합 --> G[모델 · 특성 키우기]
F --> C
G --> C
E -- 적당함 --> H[임곗값 고르기]
H --> I[테스트 데이터로 한 번 최종 평가]왜 AUC를 따로 보나: 정밀도 · 재현율은 임곗값 하나에서의 성적이고, AUC는 모든 임곗값을 아우른 "순서를 잘 매기는 능력"입니다. 임곗값을 나중에 업무에 맞춰 정할 때 모델끼리 비교하기 좋습니다. 다만 양성이 아주 드물면 FPR이 작게 나와 AUC가 낙관적일 수 있어, 그때는 정밀도-재현율 곡선도 함께 봅니다.
4. 과적합과 과소적합 알아보기: 손실 곡선
직관: 학습이 진행될수록 학습 손실은 계속 줄어듭니다. 그런데 어느 순간부터 모델이 학습 데이터의 잡음까지 외우기 시작하면 검증 손실이 다시 올라갑니다. 이 갈림길이 과적합의 신호입니다.
숫자로 해 보기(해설용, 지어낸 기록):
| 에포크 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 학습 손실 | 0.90 | 0.60 | 0.45 | 0.36 | 0.30 | 0.25 | 0.21 | 0.18 |
| 검증 손실 | 0.92 | 0.65 | 0.52 | 0.47 | 0.46 | 0.48 | 0.52 | 0.57 |
5 에포크까지는 둘 다 줄다가 6 에포크부터 검증 손실만 오릅니다. 5 에포크의 모델이 새 데이터에 가장 잘 맞습니다.
| 증상 | 진단 | 처방 |
|---|---|---|
| 학습 손실도 높음 | 과소적합(편향 큼) | 더 큰 모델, 더 좋은 특성, 더 오래 학습 |
| 학습 손실은 낮은데 검증 손실이 높음 · 상승 | 과적합(분산 큼) | 데이터 늘리기, 정규화, 조기 종료, 더 단순한 모델 |
| 둘 다 낮고 비슷 | 적당함 | 테스트로 최종 확인 |
MLCC의 '데이터셋 · 일반화 · 과적합' 모듈도 일반화 · 과적합 · 모델 복잡도 · L2 정규화 · 손실 곡선 해석을 차례로 다룹니다.
5. L2 정규화와 조기 종료
L2 정규화
직관: 가중치가 지나치게 커지면 모델이 입력의 작은 변화에도 크게 출렁이며 잡음까지 따라갑니다. 손실에 "가중치가 크면 벌점"을 더해 가중치를 작게 유지합니다.
| 기호 | 뜻 |
|---|---|
| 원래 손실(MSE, 교차 엔트로피 등) | |
| 정규화 세기(regularization rate) — 하이퍼파라미터 | |
| 가중치 벡터의 L2 노름 제곱 (보통 편향은 뺌) |
숫자로 해 보기(해설용): , 데이터 손실의 기울기가 0이라고 하고 , 이면 입니다. 매 걸음 가중치에 을 곱하는 셈이라 가중치 감쇠(weight decay)라고도 부릅니다.
고르기: 너무 크면 가중치가 다 0 근처로 눌려 과소적합, 너무 작으면 효과가 없습니다. 검증 데이터로 여러 값을 시험해 고릅니다. 정규화가 "가중치가 0 근처일 것"이라는 사전 믿음과 같다는 것은 확률적 머신러닝 입문에서 봅니다.
조기 종료
직관: 4절 표처럼 검증 손실이 가장 낮았던 시점에서 학습을 멈추고 그때의 가중치를 씁니다. 구현은 "검증 손실이 몇 에포크 연속 나아지지 않으면 멈춤(인내 patience)"처럼 합니다. 계산도 아끼고 과적합도 막는 가장 값싼 정규화입니다.
6. k-겹 교차 검증
직관: 데이터가 적으면 검증 데이터를 어떻게 떼느냐에 따라 점수가 크게 흔들립니다. 데이터를 조각으로 나눠 돌아가며 한 조각씩 검증에 쓰고 점수를 평균 냅니다.
단계
- 데이터를 개 조각(fold)으로 나눕니다.
- 번째 조각을 검증에, 나머지 개를 학습에 씁니다.
- 에 대해 반복해 점수 개를 얻습니다.
- 평균(과 흔들림)을 보고합니다.
숫자로 해 보기(해설용): 예제 1,000개를 5겹으로 나누면 매번 학습 800 · 검증 200입니다. 다섯 번의 정확도가 0.82, 0.85, 0.80, 0.84, 0.84라면 평균은 입니다. 한 번만 나눴다면 0.80이나 0.85 중 하나를 보고했을 것입니다.
비용: 학습을 번 해야 하므로 큰 딥러닝 모델에는 잘 쓰지 않고, 데이터가 적은 표 형태 문제(트리 부스팅 등)에서 주로 씁니다.
연습 문제
1. 사기 거래 탐지에서 TP 40, FP 10, FN 60, TN 9,890입니다. 정확도 · 정밀도 · 재현율 · F1은?
풀이: 정확도 , 정밀도 , 재현율 , F1 . 정확도는 99%가 넘지만 사기의 60%를 놓치고 있습니다.
2. 3절 예에서 재현율 1을 유지하면서 정밀도를 가장 높이는 임곗값은?
풀이: 0.35(0.4 이하 · 0.3 초과)입니다. TP 3, FP 1로 정밀도 0.75입니다.
3. 양성 점수 (0.6, 0.3), 음성 점수 (0.5, 0.1)의 AUC는?
풀이: 쌍 4개 — (0.6, 0.5) ○, (0.6, 0.1) ○, (0.3, 0.5) ×, (0.3, 0.1) ○ → 입니다.
4. , 일 때, 데이터 기울기를 무시하면 매 걸음 가중치에 몇을 곱하는 셈인가요?
풀이: 입니다.
스스로 점검
- 검증 데이터가 있는데 왜 테스트 데이터를 따로 두나요?
- 답: 검증 점수를 보며 하이퍼파라미터를 고르는 과정에서 모델이 검증 데이터에 간접적으로 맞춰지기 때문입니다. 한 번도 쓰지 않은 테스트 데이터로만 정직한 최종 성능을 잴 수 있습니다.
- 양성이 1%뿐인 데이터에서 정확도 99%는 좋은 모델인가요?
- 답: 알 수 없습니다. 모두 음성이라고 답해도 99%입니다. 정밀도 · 재현율 · F1 · AUC를 함께 봐야 합니다.
- 학습 손실은 계속 줄고 검증 손실이 오르기 시작하면 무엇을 하나요?
- 답: 과적합 신호이므로 검증 손실이 가장 낮았던 시점에서 멈추고(조기 종료), 필요하면 정규화를 세게 하거나 데이터를 늘립니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 학습 · 검증 · 테스트 데이터(train · validation · test) | 가중치 학습 · 설정 고르기 · 최종 평가에 쓰는 데이터 묶음 |
| 데이터 누수(data leakage) | 평가 데이터의 정보가 학습에 새어 들어가 점수가 부풀려지는 일 |
| 혼동 행렬(confusion matrix) | 예측 × 실제를 네 칸으로 센 표 |
| 정확도(accuracy) | 전체 중 맞힌 비율 |
| 정밀도(precision) | 양성 예측 중 진짜 양성 비율 |
| 재현율(recall) | 진짜 양성 중 찾아낸 비율 |
| F1 점수(F1 score) | 정밀도와 재현율의 조화 평균 |
| 임곗값(threshold) | 확률을 양성/음성으로 자르는 기준 |
| ROC 곡선 | 임곗값을 바꾸며 그린 FPR–TPR 곡선 |
| AUC | ROC 곡선 아래 넓이, 양성에 더 높은 점수를 줄 확률 |
| 불균형 데이터(imbalanced data) | 한 클래스가 매우 드문 데이터 |
| 과적합 · 과소적합(overfitting · underfitting) | 학습 데이터에 너무 맞춤 · 너무 못 맞춤 |
| L2 정규화(L2 regularization) | 가중치 제곱합을 손실에 더하는 벌점, 가중치 감쇠 |
| 조기 종료(early stopping) | 검증 손실이 나빠지기 전에 학습을 멈추기 |
| k-겹 교차 검증(k-fold cross-validation) | 데이터를 k조각으로 돌아가며 검증하는 방법 |
더 깊이 보려면
참고 자료 MLCC의 '분류' 모듈은 임곗값과 혼동 행렬, 정확도 · 재현율 · 정밀도와 관련 지표, ROC와 AUC, 예측 편향, 다중 분류, 프로그래밍 실습 순서이고, '데이터셋 · 일반화 · 과적합' 모듈은 데이터 특성 · 라벨 · 불균형 데이터 · 데이터 나누기 · 변환 · 일반화 · 과적합 · 모델 복잡도 · L2 정규화 · 손실 곡선 해석 순서입니다. 손실 곡선 모양별 진단 예를 더 보고 싶다면 '손실 곡선 해석' 페이지가 특히 좋습니다.
다음에 볼 것
- 특성 공학과 데이터 전처리: 스케일링 · 인코딩 · 결측값 · 파이프라인 — 표준화 · 원-핫 · 결측 대치 · 데이터 누수 · Pipeline을 실행 코드로 익히는 전처리 수업
- 확률적 머신러닝 입문 — L2 정규화가 "가중치에 대한 정규분포 사전 믿음"과 같다는 것을 MAP 추정으로 봅니다.
- 딥러닝 (Goodfellow) — 드롭아웃 · 데이터 증강 등 딥러닝의 정규화와 최적화 기법을 넓게 다룹니다.
- XGBoost: 확장 가능한 트리 부스팅 — 표 형태 데이터에서 정규화 항을 목적 함수에 직접 넣은 트리 모델을 봅니다.
라이선스
참고 자료 MLCC 페이지 본문은 별도 표기가 없는 한 CC BY 4.0, 코드 예제는 Apache 2.0 라이선스입니다. 이 글은 원문 번역이 아니라 KAITABASE가 직접 쓴 해설이며, 숫자 예와 손실 기록은 모두 설명용으로 만든 것입니다.
출처
- 참고: developers.google.com/machine-learning/cr… (MLCC 분류 모듈)
- 참고: developers.google.com/machine-learning/cr… (MLCC 전체, '데이터셋 · 일반화 · 과적합' 모듈 포함)
AI 원리부터 이해하기 · 머신러닝 모듈
머신러닝 모듈 학습
이 글은 머신러닝 모듈의 학습 자료입니다. 전체 17개 자료 중 3번째입니다.
출처·원문
원문 보기요약만