검색
← 모듈 로드맵

모델 평가와 과적합: 데이터 나누기 · 혼동 행렬 · 정규화

강의 · 입문자 · KAITABASE 정리

원제 · Classification · Overfitting (Google MLCC 참고)

데이터 나누기 · 혼동 행렬 · 정밀도/재현율 · 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-겹 교차 검증
먼저 알면 좋은 것로지스틱 회귀(확률 출력), 손실과 경사 하강법, 분수 계산

들어가기 전에

한눈에 보기

  • 왜 데이터를 학습 · 검증 · 테스트로 나누고, 테스트 데이터는 왜 끝까지 아껴야 하는지 압니다.
  • 혼동 행렬의 네 칸(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
정확도=TP+TNTP+FP+FN+TN,정밀도=TPTP+FP,재현율=TPTP+FN,F1=2⋅정밀도⋅재현율정밀도+재현율\text{정확도} = \frac{TP + TN}{TP + FP + FN + TN},\quad \text{정밀도} = \frac{TP}{TP + FP},\quad \text{재현율} = \frac{TP}{TP + FN},\quad F_1 = \frac{2 \cdot \text{정밀도} \cdot \text{재현율}}{\text{정밀도} + \text{재현율}}
지표질문
정확도(accuracy)전체 중 맞힌 비율은?
정밀도(precision)"양성"이라고 한 것 중 진짜 양성은 얼마나?
재현율(recall, = 참양성률 TPR)진짜 양성 중 모델이 찾아낸 것은 얼마나?
F1 점수정밀도와 재현율의 조화 평균 — 둘 다 높아야 높음
거짓양성률(FPR)진짜 음성 중 잘못 양성이라 한 비율 FP/(FP+TN)FP/(FP+TN)

숫자로 해 보기(해설용): 메일 1,000통 중 실제 스팸이 100통입니다. 모델이 90통을 스팸이라 했고 그중 72통이 진짜 스팸이었습니다.

  • TP =72= 72, FP =90−72=18= 90 - 72 = 18, FN =100−72=28= 100 - 72 = 28, TN =900−18=882= 900 - 18 = 882
  • 정확도 =(72+882)/1000=0.954= (72 + 882)/1000 = 0.954
  • 정밀도 =72/90=0.80= 72/90 = 0.80, 재현율 =72/100=0.72= 72/100 = 0.72
  • F1 =2×0.8×0.72/1.52≈0.758= 2 \times 0.8 \times 0.72 / 1.52 \approx 0.758

정확도의 함정: 같은 데이터에서 "모든 메일은 정상"이라고만 답하는 모델도 정확도 900/1000=0.90900/1000 = 0.90입니다. 하지만 재현율은 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)입니다.

임곗값양성 판정TPFP재현율(TPR)FPR정밀도
0.850.9101/301
0.750.9, 0.8202/301
0.50.9, 0.8, 0.7212/31/32/3
0.35+ 0.43111/33/4
0.25+ 0.33212/33/5
0.1전부33111/2

ROC 곡선(Receiver Operating Characteristic): 가로축 FPR, 세로축 TPR로 위 점들을 이은 곡선입니다. 왼쪽 위 모서리(FPR 0, TPR 1)에 가까울수록 좋은 모델입니다.

AUC(Area Under the Curve): ROC 곡선 아래 넓이입니다. 위 점 (0,0)→(0,2/3)→(1/3,2/3)→(1/3,1)→(1,1)(0,0) \to (0, 2/3) \to (1/3, 2/3) \to (1/3, 1) \to (1, 1) 아래 넓이는 13×23+23×1=89≈0.889\frac{1}{3}\times\frac{2}{3} + \frac{2}{3}\times 1 = \frac{8}{9} \approx 0.889입니다.

AUC에는 깔끔한 뜻이 있습니다. "양성 하나와 음성 하나를 무작위로 뽑았을 때, 모델이 양성에 더 높은 점수를 줄 확률"입니다. 위 예에서 (양성, 음성) 쌍 9개 중 양성 점수가 더 큰 쌍은 0.9가 3쌍, 0.8이 3쌍, 0.4가 2쌍(0.3, 0.2보다 큼)으로 8쌍, 8/98/9로 넓이와 같습니다. 무작위로 찍는 모델은 0.5, 완벽한 모델은 1입니다.

mermaid
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. 과적합과 과소적합 알아보기: 손실 곡선

직관: 학습이 진행될수록 학습 손실은 계속 줄어듭니다. 그런데 어느 순간부터 모델이 학습 데이터의 잡음까지 외우기 시작하면 검증 손실이 다시 올라갑니다. 이 갈림길이 과적합의 신호입니다.

숫자로 해 보기(해설용, 지어낸 기록):

에포크12345678
학습 손실0.900.600.450.360.300.250.210.18
검증 손실0.920.650.520.470.460.480.520.57

5 에포크까지는 둘 다 줄다가 6 에포크부터 검증 손실만 오릅니다. 5 에포크의 모델이 새 데이터에 가장 잘 맞습니다.

증상진단처방
학습 손실도 높음과소적합(편향 큼)더 큰 모델, 더 좋은 특성, 더 오래 학습
학습 손실은 낮은데 검증 손실이 높음 · 상승과적합(분산 큼)데이터 늘리기, 정규화, 조기 종료, 더 단순한 모델
둘 다 낮고 비슷적당함테스트로 최종 확인

MLCC의 '데이터셋 · 일반화 · 과적합' 모듈도 일반화 · 과적합 · 모델 복잡도 · L2 정규화 · 손실 곡선 해석을 차례로 다룹니다.

5. L2 정규화와 조기 종료

L2 정규화

직관: 가중치가 지나치게 커지면 모델이 입력의 작은 변화에도 크게 출렁이며 잡음까지 따라갑니다. 손실에 "가중치가 크면 벌점"을 더해 가중치를 작게 유지합니다.

L전체=L데이터+λ∑jwj2,wj←wj−η(∂L데이터∂wj+2λwj)L_{\text{전체}} = L_{\text{데이터}} + \lambda \sum_j w_j^2, \qquad w_j \leftarrow w_j - \eta\Big(\frac{\partial L_{\text{데이터}}}{\partial w_j} + 2\lambda w_j\Big)
기호뜻
L데이터L_{\text{데이터}}원래 손실(MSE, 교차 엔트로피 등)
λ\lambda정규화 세기(regularization rate) — 하이퍼파라미터
∑jwj2\sum_j w_j^2가중치 벡터의 L2 노름 제곱 (보통 편향은 뺌)

숫자로 해 보기(해설용): w=3w = 3, 데이터 손실의 기울기가 0이라고 하고 λ=0.1\lambda = 0.1, η=0.1\eta = 0.1이면 w←3−0.1×(2×0.1×3)=3−0.06=2.94w \leftarrow 3 - 0.1 \times (2 \times 0.1 \times 3) = 3 - 0.06 = 2.94입니다. 매 걸음 가중치에 (1−2ηλ)=0.98(1 - 2\eta\lambda) = 0.98을 곱하는 셈이라 가중치 감쇠(weight decay)라고도 부릅니다.

λ\lambda 고르기: 너무 크면 가중치가 다 0 근처로 눌려 과소적합, 너무 작으면 효과가 없습니다. 검증 데이터로 여러 값을 시험해 고릅니다. 정규화가 "가중치가 0 근처일 것"이라는 사전 믿음과 같다는 것은 확률적 머신러닝 입문에서 봅니다.

조기 종료

직관: 4절 표처럼 검증 손실이 가장 낮았던 시점에서 학습을 멈추고 그때의 가중치를 씁니다. 구현은 "검증 손실이 몇 에포크 연속 나아지지 않으면 멈춤(인내 patience)"처럼 합니다. 계산도 아끼고 과적합도 막는 가장 값싼 정규화입니다.

6. k-겹 교차 검증

직관: 데이터가 적으면 검증 데이터를 어떻게 떼느냐에 따라 점수가 크게 흔들립니다. 데이터를 kk조각으로 나눠 돌아가며 한 조각씩 검증에 쓰고 점수를 평균 냅니다.

단계

  1. 데이터를 kk개 조각(fold)으로 나눕니다.
  2. ii번째 조각을 검증에, 나머지 k−1k-1개를 학습에 씁니다.
  3. i=1…ki = 1 \dots k에 대해 반복해 점수 kk개를 얻습니다.
  4. 평균(과 흔들림)을 보고합니다.

숫자로 해 보기(해설용): 예제 1,000개를 5겹으로 나누면 매번 학습 800 · 검증 200입니다. 다섯 번의 정확도가 0.82, 0.85, 0.80, 0.84, 0.84라면 평균은 4.15/5=0.834.15/5 = 0.83입니다. 한 번만 나눴다면 0.80이나 0.85 중 하나를 보고했을 것입니다.

비용: 학습을 kk번 해야 하므로 큰 딥러닝 모델에는 잘 쓰지 않고, 데이터가 적은 표 형태 문제(트리 부스팅 등)에서 주로 씁니다.

연습 문제

1. 사기 거래 탐지에서 TP 40, FP 10, FN 60, TN 9,890입니다. 정확도 · 정밀도 · 재현율 · F1은?

풀이: 정확도 (40+9890)/10000=0.993(40 + 9890)/10000 = 0.993, 정밀도 40/50=0.840/50 = 0.8, 재현율 40/100=0.440/100 = 0.4, F1 =2×0.8×0.4/1.2≈0.533= 2 \times 0.8 \times 0.4 / 1.2 \approx 0.533. 정확도는 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) ○ → 3/4=0.753/4 = 0.75입니다.

4. λ=0.05\lambda = 0.05, η=0.2\eta = 0.2일 때, 데이터 기울기를 무시하면 매 걸음 가중치에 몇을 곱하는 셈인가요?

풀이: 1−2ηλ=1−2×0.2×0.05=0.981 - 2\eta\lambda = 1 - 2 \times 0.2 \times 0.05 = 0.98입니다.

스스로 점검

  1. 검증 데이터가 있는데 왜 테스트 데이터를 따로 두나요?
    • 답: 검증 점수를 보며 하이퍼파라미터를 고르는 과정에서 모델이 검증 데이터에 간접적으로 맞춰지기 때문입니다. 한 번도 쓰지 않은 테스트 데이터로만 정직한 최종 성능을 잴 수 있습니다.
  2. 양성이 1%뿐인 데이터에서 정확도 99%는 좋은 모델인가요?
    • 답: 알 수 없습니다. 모두 음성이라고 답해도 99%입니다. 정밀도 · 재현율 · F1 · AUC를 함께 봐야 합니다.
  3. 학습 손실은 계속 줄고 검증 손실이 오르기 시작하면 무엇을 하나요?
    • 답: 과적합 신호이므로 검증 손실이 가장 낮았던 시점에서 멈추고(조기 종료), 필요하면 정규화를 세게 하거나 데이터를 늘립니다.

용어 정리

용어쉬운 뜻
학습 · 검증 · 테스트 데이터(train · validation · test)가중치 학습 · 설정 고르기 · 최종 평가에 쓰는 데이터 묶음
데이터 누수(data leakage)평가 데이터의 정보가 학습에 새어 들어가 점수가 부풀려지는 일
혼동 행렬(confusion matrix)예측 × 실제를 네 칸으로 센 표
정확도(accuracy)전체 중 맞힌 비율
정밀도(precision)양성 예측 중 진짜 양성 비율
재현율(recall)진짜 양성 중 찾아낸 비율
F1 점수(F1 score)정밀도와 재현율의 조화 평균
임곗값(threshold)확률을 양성/음성으로 자르는 기준
ROC 곡선임곗값을 바꾸며 그린 FPR–TPR 곡선
AUCROC 곡선 아래 넓이, 양성에 더 높은 점수를 줄 확률
불균형 데이터(imbalanced data)한 클래스가 매우 드문 데이터
과적합 · 과소적합(overfitting · underfitting)학습 데이터에 너무 맞춤 · 너무 못 맞춤
L2 정규화(L2 regularization)가중치 제곱합을 손실에 더하는 벌점, 가중치 감쇠
조기 종료(early stopping)검증 손실이 나빠지기 전에 학습을 멈추기
k-겹 교차 검증(k-fold cross-validation)데이터를 k조각으로 돌아가며 검증하는 방법

더 깊이 보려면

참고 자료 MLCC의 '분류' 모듈은 임곗값과 혼동 행렬, 정확도 · 재현율 · 정밀도와 관련 지표, ROC와 AUC, 예측 편향, 다중 분류, 프로그래밍 실습 순서이고, '데이터셋 · 일반화 · 과적합' 모듈은 데이터 특성 · 라벨 · 불균형 데이터 · 데이터 나누기 · 변환 · 일반화 · 과적합 · 모델 복잡도 · L2 정규화 · 손실 곡선 해석 순서입니다. 손실 곡선 모양별 진단 예를 더 보고 싶다면 '손실 곡선 해석' 페이지가 특히 좋습니다.

다음에 볼 것

라이선스

참고 자료 MLCC 페이지 본문은 별도 표기가 없는 한 CC BY 4.0, 코드 예제는 Apache 2.0 라이선스입니다. 이 글은 원문 번역이 아니라 KAITABASE가 직접 쓴 해설이며, 숫자 예와 손실 기록은 모두 설명용으로 만든 것입니다.

출처

AI 원리부터 이해하기 · 머신러닝 모듈

머신러닝 모듈 학습

이 글은 머신러닝 모듈의 학습 자료입니다. 전체 17개 자료 중 3번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

본문 자체 작성 · 참고 자료 Google MLCC(CC BY 4.0)