티스토리 뷰

반응형

머신러닝 기초학습 5: 모델 평가와 일반화 — 과적합을 피하고 진짜 실력을 확인하는 법


“모델이 훈련 데이터에서 99% 정확도!”

처음엔 신나죠. 그런데 새로운 데이터에서는 65%로 떨어진다면?

그건 모델이 똑똑한 게 아니라 외운 것입니다.

이번 글에서는 머신러닝의 마지막 관문이자 가장 중요한 주제,
모델 평가(Evaluation)일반화(Generalization) 에 대해 이야기합니다.
즉, “모델이 진짜로 잘하는지”를 수학적으로 검증하는 법입니다.


1. 왜 평가가 중요한가?

훈련 성능만 보면 좋은 모델처럼 보이지만,
그건 시험지를 외운 학생과 다를 바 없습니다.

머신러닝의 목표는 “본 적 없는 데이터에서도 좋은 성능을 내는 것”
즉, 일반화(generalization) 입니다.

이를 확인하기 위해 데이터를 세 부분으로 나눕니다.

구분 용도 설명

Train Set 학습 모델이 패턴을 배우는 데이터
Validation Set 검증 모델 튜닝(하이퍼파라미터 선택)
Test Set 평가 최종 성능 측정용, 절대 사용 금지

2. 과적합 vs 과소적합

구분 설명 비유

과적합 (Overfitting) 훈련 데이터에만 과하게 맞춤 기출만 외운 학생
과소적합 (Underfitting) 패턴을 충분히 못 배움 공부 안 한 학생

균형점을 찾는 것이 핵심입니다.


3. 교차검증 (Cross Validation)

“데이터를 나눠서 여러 번 평가해 평균을 낸다.”

하나의 테스트셋만으로는 운이 작용할 수 있습니다.
그래서 K-Fold Cross Validation 을 사용합니다.

Fold 설명

데이터를 K조각으로 나눔  
K-1개로 학습, 1개로 검증  
이를 K번 반복해 평균 성능 계산  
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=300)
scores = cross_val_score(model, X, y, cv=5)
print("평균 정확도:", scores.mean())

4. 평가 지표 (Metrics)

반응형

4.1 분류(Classification)

지표 의미 공식

Accuracy 전체 중 맞춘 비율 (TP + TN) / (전체)
Precision 예측 중 실제 정답 비율 TP / (TP + FP)
Recall (재현율) 실제 정답 중 맞춘 비율 TP / (TP + FN)
F1 Score Precision & Recall의 조화평균 2PR / (P+R)

👉 Accuracy는 데이터 불균형일 때 신뢰하기 어렵습니다.
예: 사기 1%, 정상 99% 데이터에서 ‘전부 정상’이라고만 해도 99% 정확도!


4.2 ROC & AUC

  • ROC Curve: 모델의 민감도(True Positive Rate) vs 거짓양성률(False Positive Rate)
  • AUC (Area Under Curve): ROC 곡선 아래 면적 (1에 가까울수록 좋음)
from sklearn.metrics import roc_auc_score
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=1000, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
probs = model.predict_proba(X_test)[:,1]
print("AUC:", roc_auc_score(y_test, probs))

4.3 회귀(Regression)

지표 의미 낮을수록 좋음

MSE (Mean Squared Error) 오차 제곱의 평균
RMSE (Root MSE) MSE의 제곱근, 단위 복원
MAE (Mean Absolute Error) 절댓값 오차 평균
R² (결정계수) 1이면 완벽한 예측 ❌ (높을수록 좋음)
from sklearn.metrics import mean_squared_error, r2_score
y_true = [3, 5, 2.5, 7]
y_pred = [2.8, 4.9, 3.0, 6.8]
print("MSE:", mean_squared_error(y_true, y_pred))
print("R²:", r2_score(y_true, y_pred))

5. 혼동 행렬 (Confusion Matrix)

“모델의 판단을 한눈에 보는 표.”

실제 / 예측 긍정(1) 부정(0)

긍정(1) True Positive (TP) False Negative (FN)
부정(0) False Positive (FP) True Negative (TN)
from sklearn.metrics import confusion_matrix
y_true = [1,0,1,1,0,0,1]
y_pred = [1,0,1,0,0,1,1]
print(confusion_matrix(y_true, y_pred))

6. 정규화 (Regularization) — 과적합 방지의 핵심

“모델이 복잡해질수록 벌점을 주자.”

종류 설명 효과

L1 정규화 가중치의 절댓값을 벌점으로 일부 피처 제거 (희소화)
L2 정규화 가중치의 제곱을 벌점으로 과적합 억제 (가중치 작게)

로지스틱 회귀, 선형회귀, SVM 등 거의 모든 모델에 내장되어 있습니다.


7. Dropout, Early Stopping (딥러닝용)

기법 의미

Dropout 학습 중 일부 뉴런을 무작위로 끔 → 과적합 방지
Early Stopping 검증 손실이 오르기 시작하면 학습 조기 종료

8. Bias–Variance Tradeoff

“단순하면 편향(bias)이 크고, 복잡하면 분산(variance)이 크다.”

모델 복잡도 Bias Variance 예시

너무 단순 선형회귀 (Underfitting)
너무 복잡 딥러닝 과적합
적절한 균형 정규화된 모델

일반화 성능이 가장 좋은 지점은 이 두 요소가 교차하는 구간입니다.


9. 모델 선택 (Model Selection)

  1. Baseline 설정: 단순한 모델(로지스틱/선형회귀)부터 시작
  2. 교차검증: 성능 안정성 확인
  3. 정규화/드롭아웃 적용: 과적합 억제
  4. 앙상블: 여러 모델 평균 (랜덤포레스트, 부스팅)
  5. 테스트셋으로 최종 점검: 단 한 번만!

10. 실전 예제 — 교차검증 + 정규화 + 평가

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)

model = LogisticRegression(max_iter=300, penalty='l2', C=1.0)
scores = cross_val_score(model, X, y, cv=5, scoring='f1')
print("평균 F1 점수:", scores.mean())

11. 핵심 정리

개념 설명

일반화(Generalization) 새 데이터에 대한 성능
교차검증(CV) 데이터 분할 반복으로 신뢰성 확보
정규화(Regularization) 과적합 억제
평가지표(Metrics) 문제 유형에 맞게 선택
Bias–Variance Tradeoff 단순함과 복잡함의 균형

🧭 결론

좋은 머신러닝 모델은 단순히 높은 정확도를 자랑하지 않습니다.
그보다는 “새로운 상황에서도 무너지지 않는 모델”이어야 합니다.

정확도 95%보다, 일반화된 85%가 낫다.
이게 머신러닝의 철학입니다.


📘 다음 글 예고

👉 머신러닝 기초학습 6: 하이퍼파라미터 튜닝과 모델 최적화 — 그리드서치, 랜덤서치, 베이지안 최적화의 세계

모델을 1~2% 더 끌어올리는 “튜닝의 기술”로 넘어가 봅시다.
하이퍼파라미터 탐색, 교차검증, 자동 최적화(AutoML)까지 다룹니다.



머신러닝,AI기초,모델평가,일반화,교차검증,정규화,과적합,평가지표,ROC,AUC

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함
반응형