CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
  • Week 1
    • 1.ML 수명주기와 ML 엔지니어의 역할
    • 2.ML 문제 유형과 평가 지표 기초
    • 3.AWS ML 스택 한눈에 보기
    • 4.SageMaker 개요: Studio, 학습/추론, 빌트인 알고리즘
    • 5.Week 1 종합 — ML 기초·AWS 스택 복습
  • Week 2
  • Week 3
  • Week 4
  • Week 5
    • 1.커스텀 학습: 스크립트 모드, BYOC, 프레임워크 컨테이너
    • 2.분산 학습: 데이터 병렬과 모델 병렬
    • 3.디버깅과 프로파일링: SageMaker Debugger와 Profiler
    • 4.모델 평가: 지표 선택, 과적합, 교차검증, 혼동행렬
    • 5.Week 5 종합: 모델 개발 2 복습
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← MLA-C01/Week 5/Day 4

기준: MLA-C01 시험 가이드·오류 제보

MLA-C01· AssociateWeek 5 · Day 4읽기 약 12분
핵심 정리
  • 평가의 본질은 "문제에 맞는 지표"로 "일반화 성능"을 재는 것. 숫자 하나(정확도)로 판단하면 속는다.
  • 분류는 혼동행렬에서 출발 — 정밀도는 거짓 경보를 줄일 때, 재현율은 놓치면 안 될 때 본다.
  • 불균형 데이터에서 정확도는 금지. F1·재현율·AUC-PR로 본다. 시험 최다 함정.
  • 회귀는 RMSE(큰 오차에 민감) vs MAE(이상치에 둔감), 설명력은 R².
  • 과적합은 학습-검증 격차로 진단하고, 평가 안정성은 k-fold(불균형=stratified, 시계열=time-series split)로 확보한다.

Day 4 - 모델 평가: 지표 선택, 과적합, 교차검증, 혼동행렬

혼동행렬과 분류 지표

사기 거래가 1%인 데이터에서는 "전부 정상"이라 찍어도 정확도 99%가 나온다. 그래서 분류 평가는 혼동행렬(confusion matrix)에서 출발한다. 이진 분류 기준으로 예측과 실제를 네 칸으로 나눈다.

                  실제 Positive    실제 Negative
예측 Positive       TP (참양성)      FP (거짓양성)
예측 Negative       FN (거짓음성)    TN (참음성)

여기서 핵심 지표가 나온다.

지표공식답하는 질문
정확도 (Accuracy)(TP+TN)/전체전체 중 맞춘 비율
정밀도 (Precision)TP/(TP+FP)양성이라 한 것 중 진짜 양성 비율
재현율 (Recall)TP/(TP+FN)실제 양성 중 잡아낸 비율
F12·P·R/(P+R)정밀도·재현율의 조화평균
  • 핵심 직관: 정밀도는 "거짓 경보를 줄이고 싶을 때", 재현율은 "놓치면 안 될 때" 본다.
  • 스팸 필터는 정상 메일을 스팸으로 잘못 거르면(FP) 곤란하니 정밀도가 중요하다.
  • 암 진단은 환자를 놓치면(FN) 치명적이니 재현율이 중요하다.

숫자로 한 번 계산해 보기

거래 1,000건 중 실제 사기가 20건(2%)인 데이터에서 모델이 15건을 사기라고 예측했고, 그중 12건이 진짜였다고 가정한다.

                  실제 사기(20)    실제 정상(980)
예측 사기(15)        TP = 12          FP = 3
예측 정상(985)       FN = 8           TN = 977
지표계산값읽는 법
정확도(12+977)/10000.989높아 보이지만 의미가 거의 없다
정밀도12/(12+3)0.80사기라고 알린 것 중 80%가 진짜
재현율12/(12+8)0.60실제 사기의 60%만 잡았다 — 8건 놓침
F12×0.8×0.6/(0.8+0.6)≈0.686둘의 균형점

비교 기준: "전부 정상"이라 찍는 모델의 정확도는 0.98이다. 즉 정확도 0.989는 "아무것도 안 하는 모델보다 0.9%p 좋다"는 뜻밖에 안 된다. 반면 재현율 0.60은 실제 개선 폭을 정직하게 보여 준다.

정밀도와 재현율은 본질적으로 트레이드오프 관계다. 분류 임계값을 낮추면 더 많이 양성으로 분류해 재현율은 오르지만 거짓양성도 늘어 정밀도가 떨어진다. 이 곡선 전체를 보는 게 PR 곡선이고, 임계값을 바꿔가며 TPR과 FPR을 그린 게 ROC 곡선이다. AUC(곡선 아래 면적)는 "임의의 양성 샘플이 임의의 음성 샘플보다 높은 점수를 받을 확률"로, 단일 임계값에 묶이지 않은 종합 판별력을 나타낸다.

불균형 데이터에서 지표 선택

정확도가 위험한 이유는 클래스 불균형이다. 사기 1%, 정상 99%인 데이터에서 "전부 정상"으로 찍으면 정확도 99%지만 사기는 하나도 못 잡는 쓸모없는 모델이다.

  • 불균형 데이터: 정확도 대신 F1, AUC(ROC), AUC-PR, 재현율/정밀도를 본다.
  • 양성이 희귀하고 놓치면 안 됨(사기·질병): 재현율 또는 AUC-PR 강조.
  • 거짓 경보 비용이 큼(스팸): 정밀도 강조.

상황별 지표 선택표

시험은 "이 시나리오에서 어떤 지표를 보겠는가"를 반복해 묻는다. 문장 속 비용의 방향을 읽는 것이 요령이다.

상황더 아픈 오류우선 지표
사기 탐지, 희귀 질병 선별FN(놓침)재현율, AUC-PR
스팸 필터, 자동 계정 정지FP(거짓 경보)정밀도
둘 다 비슷하게 아프고 불균형—F1
임계값을 아직 못 정했고 종합 판별력을 보고 싶다—ROC-AUC(균형), AUC-PR(극심한 불균형)
클래스가 여럿이고 소수 클래스도 중요—macro F1
클래스가 여럿이고 전체 건수 기준이 중요—weighted / micro F1

불균형 자체에 손대는 방법

지표만 바꾸는 게 아니라 학습·추론 쪽에서도 손을 쓸 수 있다.

손대는 위치방법주의
데이터소수 클래스 오버샘플링(SMOTE 등), 다수 클래스 언더샘플링분할 이후 학습 세트에만 적용. 검증 세트에 하면 누수
학습클래스 가중치, XGBoost의 scale_pos_weight과도하면 거짓 경보 폭증
추론분류 임계값 조정(0.5 고정 해제)검증 세트에서 정하고 테스트로 확인
import numpy as np
from sklearn.metrics import precision_recall_curve
 
# 검증 세트에서 F1을 최대화하는 임계값 찾기
prec, rec, thr = precision_recall_curve(y_val, y_val_prob)
f1 = 2 * prec * rec / (prec + rec + 1e-12)
best = thr[np.argmax(f1[:-1])]
print("선택한 임계값:", best)
 
y_test_pred = (y_test_prob >= best).astype(int)   # 0.5가 아니라 선택한 값으로

개념: 임계값은 모델이 아니라 운영 정책이다. 대부분의 분류기는 확률을 내놓고, 0.5라는 경계는 그저 관습적 기본값이다. 같은 모델이라도 임계값을 낮추면 재현율이 오르고 정밀도가 떨어진다. 즉 재학습 없이 정밀도-재현율 균형을 바꿀 수 있다. "재현율이 낮으니 모델을 다시 학습해야 한다"는 보기보다 "임계값을 조정한다"가 먼저 검토되는 이유다.

from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score
 
print(confusion_matrix(y_true, y_pred))
print(classification_report(y_true, y_pred))   # precision/recall/f1
print("AUC:", roc_auc_score(y_true, y_prob))    # 확률 기반

⚠️ 함정: 불균형 데이터에서 "정확도 99%"를 모델이 좋다는 근거로 제시하는 보기는 함정이다. 시험에서 "사기/이상/희귀 질병" 같은 키워드가 보이면 정확도가 아니라 F1·재현율·AUC를 골라야 한다. 또한 ROC-AUC는 극심한 불균형에서 낙관적으로 보일 수 있어, 양성이 매우 희귀하면 AUC-PR(정밀도-재현율 곡선)이 더 정직하다.

회귀 지표

회귀(연속값 예측)는 분류와 다른 지표를 쓴다.

지표특징
MAE (평균절대오차)오차 크기 평균. 이상치에 둔감, 해석 직관적
MSE / RMSE제곱오차. 큰 오차에 민감(이상치에 큰 페널티)
R² (결정계수)모델이 설명하는 분산 비율(1에 가까울수록 좋음)
MAPE백분율 오차. 스케일 무관 비교

직관: 큰 오차를 강하게 벌하고 싶으면 RMSE, 이상치 영향을 줄이고 싶으면 MAE. 예측값이 실제값을 얼마나 설명하는지는 R².

숫자로 보면 차이가 분명하다. 5건의 예측 오차가 1, 1, 1, 1, 10이라고 가정한다.

지표계산값
MAE(1+1+1+1+10)/52.8
MSE(1+1+1+1+100)/520.8
RMSE√20.8≈4.56
  • 오차 10짜리 한 건이 MAE에는 10만큼, MSE에는 100만큼 기여한다 → RMSE가 이상치 한 건에 크게 흔들린다.
  • MAPE 주의: 실제값이 0이거나 0에 가까우면 백분율 오차가 폭발한다. 수요가 0인 날이 섞인 데이터에는 부적합하다.
  • R² 주의: 특성을 계속 추가하면 값이 올라가는 성질이 있어, 특성 수가 다른 모델끼리 비교할 때는 조정된 R²를 함께 본다.

RMSE가 MAE보다 이상치에 민감한 건 오차를 제곱하기 때문이다. 오차 10인 한 점은 RMSE에선 100으로, MAE에선 10으로 기여한다. 그래서 큰 오차가 치명적인 문제(예: 수요 예측에서 대량 결품)는 RMSE를, 모든 오차를 균등하게 보고 싶은 문제는 MAE를 쓴다. 이는 손실함수 선택과도 직결된다 — RMSE를 줄이도록 학습하면 모델이 큰 오차를 피하는 쪽으로 치우친다.

과적합과 과소적합

모델 평가의 다른 축은 일반화다. 학습 데이터에만 잘 맞고 새 데이터에서 무너지면 과적합(overfitting)이다.

상태학습 성능검증/테스트 성능진단
과소적합 (underfit)낮음낮음모델이 너무 단순/덜 학습 (high bias)
적합높음높음균형
과적합 (overfit)매우 높음낮음모델이 학습 데이터를 외움 (high variance)

진단: 학습 성능은 좋은데 검증 성능이 나쁘고 둘의 격차가 크면 과적합. 둘 다 나쁘면 과소적합.

학습 곡선으로 보면 세 상태가 한눈에 갈린다.

과소적합·적합·과적합 세 경우의 학습 손실과 검증 손실 곡선 비교

  • 검증 손실이 바닥을 찍고 다시 올라가는 지점이 조기 종료(early stopping)의 기준점이다.
  • 학습·검증이 둘 다 높은 채로 평평하면 모델을 키우거나 더 학습시켜야 한다(과소적합).

과적합 완화:

  • 더 많은 데이터, 데이터 증강
  • 정규화(L1/L2), 드롭아웃
  • 모델 복잡도 축소, 조기 종료(early stopping)
  • 특성 수 줄이기

과소적합 완화:

  • 모델 복잡도 증가, 더 오래 학습
  • 더 나은 특성 추가, 정규화 완화

한 팀이 이미지 분류 모델을 학습했더니 학습 정확도 99%, 검증 정확도 70%로 큰 격차가 났다. 전형적 과적합. 데이터 증강(회전·플립)과 드롭아웃을 추가하고 조기 종료를 걸자 학습 95%/검증 91%로 격차가 줄며 일반화가 좋아졌다. 교훈: 학습-검증 격차가 과적합의 핵심 신호이고, 정규화·증강·조기 종료가 표준 처방이다.

교차검증

검증 세트를 한 번만 나누면 그 분할의 운에 따라 평가가 흔들린다. k-fold 교차검증은 데이터를 k조각으로 나눠, 각 조각을 한 번씩 검증으로 쓰고 나머지로 학습한 뒤 k개 성능을 평균한다. 데이터가 적을 때 특히 안정적인 평가를 준다.

k=5 예시:
Fold1: [검증][학습][학습][학습][학습]
Fold2: [학습][검증][학습][학습][학습]
...    → 5번 학습/평가 후 평균
  • Stratified k-fold: 각 fold가 클래스 비율을 유지 — 불균형 분류에 중요.
  • 시계열 데이터: 미래로 검증하는 time-series split(과거→미래 순서 유지)을 써야 미래 누수를 막는다. 무작위 k-fold는 시계열에 부적합.
from sklearn.model_selection import StratifiedKFold, TimeSeriesSplit, cross_val_score
 
# 불균형 분류: fold마다 클래스 비율 유지
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
print(cross_val_score(model, X, y, cv=cv, scoring='f1').mean())
 
# 시계열: 항상 과거로 학습하고 미래로 검증
tscv = TimeSeriesSplit(n_splits=5)
print(cross_val_score(model, X, y, cv=tscv, scoring='neg_root_mean_squared_error').mean())

교차검증의 가치는 평가 분산을 줄이는 데 있다. 한 번의 train/test 분할은 그 분할에 운이 따른 추정치(고분산)다. k-fold는 여러 분할의 평균을 내 추정의 분산을 낮추고, 데이터를 학습·검증에 모두 활용해 적은 데이터를 효율적으로 쓴다. 다만 k가 클수록 학습을 k번 반복해 비용이 늘고, 시계열처럼 순서가 의미 있는 데이터에선 무작위 분할이 미래 정보를 흘려 평가를 부풀린다는 점을 주의한다.

평가를 조용히 망치는 데이터 누수

"검증 점수는 훌륭한데 운영에서 무너진다"의 대부분은 과적합이 아니라 누수(leakage)다. 지표 선택보다 먼저 의심해야 하는 항목이다.

증상원인조치
검증 정확도가 비현실적으로 높다(0.99+)정답에서 파생된 특성이 섞임(타깃 누수)특성 생성 시점을 예측 시점 기준으로 재정의
교차검증은 좋은데 운영 성능이 급락전체 데이터로 스케일러·인코더를 먼저 학습(fit)분할 이후 학습 fold에서만 fit, 검증엔 transform만
시계열 모델이 백테스트에서만 잘 맞음무작위 k-fold로 미래 데이터가 학습에 포함time-series split으로 순서 유지
같은 고객·환자의 기록이 학습·검증에 나뉘어 들어감그룹 누수그룹 단위 분할(같은 개체는 한쪽에만)
오버샘플링 후 점수가 급등검증 세트까지 오버샘플링해 중복 샘플이 양쪽에 존재분할 → 학습 세트에만 리샘플링

⚠️ 함정: 전처리(정규화·결측 대치·인코딩)를 분할 전에 전체 데이터로 수행하는 코드는 시험에서 오답 보기로 쓰이기 쉽다. 검증 세트의 분포 정보가 학습에 흘러들어 평가가 낙관적으로 부풀기 때문이다. 정답은 언제나 "분할 먼저, 전처리는 학습 세트 기준으로 학습해 검증에 적용".

어떻게 고르는가

문제 유형은?
 ├─ 분류
 │    ├─ 클래스 균형        → 정확도도 가능, 필요시 F1
 │    └─ 클래스 불균형       → 정확도 금지
 │         ├─ 놓치면 안 됨    → 재현율 · AUC-PR
 │         ├─ 거짓 경보 비쌈  → 정밀도
 │         └─ 균형이 필요     → F1  (+ 임계값 조정으로 미세 조절)
 └─ 회귀
      ├─ 큰 오차가 치명적     → RMSE
      ├─ 이상치가 많다        → MAE
      └─ 설명력 비교          → R² (특성 수 다르면 조정된 R²)
 
평가 절차는?
 ├─ 데이터가 적다            → k-fold  (불균형=stratified, 시계열=time-series split)
 ├─ 학습-검증 격차가 크다     → 과적합 → 정규화·증강·조기 종료
 └─ 점수가 비현실적으로 높다   → 먼저 누수를 의심한다

다음 글에서는 Week 5 전체 — 커스텀 학습, 분산 학습, 디버깅·프로파일링, 평가 —를 묶어 복습한다.

📖 용어

  • 혼동행렬 (TP / FP / FN / TN) : 예측과 실제를 맞음/틀림으로 네 칸에 정리한 표로, 모든 분류 지표가 여기서 나온다. 네 칸은 각각 맞게 잡은 양성(TP), 잘못 잡은 양성(FP, 거짓 경보), 놓친 양성(FN), 맞게 넘긴 음성(TN)이다.
  • 정밀도(Precision) : "양성이라고 알린 것 중 진짜는 몇 %인가". 거짓 경보를 줄이고 싶을 때 본다.
  • 재현율(Recall) : "실제 양성 중 몇 %를 잡았는가". 놓치면 안 될 때 본다.
  • F1 : 정밀도와 재현율의 조화평균. 한쪽만 높아도 점수가 잘 안 오른다.
  • ROC-AUC / AUC-PR : ROC-AUC는 임계값을 바꿔 가며 그린 곡선의 아래 면적으로 임계값에 묶이지 않은 종합 판별력을 뜻한다. AUC-PR은 정밀도-재현율 곡선의 면적으로, 양성이 매우 드물 때 ROC-AUC보다 정직하다.
  • 임계값(threshold) : 확률을 양성/음성으로 자르는 경계. 기본 0.5는 관습일 뿐 조정 가능한 운영 값이다.
  • 과적합 / 과소적합 : 학습 데이터를 외워 새 데이터에서 무너지는 상태 / 아직 충분히 배우지 못한 상태.
  • 조기 종료(early stopping) : 검증 성능이 더 나빠지기 시작하면 학습을 멈추는 것.
  • k-fold 교차검증 : 데이터를 k조각으로 나눠 번갈아 검증하고 결과를 평균해 평가를 안정시키는 방법.
  • 데이터 누수(leakage) : 평가 시점에 알 수 없어야 할 정보가 학습에 섞여 점수가 부풀려지는 현상.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

사기 거래가 전체의 1%인 매우 불균형한 데이터셋에서 모델을 평가한다. 모델 성능을 판단하는 지표로 가장 부적절한 것은?

문제 2

암 검진 모델에서 실제 환자를 놓치는 것(거짓음성)이 가장 위험하다. 우선적으로 높여야 할 지표는?

문제 3

모델의 학습 정확도는 99%인데 검증 정확도는 70%로 둘의 격차가 크다. 진단과 적절한 완화책은?

문제 4

회귀 모델에서 드물게 발생하는 큰 예측 오차에 강한 페널티를 주어 큰 오차를 피하도록 평가·최적화하려 한다. 적합한 지표는?

문제 5

데이터가 적어 단일 train/test 분할의 평가가 분할 운에 따라 크게 흔들린다. 안정적 평가를 위한 방법은?

이전디버깅과 프로파일링: SageMaker Debugger와 ProfilerWeek 5 · Day 3다음 Week 5 종합: 모델 개발 2 복습Week 5 · Day 5

참고 공식 자료

  • MLA-C01 공식 시험 안내(새 탭에서 열림)

이 페이지

  • 혼동행렬과 분류 지표
  • 숫자로 한 번 계산해 보기
  • 불균형 데이터에서 지표 선택
  • 상황별 지표 선택표
  • 불균형 자체에 손대는 방법
  • 회귀 지표
  • 과적합과 과소적합
  • 교차검증
  • 평가를 조용히 망치는 데이터 누수
  • 어떻게 고르는가
  • 용어
  • 연습 문제