-
목차
✅ 머신러닝 모델 평가는 왜 중요한가?
머신러닝 모델을 개발하고 학습시킨 후, 그 성능을 어떻게 평가할 수 있을까요?
단순히 모델의 예측 결과와 실제 값을 비교해 '정답률'을 보는 것이 가장 쉬운 방법이지만, 이것만으로는 모델의 성능을 완전히 설명할 수 없습니다.특히, 데이터가 불균형할 때 단순한 정확도는 모델의 품질을 왜곡할 수 있습니다. 예를 들어, 실제 환자의 비율이 전체의 1%에 불과한 의료 진단 데이터에서 모두 "정상"이라고 예측하면 99% 정확도가 나올 수 있지만, 이는 결코 좋은 모델이 아닙니다.
따라서, 머신러닝에서의 모델 평가는 다양한 정량적 지표를 통해 다각도로 이루어져야 하며, 이 글에서는 그 중에서도 가장 핵심적인 세 가지 — 정확도(Accuracy), 정밀도(Precision), 재현율(Recall) 에 대해 자세히 설명합니다.
📊 정확도(Accuracy)란?
정확도는 가장 기본적이고 직관적인 평가 지표입니다.
전체 예측 중에서 실제로 맞춘 예측의 비율을 의미합니다.정의:
정확도 = (정답으로 예측한 수) / (전체 예측 수) = (TP + TN) / (TP + TN + FP + FN)
- TP: True Positive (정답을 맞춘 긍정 예측)
- TN: True Negative (정답을 맞춘 부정 예측)
- FP: False Positive (틀린 긍정 예측)
- FN: False Negative (틀린 부정 예측)
정확도의 장점
- 전체 예측 성능을 단순하게 측정할 수 있음
- 이진 분류 문제에서 직관적인 해석 가능
정확도의 단점
- 클래스 불균형 문제에 취약
예: 스팸 메일이 1%인 데이터에서 모두 "일반 메일"이라고 예측해도 99% 정확도가 나올 수 있음
🎯 정밀도(Precision)란?
정밀도는 모델이 긍정 클래스라고 예측한 것들 중에서 실제로 맞은 비율을 의미합니다.
정의:
정밀도 = TP / (TP + FP)
즉, 내가 맞췄다고 주장한 것들 중 실제로 얼마나 맞았는가? 를 의미합니다.
정밀도가 중요한 사례
- 스팸 필터링: 스팸 메일로 잘못 판단하면 중요한 메일을 놓칠 수 있음
- 금융 사기 탐지: 사기라고 예측한 것들 중 진짜 사기인지를 정확히 판단하는 것이 중요
정밀도는 False Positive를 줄이고 싶은 경우에 중시되는 지표입니다.
🔍 재현율(Recall)이란?
재현율은 실제 긍정 클래스 중에서 모델이 얼마나 많이 맞췄는가를 보여주는 지표입니다.
정의:
재현율 = TP / (TP + FN)
즉, 놓치지 않고 잘 찾아냈는가? 라는 관점의 지표입니다.
재현율이 중요한 사례
- 질병 진단: 병을 놓치면 생명이 위험할 수 있기 때문에 재현율이 매우 중요
- 보안 침해 탐지: 이상행위를 최대한 많이 탐지해야 함
재현율은 False Negative를 줄이고 싶은 경우에 중시되는 지표입니다.
⚖️ 정밀도 vs 재현율: 트레이드오프 관계
정밀도와 재현율은 일반적으로 서로 반비례 관계를 가집니다.
즉, 정밀도를 높이면 재현율이 떨어질 수 있고, 반대도 마찬가지입니다.예:
- 정밀도를 높이기 위해 엄격한 기준으로만 '긍정'을 판단하면, 놓치는 경우(FN)가 많아져 재현율이 떨어질 수 있습니다.
- 반대로 재현율을 높이기 위해 널리 '긍정'으로 예측하면, 잘못된 판단(FP)이 많아져 정밀도가 낮아질 수 있습니다.
따라서 어떤 지표에 우선순위를 둘지는 문제의 특성과 위험도에 따라 결정되어야 합니다.
🧠 F1 Score: 정밀도와 재현율의 조화
정밀도와 재현율을 균형 있게 고려하기 위해 사용되는 지표가 바로 F1 Score입니다.
정의:
F1 Score = 2 * (정밀도 * 재현율) / (정밀도 + 재현율)
F1 Score는 정밀도와 재현율이 모두 높은 경우에만 높은 값을 가지므로, 모델의 전반적인 분류 성능을 평가하는 데 매우 유용합니다.
🧪 실습 예시 (사이킷런)
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # 데이터 로드 data = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3, random_state=42) # 모델 학습 model = RandomForestClassifier() model.fit(X_train, y_train) y_pred = model.predict(X_test) # 평가 지표 출력 print(f'정확도: {accuracy_score(y_test, y_pred):.4f}') print(f'정밀도: {precision_score(y_test, y_pred):.4f}') print(f'재현율: {recall_score(y_test, y_pred):.4f}') print(f'F1 Score: {f1_score(y_test, y_pred):.4f}')
이 코드는 유방암 진단 데이터를 활용하여 랜덤 포레스트 분류기의 평가 지표를 출력하는 예시입니다.
정확도, 정밀도, 재현율, F1 Score를 모두 확인할 수 있어 모델 평가에 매우 유용합니다.
⚙️ 어떤 지표를 선택할 것인가?
문제 유형 중시해야 할 지표 의료 진단, 보안 탐지 재현율 스팸 필터링, 금융 사기 탐지 정밀도 균형 잡힌 일반 분류 F1 Score, 정확도 모델 성능을 단순히 하나의 숫자로 평가하지 않고, 문제 도메인에 맞는 지표를 선택해야 진정한 성능을 파악할 수 있습니다.
📌 결론: 다양한 지표의 조합이 중요하다
머신러닝 모델의 평가는 단일 지표로 끝나지 않습니다.
정확도는 전체적인 퍼포먼스를 보여주지만, 정밀도와 재현율은 모델의 세밀한 판단 능력을 설명합니다.그리고 이 둘의 균형이 필요할 때는 F1 Score를 사용해 판단할 수 있습니다.
모델을 평가할 때는 항상 데이터의 특성과 문제의 본질을 고려하여, 적절한 지표를 선택하고, 필요시 여러 지표를 종합적으로 활용하는 것이 바람직합니다.
❓ FAQ
Q1. 정밀도와 재현율을 둘 다 높이는 건 불가능한가요?
→ 이상적인 모델이라면 가능합니다. 그러나 대부분의 현실 문제에서는 하나를 높이면 다른 하나가 낮아지는 경향이 있습니다.
Q2. 불균형 데이터셋에서는 어떤 지표가 더 적절한가요?
→ 재현율이나 F1 Score가 더 유의미합니다. 정확도는 착시를 줄 수 있으므로 주의해야 합니다.
Q3. 다중 클래스 분류에서는 어떻게 평가하나요?
→ 각 클래스별 정밀도/재현율을 구한 후, 평균 방식(macro/micro/weighted)을 통해 전체 성능을 평가합니다.
'기술 가이드' 카테고리의 다른 글
딥러닝이란 무엇인가? 기본 개념과 역사 (1) 2025.05.14 머신러닝 파이프라인 구축 방법론: 실전 중심 가이드 (0) 2025.05.13 교차 검증(Cross-Validation)의 개념과 실습 (0) 2025.05.12 머신러닝에서의 하이퍼파라미터 튜닝 전략 (1) 2025.05.12 차원 축소 기법: PCA와 t-SNE 비교 (0) 2025.05.11