Accuracy(정확도)
정확도는 실제 데이터에서 예측 데이터가 얼마나 같은지를 판단하는 지표이다.
정확도 = 예측 결과가 동일한 데이터 건수 / 전체 예측 데이터 건수
정확도는 직관적으로 모델 예측 성능을 나타내는 평가 지표이다. 하지만 이진 분류의 경우 데이터의 구성에 따라 ML모델의 성능을 왜곡할 수 있기 때문에 정확도 수치 하나만 가지고 성능을 평가하지 않는다. 특히 정확도는 불균형한 레이블 분포에서 ML모델의 성능을 판단할 경우, 적합한 평가 지표가 아니다.
Confusion Matrix(오차 행렬)
이진 분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표이다.
TN, FP, FN, TP는 예측 클래스와 실제 클래스의 Positive 결정 값(값 1)과 Negative 결정 값(값 0)의 결합에 따라 결정된다. 앞 문자 True/False는 예측값이 실제값과 '같은가'/'틀린가'이고, 뒤 문자 Negative/Positive는 예측 결과 값이 부정(0)/긍정(1)을 의미한다.
TP, TN, FP, FN 값은 Classifier 성능의 여러 면모를 판단할 수 있는 기반 정보를 제공한다. 이 값들을 조합해서 Accuracy, Precision, Recall 값을 알 수 있다. 앞서 본 Accuracy = (TN+TP)/(TN+TP+FN+FP)이다.
Precision and Recall(정밀도와 재현율 )
정밀도와 재현율은 Positive 데이터 세트의 예측 성능에 좀 더 초점을 맞춘 평가지표이다.
정밀도 = TP/(FP+TP)
재현율 = TP/(FN+TP)
정밀도는 예측을 Positive로 한 대상 중에 예측과 실제 값아 Positive로 일치한 데이터의 비율을 뜻한다. Positive예측 성능을 더욱 정밀하게 측정하기 이한 평가 지표로 양성 예측도라 고도 불린다. ex) 스팸메일 판단 -> 스팸메일을 일반메일이라고 판단해도 어느정도 용인 가능 but, 일반메일을 스팸이라고 확인하면 안되는 case
재현율은 실제 값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율을 뜻한다. 민감도 또는 TPR라고도 불린다. 재현율이 중요 지표인 경우는 실제 Positive 양성 데이터를 Negative로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우 ex) 암 진단, 금융 사기
재현율과 정밀도 모두 TP를 높이는 데 동일하게 초점을 맞추지만, 재현율은 FN(실제 P, 예측 N)를 낮추는데, 정밀도는 FP(실제 N, 예측 P)를 낮추는데 초점을 맞추는 것이다. 이 같은 특성 때문에 정밀도와 재현율은 서로 보완적인 지표로 분류의 성능을 평가하는데 사용된다.
정밀도/재현율 트레이드오프
분류하려는 업무의 특성상 정밀도 혹은 재현율이 특별하게 강조돼야 할 경우 분류의 결정 임곗값을 조정해 특정 평가 지표의 수치를 높일 수는 있지만 한 쪽을 높이면 한 쪽은 떨어지게 된다. (둘은 상호 보완적인 지표이기 때문)
threshold값을 작게 해주면 즉, Positive로 예측하는 수를 늘이면(실제 N인 것을 어느정도 P라고 예측해도 큰 문제가 없는 경우) 정밀도는 떨어지고 재현율은 증가하는 것을 볼 수 있다.
위와 같이 임곗값의 변화에 따라서 평가지표를 코드를 구현해서 볼 수도 있지만 사이킷런은 precison_recall_curve() API를 제공한다.
입력 파라미터 : y_true: 실제 클라스 값 배열, probas_pred 칼럼의 예측 확률 배열
반환 값 : 정밀도, 재현율
정밀도와 재현율의 맹점
위에서 볼 수 있듯이 Positive 예측의 임곗값을 변경함에 따라 정밀도와 재현율의 수치가 변경된다. 임곗값의 이러한 변경은 상황에 맞게 두 개의 수치를 상호 보환할 수 있는 수준에서 적용이 되어야 한다. 단순히 하나의 성능 지표 수치를 높이기 위한 수단으로 사용돼서는 안된다.
F1 Score
F1 스코어는 정밀도와 재현율을 결합한 지표이다. F1 스코어는 정밀도와 재현율이 어느 한쪽으로 치우치지 않는 경우에 상대적으로 높은 값을 가진다.
F1= 2*precision*recall / (precision + recall)
사이킷런은 F1 스코어를 구하기 위해 f1_score()라는 API를 제공한다.
ROC 곡선과 AUC
ROC곡선과 이에 기반한 AUC 스코어는 이진 분류의 예측 성능 측정에서 중요하게 사용되는 지표이다. ROC곡선은 FPR이 변할 때 TPR이 어떻게 변하는지를 나타내는 곡선이다. FPR을 x축으로, TPR을 y축으로 잡으면 FPR의 변화에 따른 TPR의 변화가 곡선 형태로 나타난다.
TPR은 민감도라 불리고 재현율을 나 나타낸다. 그리고 민감도에 대응하는 지표로 TNR이라고 불리는 특이성이 있다.
특이성은 실제값(Negative)가 정확히 예측되어야 하는 수준을 나타낸다.
TNR= TN / (TN + FP)
ROC곡선은 FPR을 0부터 1까지 변화 값을 구한다. 이때 어떻게 FPR을 0부터 1까지 변경 할 수 있는 것일까? 분류 결정 임곗값을 변경하면 된다. FPR을 0으로 만들려면 분류 기준 임곗값을 1로 설정하면 된다. 임곗값을 1로 지정하면 Positive 예측 기준이 매우 높기 때문에 분류기가 임계값보다 높은 확률을 가진 데이터를 Positive라고 예측 못하기 때문에 FP=0이 된다 따라서 FPR또한 0이 된다. 같은 원리로 FPR=1을 만들 수 있다. 사이킷런은 ROC곡선을 구하기 위해 ROC_curve() API를 제공한다.
입력 파라미터: y_true: 실제 클래스 값 array, y_score: predict_proba()의 반환 값 array에서 Positive 칼럼의 예측 확률이 보통 사용된다
반환 값: fpr, tpr, thresholds
일반적으로 ROC 곡선 자체는 FPR과 TPR의 변화 값을 보는데 이용하며 분류의 성능 지표로 사용되는 것은 ROC곡선 면적에 기반한 AUC 값으로 결정한다. AUC값은 ROC곡선 밑의 면적을 구한 것으로서 일반적으로 1에 가까울수록 좋은 수치이다.
'Machine Learning' 카테고리의 다른 글
[파이썬 머신러닝 완벽가이드(위키북스)] : 분류 part2 (0) | 2021.11.20 |
---|---|
[파이썬 머신러닝 완벽가이드(위키북스)] : 분류 part1 (0) | 2021.11.19 |
[파이썬 머신러닝 완벽가이드(위키북스)] : 사이킷런 (0) | 2021.11.08 |
[파이썬 머신러닝 완벽가이드(위키북스)] : 데이터 핸들링 part2 - Pandas (0) | 2021.11.03 |
[파이썬 머신러닝 완벽가이드(위키북스)] : 데이터 핸들링 part1 - Pandas (0) | 2021.11.01 |
댓글