머신러닝 모델을 만들었는데,
"정확도가 90%인데도 결과가 이상해요."
"이 문제는 accuracy보다 recall이 중요하지 않나요?"
"roc_auc_score는 무슨 뜻이죠?"
이런 질문들, 한 번쯤 들어보셨을 거예요.
오늘은 머신러닝과 딥러닝 모델을 만들 때 반드시 알아야 하는
모델 평가 지표(Metric)에 대해 제대로 정리해볼게요.
특히 accuracy_score
, roc_auc_score
, r2_score
, mean_squared_error
등
각 지표가 분류(Classification)와 회귀(Regression) 중 어디에 쓰이는지를 중심으로 설명드릴게요.
왜 평가 지표가 중요할까?
우리는 모델을 학습시키고 난 뒤 반드시 평가해야 합니다.
모델이 얼마나 잘 맞췄는지, 실제 상황에서 유용한지를 판단해야 하기 때문이죠.
이때 사용하는 수치화된 기준이 바로 평가 지표(metric)입니다.
하지만!
모델의 종류(분류 or 회귀)에 따라 지표도 달라져야 합니다.
잘못된 지표를 사용하면 성능을 왜곡되게 판단할 수 있어요.
모델 유형에 따라 사용하는 지표가 다르다
1. 분류(Classification) 모델
결과가 카테고리(클래스) 중 하나로 나오는 문제
예: 스팸 메일인지 아닌지, 고양이/강아지 구분, 질병 유무 판단 등
2. 회귀(Regression) 모델
결과가 연속적인 숫자로 나오는 문제
예: 내일 기온 예측, 주가 예측, 집값 예측 등
분류 모델에서 자주 쓰는 평가 지표
지표 이름 | 설명 | 사용 예시 |
---|---|---|
accuracy_score | 전체 예측 중 맞춘 비율 | 클래스 간 데이터 비율이 비슷할 때 |
precision_score | 양성이라고 예측한 것 중 실제 양성의 비율 | 스팸 필터, 암 진단에서 "양성 예측"의 정확도가 중요할 때 |
recall_score | 실제 양성 중에서 모델이 양성이라고 맞춘 비율 | 암 진단 등에서 "진짜 양성"을 놓치면 안 되는 경우 |
f1_score | precision과 recall의 조화 평균 | 둘 다 중요할 때 |
roc_auc_score | 이진 분류에서 모델이 양성/음성을 얼마나 잘 구분하는지 | 클래스 불균형 문제에 강함 |
confusion_matrix | TP, FP, TN, FN 등 모든 경우의 수를 표로 표현 | 분류 성능을 시각적으로 파악할 때 유용 |
예를 들어, 질병 예측에서는 recall
이 중요한 이유는?
진짜 환자를 놓치면 안 되기 때문입니다.
반대로 스팸 필터는 precision
이 중요하죠.
정상 메일을 스팸으로 분류하면 큰일이니까요.
회귀 모델에서 자주 쓰는 평가 지표
지표 이름 | 설명 | 사용 예시 |
---|---|---|
mean_squared_error (MSE) | 예측값과 실제값의 차이를 제곱한 평균 | 예측 오차를 크게 벌점 주고 싶을 때 |
mean_absolute_error (MAE) | 예측값과 실제값의 절대값 평균 | 이상치(outlier)에 덜 민감한 평가 |
r2_score (결정 계수) | 예측값이 실제값을 얼마나 잘 설명하는지 (1에 가까울수록 좋음) | 모델 전체 설명력 판단 |
mean_squared_log_error (MSLE) | 로그로 변환한 후 MSE를 계산 | 예측값이 작고 음수 예측이 없는 경우 |
huber loss | MAE + MSE의 하이브리드 | 안정적인 회귀 평가가 필요할 때 |
어떤 지표를 써야 할까? (요약표)
지표 | 분류 | 회귀 |
---|---|---|
accuracy_score |
✅ | ❌ |
roc_auc_score |
✅ | ❌ |
precision_score |
✅ | ❌ |
recall_score |
✅ | ❌ |
f1_score |
✅ | ❌ |
r2_score |
❌ | ✅ |
mean_squared_error |
❌ | ✅ |
mean_absolute_error |
❌ | ✅ |
실전에서 지표를 고르는 팁
- 데이터 불균형 문제가 있으면
accuracy
는 피하자. →f1_score
,roc_auc_score
추천 - 양성 클래스 놓치면 안 되는 경우 →
recall_score
중시 - 정확히 양성만 잘 맞춰야 하는 경우 →
precision_score
중요 - 회귀 문제에서 이상치가 많다면? →
MAE
또는Huber Loss
사용 - 모델의 전체적인 설명력을 알고 싶다면? →
r2_score
실습 예시 (Scikit-learn 기준)
from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_auc_score, r2_score, mean_squared_error
# 분류 예시
y_true = [0, 1, 1, 0]
y_pred = [0, 1, 0, 0]
print(accuracy_score(y_true, y_pred)) # 0.75
print(precision_score(y_true, y_pred)) # 1.0
print(recall_score(y_true, y_pred)) # 0.5
# 회귀 예시
y_true_reg = [3.0, -0.5, 2.0, 7.0]
y_pred_reg = [2.5, 0.0, 2.0, 8.0]
print(mean_squared_error(y_true_reg, y_pred_reg)) # 0.375
print(r2_score(y_true_reg, y_pred_reg)) # 0.948
마무리
모델을 잘 학습시키는 것도 중요하지만,
올바른 평가 지표를 선택하는 것이야말로
정말 "좋은 모델"을 만들기 위한 마지막 관문이에요.
같은 accuracy
90%라도,
어떤 문제에서는 훌륭한 결과일 수 있지만,
어떤 문제에서는 위험한 착각일 수 있습니다.
모델 종류에 따라 적절한 지표를 골라 사용하고,
그 지표가 말하는 의미를 잘 해석할 수 있어야
진짜 의미 있는 AI 모델을 만들 수 있습니다
'AI > Machine Learning' 카테고리의 다른 글
머신러닝에서 L1, L2 규제 (0) | 2025.04.13 |
---|---|
원핫 인코딩(One-Hot Encoding) (1) | 2025.04.13 |
머신러닝에서의 정규화(Regularization) (0) | 2025.04.09 |
데이터 변환 (0) | 2025.04.08 |
로그(log)와 지수(exp)의 관계 (1) | 2025.04.08 |