[머신러닝/사이킷런] 분류 모델 평가(정확도, 오차행렬, 정밀도, 재현율, F1 Score, ROC AUC)
학습 자료: 파이썬 머신러닝 완벽 가이드(개정2판), 위키북스
1. 정확도(Accuracy)
개요
실제 데이터에서 예측 데이터가 얼마나 같은지를 판단하는 지표
수식
정확도(Accuracy) = (TN + TP) / (TN + FP + FN + TP)
예측 결과가 동일한 데이터 건수 / 전체 예측 데이터 건수
주의할 점
직관적으로 모델 예측 성능을 나타내는 지표이지만, 이진 분류의 경우 모델 구성에 따라 성능을 왜곡할 수 있음
예시) 전체 데이터의 10%만 True, 90%는 False일 경우 모든 예측을 False로만 수행해도 정확도가 0.9가 나옴
특히, 불균형한(imbalanced) 레이블 값 분포에서 성능을 판단할 경우 적합하지 않음
사이킷런
accuracy_score(y_test, pred)
2. 오차 행렬(Confusion matrix, 혼동행렬)
개요
이진 분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표
예측 클래스(Predicted Class) | |||
Negative(0) | Positive(1) | ||
실제 클래스 (Actual Class) |
Negative(0) | TN(True Negative) | FP(False Positive) |
Positive(1) | FN(False Negative) | TP(True Positive) |
형식: 정답여부(True or False) / 예측값(Positive or Negative)
사이킷런
confusion_matrix(y_test, pred)
3. 정밀도(Precision)
개요
예측을 Positive로 한 대상 중 예측과 실제 값이 Positive로 일치한 데이터의 비율
Positive 데이터셋의 예측 성능에 초점을 맞춘 평가 지표
수식
정밀도(Precision) = TP / (FP + TP)
Positive 예측이 정답 / Positive로 예측
특징
정밀도가 상대적으로 더 중요한 지표인 경우는 실제 Negative인 데이터 예측을 Positive로 잘못 판단하면 안되는 경우
예시) 스팸메일 판단 모델(실제 Negative인 일반 메일을 스팸 메일로 분류할 경우 문제가 생김)
정밀도를 높이고 싶다면 FP(False Positive, 음성인데 양성으로 예측하는 경우)를 낮춰야 함
사이킷런
precision_score(y_test, pred)
4. 재현율(Recall)
개요
실제 값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율
Positive 데이터셋의 예측 성능에 초점을 맞춘 평가 지표
= 민감도(Sensitivitiy), TPR(True Positive Rate)
수식
재현율(Recall) = TP / (FN + TP)
Positive 예측이 정답 / Positive가 실제 값
특징
재현율이 상대적으로 더 중요한 지표인 경우는 실제 Positive인 데이터 예측을 Negative로 잘못 판단하면 안되는 경우
예시) 암 판단 모델, 금융 사기 적발 모델(실제 Positive인 암, 금융 사기를 정상으로 판단할 경우 문제가 생김)
재현율을 높이고 싶다면 FN(False Negative, 양성인데 음성으로 예측하는 경우)를 낮춰야 함
사이킷런
recall_score(y_test, pred)
정밀도-재현율 트레이드오프(Trade-off)
업무 특성상 정밀도 또는 재현율이 특별히 강조돼야 할 경우 분류의 결정 임곗값(Threshold)을 조정해 둘 중 하나의 수치를 높일 수 있음
하지만 정밀도와 재현율은 상호 보완적인 평가 지표이기 때문에 어느 한 쪽을 강제로 높이면 다른 하나의 수치는 떨어짐
예시) Threshold를 0.5에서 0.4로 낮추면 Positive 예측이 더 많아지기 때문에, 재현율은 높아지고 정밀도는 낮아진다.
극단적으로 정밀도와 재현율 둘 중 하나의 수치만 참조하면 안 된다.
사이킷런
precision_recall_curve(y_test, probas_pred): 임곗값별 정밀도와 재현율을 나타낸 커브
- probas_pred: Positive 컬럼의 예측 확률 배열
5. F1 Score
개요
정밀도와 재현율을 결합한 지표
정밀도와 재현율이 어느 한 쪽으로 치우치지 않는 수치를 나타낼 때 상대적으로 높은 값을 가짐
수식
예시) 정밀도=0.9, 재현율=0.1일 시 F1 Score=0.18
정밀도=0.5, 재현율=0.5일 시 F1 Score=0.5
사이킷런
f1_score(y_test, pred)
6. ROC-AUC
이진 분류의 예측 성능 측정에서 중요하게 사용되는 지표
ROC(Receiver Operation Characteristic Curve)
FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate)이 어떻게 변하는지를 나타내는 곡선(x=FPR, y=TPR)
TPR(True Positive Rate): 재현율(Recall)=민감도(Sensitivity), TP / (FN + TP)
- 실제값 Positive가 정확히 예측돼야 하는 수준(ex. 질병이 있는 사람은 질병이 있는 것으로 양성 판정)
TNR(True Negative Rate): 특이성(Specificity), TN / (FP + TN)
- 실제값 Negative가 정확히 예측돼야 하는 수준(ex. 질병이 없는 건강한 사람은 질병이 없는 것으로 음성 판정)
FPR(False Positive Rate): FP / (FP + TN) = 1 - TNR = 1 - 특이성
빨간 선: 동전을 무작위로 던져 앞/뒤를 맞추는 랜덤 수준의 이진 분류의 ROC 커브(AUC=0.5)
ROC 커브가 빨간 선에 가까울수록 성능이 떨어지는 것이며, 멀어질수록 성능이 뛰어난 것
사이킷런
roc_curve(y_test, y_score=probas_pred)
- 반환값: fpr, tpr, thresholds(array)
AUC(Area Under Curve)
ROC 커브 밑의 면적을 구한 값. 분류의 성능 지표로 사용됨
AUC 수치가 커지기 위해서는 FPR이 작은 상태에서 얼마나 큰 TPR을 얻을 수 있느냐가 관건
일반적으로 1에 가까울수록 좋은 수치
- AUC = 1.0 : 완벽한 분류기 (이상적인 모델)
- AUC = 0.5 : 무작위 분류기 (동전 던지기 수준)
- AUC < 0.5 : 잘못된 예측을 하고 있음 (모델 성능이 나쁨)
사이킷런
roc_auc_score(y_test, y_score=probas_pred)