[머신러닝] 머신러닝 모델 성능평가지표(Evaluation Metrics)
머신러닝 모델은 여러가지 방법으로 예측 성능을 평가할 수 있는데 성능평가지표(Evaluation Metrics)는 일반적으로 모델이 분류인지 회귀인지에 따라 나뉩니다.
회귀의 경우 대부분 실제값과 예측값 사이의 오차 평균값에 기반합니다.
분류의 경우에도 일반적으로는 실제 결과 데이토와 예측 결과 데이터가 얼마나 정확하고 오류가 적게 발생하는가에 기반하지만, 단순하게 이러한 정확도만 가지고 판단했다가는 잘못된 평가를 내릴 수 있습니다.
특히, 0과 1로 나뉘는 이진 분류의 성능평가지표는 정확도보다 다른 성능평가 지표가 더 중요시되는 경우가 많습니다.
분류의 성능 평가 지표
- 정확도 (Accuracy)
- 오차행렬(ConfusionMatrix)
- 정밀도(Precision)
- 재현율(Recall)
- F1 Score
- ROC AUC
가 있습니다
정확도 (Accuracy)
실제 데이터와 예측 데이터가 얼마나 같은지를 판단하는 지표
정확도(Accuracy) = 예측 결과가 동일한 데이터 건수 / 전체 예측 데이터 건수
정확도는 직관적인 모델의 예측성능을 나타내는 평가지표입니다.
하지만 이진분류는 데이터에 따라 ML모델의 성능을 왜곡할 수 있어 정확도만 가지고 성능을 평가하지는 않습니다.
불균형한(inbalanced) 레이블 값 분포에서 ML모델의 성능을 판단할 경우 적합하지 않습니다.
예를 들어 100개의 데이터 중 90개가 0, 10개가 1 이라면 무조건 0으로 예측 결과를 반환하는 ML모델이라도 정확도는 90%가 됩니다.
이러한 한계점을 극복하기 위해서는 여러 분류 지표와 함께 평가가 이루어져야 합니다.
오차행렬 (Confusion Matrix)
학습된 분류 모델이 예측을 수행하면서 얼마나 혼동(Confusion)하고 있는지 보여주는 지표
이진 분류의 예측 오류가 얼마인지와 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타냅니다.
4분면 행렬에서 어디에 매핑되는지에 따라 TN,TP,FN,FP로 결정됩니다.
TN은 True Negative로 실제 값과 예측값이 같은 경우이고 그 값은 0 입니다.
즉 True/False는 실제값과 예측값이 같은가/틀린가를 의미하며,
Negative/Positive는 예측값이 부정인지 긍정인지를 의미합니다.
- TN : 실제값 - Negative(0) / 예측값 - Negative(0) [0,0]
- FP : 실제값 - Negative(0) / 예측값 - Positive(1) [0,1]
- FN : 실제값 - Positive(1) / 예측값 - Negative(0) [1,0]
- TP : 실제값 - Positive(1) / 예측값 - Positive(1) [1,1]
사이킷런은 confusion_matrix() API를 제공합니다.
출력된 값은 ndarray로 변환되며 각 array의 값은 위목록과 같습니다.
정확도 = 예측 결과와 실제 값이 동일한 건수 / 전체 데이터 수 = (TN+TP)/(TN+FP+FN+TP)
일반적으로 이진 분류 모델에서는 많은 데이터 중에서 중점적으로 찾아야 하는 매우 적은 수의 결과값에 Positive를 설정해 1을 부여하고, 그렇지 않은 경우 Negative 0을 부여합니다.
이런 경우, Positive 데이터의 건수가 매우 적어 데이터에 기반한 ML알고리즘은 Positive보다는 Negative로 예측 정확도가 높아지는 경향이 발생합니다. 결과적으로 정확도 지표는 비대칭한 데이터셋에서 Positive에 대한 예측 정확도를 판단하지 못한 채 Negative에 대한 예측 정확도만으로도 매우 높은 정확도가 나타나 수치적 판단 오류를 일으킵니다.
TN, TP, FN, FP 값은 Classifier 성능을 판단하는데 필요한 여러 기반 정보를 제공합니다. 이 값들을 조합해 Classifier의 성능을 측정할 수 있는 정확도(Accuracy), 정밀도(Precision), 재현율(Recall) 값을 알 수 있습니다.
특히, 정확도(Accuracy)는 예측값과 실제 값이 얼마나 동일한가에 대한 비율로 결정됩니다.
정밀도 (Precision), 재현율 (Recall)
정밀도와 재현율은 Positive 데이터셋의 예측 성능에 좀 더 초점을 맞춘 평가 지표입니다.
정밀도 = TP / (FP + TP)
재현율 = TP / (FN + TP)
두 지표가 모두 중요하긴 하지만 정밀도와 재현율의 중요성은 비즈니스 특성에 따라 달라질 수 있습니다.
정밀도는 예측을 Positive로 한 대상 중 실제값도 Positive로 일치한 데이터의 비율을 뜻합니다.
Positive 예측 성능을 더욱 정밀하게 측정하기 위한 평가지표로 양성 예측도 라고도 부릅니다.
-
정밀도가 중요 지표인 경우 : 실제값이 Negative인데 예측을 Positive로 잘못 했을 시 큰 문제가 되는 경우
예) 스팸메일 여부 적발 모델
재현율은 실제값이 Positive인 대상 중 예측 또한 Positive로 일치한 데이터의 비율을 뜻합니다.
이를 민감도(Sensitivity) 또는 TPR(True Positive Rate)라고 도 부릅니다.
-
재현율이 중요 지표인 경우 : 실제값이 Positive인데 예측을 Negative로 잘못 했을시 큰 문제가 되는 경우
예) 암환자 예측 모델 또는 보험사기와 같은 금융사기 적발 모델
가장 좋은 것은 두 지표 모두 높은 수치를 얻는 것이며, 어느 한 지표만 매우 높은 결과를 나타내는 것은 바람직하지 않습니다.
정밀도/재현율 트레이드오프
분류하려는 업무 특성상 정밀도나 재현율이 특별히 강조되어야 할 경우 분류의 결정 임계값(Threshold)을 조정해 정밀도나 재현율의 수치를 높일 수 있습니다. 그러나 정밀도와 재현율은 상호 보완적 평가 지표이므로 한쪽을 강제로 높이면 다른 한쪽은 떨어지기 쉽습니다. 이를 정밀도/재현율의 트레이드오프(Trade-off)라고 부릅니다.
사이킷런의 분류 알고리즘은 예측데이터가 특정 레이블에 속하는지 계산하기 위해 각각의 결정 확률을 구합니다. 그런다음 예측 확률이 큰 레이블 쪽으로 값을 결정합니다.
예를들어 특정 데이터가 0이 될 확률이 10%, 1이 될 확률이 90%로 예측되었다면 최종 예측은 90%의 확률을 가진 1로 결정됩니다.
일반적으로 이진분류에서는 이 임계값을 0.5(50%)로 정하고 확률이 더 크면 Positive, 작으면 Negative로 결정합니다.
predict_proba() 라는 메소드를 이용하면 데이터별 예측 확률을 구할 수 있습니다.
정밀도와 재현율의 맹점을 보완하기 위해 만든것이 F1 스코어입니다.
F1 Score
F1 스코어(Score)는 정밀도와 재현율을 결합한 지표입니다.
예를들어 A모델의 정밀도가 0.9, 재현율이 0.1이고 B모델의 정밀도가 0.5, 재현율이 0.5라면 A모델의 F1스코어는 0.18이고, B모델의 F1스코어는 0.5로 B모델이 A모델에 비해 매우 우수한 모델이 됩니다.
ROC-AUC
ROC 곡선과 이에 기반하는 AUC 스코어는 이진분류에서 중요하게 사용되는 지표입니다.
ROC 곡선을 우리말로 하면 수신자 판단 곡선인데 주로 의학 분야에서 많이 사용됩니다.
ROC곡선은 FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate)의 변화를 나타낸 것으로, FPR을 X축, TPR을 Y축으로 표현합니다.
TPR은 재현율을 나타내고 이는 민감도라고 불리기도 합니다. TPR에 대응하는 지표로 TNR이 있는데 이는 특이도라고 부릅니다.
- 민감도(TPR)는 실제값이 Positive일 때 제대로 Positive로 예측한 비율
- 특이도(TNR)는 실제값이 Negative일 때 제대로 Negative로 예측한 비율
위 그림에서 가운데 직선은 ROC곡선의 최저값입니다. (동전을 던져 앞/뒤를 맞추는 랜덤 수준의 이진 분류 ROC 직선 → AUC는 0.5)
ROC곡선은 가운데 직선에 가까울수록 성능이 낮은 것이고 curve가 심할수록 성능이 높은것입니다. 사이킷런은 ROC곡선을 구하는 roc_curve() API를 제공합니다.
입력값
- y_true : 실제 클래스 값 array
- y_score : predict_proba()의 반환 값 array에서 positive 컬럼의 예측 확률이 사용됨.
반환값(모두 array로 반환)
- fpr
- tpr
- thresholds
댓글남기기