평가(Evaluation)
부천대 IOT 응용소프트웨어를 수강하는 학생들을 위해 만든 강의자료로 강의내용은 모두 파이썬머신러닝가이드 내용을 기반으로 만들어졌습니다.
Last updated
부천대 IOT 응용소프트웨어를 수강하는 학생들을 위해 만든 강의자료로 강의내용은 모두 파이썬머신러닝가이드 내용을 기반으로 만들어졌습니다.
Last updated
머신러닝 모델은 여러가지 방법으로 예측 성능을 평가할 수있다. 성능 평가지표는 일반적으로 모델이 분류나 회귀냐에 따라 달라지게 되는데, 회귀의 경우 대부분 실제와 예측값의 차이인 오차 평균값에 기반을 한다. 분류인 경우 타이타닉 예측과 같이 정확도 만으로 평가를 할 수 있고, 예측변수(종속변수)가 0 혹은 1, 긍정/부정과 같이 이진 분류에서 정확도이외에 다른 성능평가를 시도하는 경우가 많다.
분류의 성능 평가지표를 살펴보면 다음과 같다.
정확도(Accuracy)
오차행렬(Confusion Matrix)
정밀도(Precision)
재현율(Recall)
F1 Score
ROC와 AUC
정확도는 직관적으로 모델 예측 성능을 나타내는 평가 지표다. 하지만 종속변수가 0과 1로 이루어진 범주형인 경우 데이터 구성에 따른 머신러닝 모델의 성능을 왜곡 우려가 있어, 정확도 하나만으로 성능을 평가하진 않는다.
특히 정확도는 불균형한(imbalanced) 레이블 값 분포에서 머신러닝 모델의 성능을 판단 할 경우, 적합한 평가지표가 되지 못한다.
예를들어 신용카드 사기검출을 판별하기 위해 카드사로부터 30만건 데이터를 받았다고 하자. 29만9천900건 이상에서 모두 아무런 문제없이 정상적으로 사용되었지만, 100건정도만이 이상이 있다고 했을 때 이미 99%이상이 정상적이고 1%정도만이 사기다. 그러면 내가 성능을 예측을 할때 그냥 정상이라고만 하면 정확도 수치가99% 나온다.
또한 타이타닉 승갱의 생존자 예측 데이터에서도 남성보다 여성이 생존확률이 높았기 때문에 알고리즘을 사용하지 않고도 여성은 모두 생존이라고 판별해버리면 높은 정확도를 받을 수 있다. 이를 증명하기 위해 파이썬머신러닝 가이드에서 만든 예제를 통해 확인해보겠다. 확인 했을 때 결과는 약 78%정확도를 보이고 있음을 확인할 수 있다.
이진분류에서 성능 지표로 가장 활용되는 오차행렬은 학습된 모델이 예측이 수행하면서 얼마나 헷갈리고(confused) 있는지 함께 보여주는 지표다. 즉 이진 분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지 4분면상에서보여준다.
그럼 정확도는 오차행렬에서 어떻게 정의할 수 있을까?
정확도= (TN + TP) /(TN + FP+ FN+ TP)
위의 그림을 설명하자면 다음과 같다.
먼저 예측클래스 축을 기준으로 좌우로 Negative와 Positive로 나뉘어져 있다.
머신러닝의 모델이 예측을 Negative로 했다면 예측을 0으로, Positive로 했다면 예측을 1로 했다고 알려주는 것이다. 그리고 실제클래스를 축으로 위아래 Negative와 Positive로 나뉘어져 있는데, 이는 Negative는 실제 값이 0이고 Positvie는 실제값이 1인 것이다.
그래서 4분면 가장 왼쪽의 TN(True Negative)의 의미는 머신러닝 모델이 0으로 예측을 했는데, 실제 값도 0 이므로 머신러닝이 잘 예측 했음을 알 수 있다. FP(False Positive)는 머신러닝 모델이 1로 예측했지만 실제 값은 0으로 머신러닝 모델이 예측이 틀렸음을 알 수 있다. FN(False Negative)은 실제값은 1인데 머신러닝이 예측을 0으로 하여 머신러닝 예측이 틀렸고, TP(True Positive)는 실제값도 1이고 ,예측을 1로 하여 머신러닝이 정답을 맞췄다고 할 수있다.
그럼 어떤때에 우리는 어떤 데이터를 0으로 , 어떤 데이터를 1로 설정해야할까?
일반적으로 불균형한 레이블 클래스에서 중점적으로 찾아야 하는 매우 적은수의 결과값에 positive로 설정해 1값을 부여하고 그렇지 않은 경우 Negative로 0 값을 부여하는 경우가 많다.
앞서 설명한 정확도의 한계를 보완하기 위해 정밀도와 재현율을 함께 확인할 수 있다.
정밀도와 재현율은 Positive 데이터 세트의 예측 성능에 초점을 맞춘 평가 지표다.
정밀도 = TP /(FP+TP)
재현율 = TP/(FN+TP)
정밀도는 예측을 Positive 로 한 대상 중 예측과 실제 값이 Positive로 일치한 데이터의 비율을 말한다.
재현율은 실제값이 Positive한 대산 중에 예측과 실제값이 Positive로 일치한 데이터의 비율을 뜻하며 민감도(sensitivity) 혹은 TPR(True Positive Rate)라고 불린.
정밀도와 재현율은 이진분류 모델의 업무 특성에 따라 특정 평가 지표가 더 중요한 지표로 간주될 수 있다.
재현율이 중요한 지표인 경우 실제 Positvie 양성인 데이터를 예측을 Negative로 판단하게 되면 업무상 큰 영향을 받게 되는데 대표적으로 병원에서 암 환자를 예측할 때 쓰인다.
예를들면 실제로 암환자를 암환자가 아닌 정상인으로 오진을 내리는 경우가 있을 수 있고,정상인 사람을 의사가 암환자로 오진을 내릴 경우 재검사를 위해 비용을 더 지불 할 경우가 생긴다. 이외에도 보험사기와 금융사기 모델에서도 재현율이 중요할 수 있다.
보통 재현율이 정밀도보다 상대적으로 중요한 업무가 많지만, 정밀도가 중요한 지표로 쓰이는 경우는 실제 Negative 음성인 데이터 예측을 Positve 양성으로 잘못 판단하게 될 때가 있는데 대표적으로 스팸메일 여부를 판단하는 모델이 그렇다. 실제로 스팸메일을 일반 메일로 잘못 분류해 메일을 아무생각 없이 클릭하다가 바이러스에 감염되는 일을 종종 경험한적 있을 것이다.
상황에 따라 어떤때에는 정밀도가 높아야 하는 경우가 있고, 또 어떤 때에는 재현율을 높여야하는 경우가 있는데 이때 임계값(Threshold)를 조정해 정밀도와 재현율 수치를 높이면 된다. 하지만 정밀도와 재현율은 상호보완적인 관계이므로, 어느 한쪽을 높이면 다른 한쪽은 낮아지게 된다. 이를 트레이드 오프(Trade-off)라구 부르는데, 아래 그림을 보면 분류의 결정 임계값인 X축을 기준으로, 재현율(Recall)은 보다시피 임계값이 커질수록 점점더 낮아진다. 반면 정밀도(Precision)는 임계값이 높아질수록 점점더 높아지고 있다.
그렇다면 분류의 임계값은 무엇일까?
분류모델은 양성/음성으로 결정할 때 어떠한 확률로 결정한다. 에를들어 0.5를 기준으로 0.5이상이면 양성, 0.5 이하인 경우 음성이라고 진단할 때, 0.5가 임계값이다. 이 임계값을 낮추게 되면 Positive로 예측할 확률은 높아지게 되니 재현율(Recall)은 증가하게 된다. 즉 기준값을 낮춰버린 것이다. 반면 정밀도(Precison)는 낮아지게 된다.
F1 스코어(Score)는 정밀도와 재현율을 결합한 지표로서 정밀도와 재현율을 조화평균을 이용해 구한다.
왜 평균이 아닌 조화평균을 이용했을까?
precision과 recall이 0에 가까울수록 F1 score도 동일하게 낮은 값을 갖도록 하기 위해 조화평균을 사용했다. 따라서 F1 스코어는 정밀도와 재현율이 어느 한쪽을 치우치지 않는 수치를 나타날때 상대적으로 높은 값을 가진다.
ROC 곡선(Receiver Operation Characteristic Curve) 와 AUC 스코어는 분류 예측 성능에서 중요시 되는 지표로, 보통 의학분에서 사용된다.
ROC 곡선은 FPR(FP rate)에 따라 TPR(TP rate, 재현율)이 어떻게 변화하는지 나타내는 곡선인데,
아래 그림과 같이 FPR X축으로, TPR을 Y축으로 잡으면 FPR 변화에 따라 TPR 변화가 곡선형태로 나타난다. 이때 분류 성능 지표로 사용되는 것이 ROC 곡선 면적에 기반한 AUC 값인데, 전체 사각형 면적을 1이라고 가정했을 때 빨간선까지의 면적이 0.5 인데, 면적이 점점 넓을수록(1에 가까울수록) 파란색 곡선형태의 모양이 그려지고 , 이는AUC 면적값이 1에 가까울 수록 좋은 수치다.
민감도(Sensitivity, TPR): 실제값 Positive가 정확히 예측되어야하는 수준(=재현율)
특이성(Specificity, TNR): 실제값 Negetive가 정확히 예측되어야 하는 수준으로 실제 Negative인데 Positive로 또는 Negative롤 예측한 것 중 Positive로 잘못 예측한 것을 비율을 말한다.
임계값이 1일 경우, 아예 Positive로 예측하지 않아 FP=0이 되므로 FPR=0이 되고, 임계값이 0일 경우, 모두 Positive로 예측하여 TN=0이 되므로 FPR=1이 된다.
사이킷런(scikit-learn)에서는 이러한 성지표들을 계산하는 메서드를 제공하고 있다.