ROC Curve (수신자 조작 특성 곡선)
ROC(Receiver Operating Characteristic) Curve는 모든 분류 임계값에서 분류 모델의 성능을 보여주는 그래프로 x축이 FPR(1-특이도), y축이 TPR(민감도)인 그래프이다. 즉 민감도와 특이도의 관계를 표현한 그래프이다. ROC Curve는 AUC(Area Under Curve : 그래프 아래의 면적)를 이용해 모델의 성능을 평가한다. AUC가 클수록 정확히 분류함을 뜻한다. 즉, 위의 그래프에서 A = 0.95인 모델은 95%의 확률로 제대로 분류하고 있음을 뜻한다. 그렇다면 ROC Curve의 x축과 y축을 담당하는 FPR과 TPR이란 무엇일까?
앞으로 기술하는 내용에 대해 더 자세한 내용은 이 블로그를 참고하기를 바란다. 상당히 친절하게 설명되어있다.
또한 더 자세하게 설명해 준 블로그에 대한 링크를 여기에 남기겠다.
Confusion Matrix (혼동 행렬, 이원교차표)
Confusion matrix는 알고리즘의 성능을 평가하는데 사용된다.
양성인데 양성으로 제대로 검출된 것은 True Positive (TP) / 양성인데 음성으로 잘못 검출된 것은 False Negative (FN)
음성인데 양성으로 잘못 검출된 것은 False Positive (FP) / 음성인데 음성으로 제대로 검출된 것은 True Negative (TN)
따라서 위의 이원교차표를 분석할때는 대각선인 TP와 TN을 확인하면 이 모델이 얼마나 정확하게 예측했는지를 알 수 있다.
조금 더 직관적으로 설명하도록 하겠다.
예시로, 암을 분류하는 모델에 대해서 위의 Confusion Matrix, 즉 이원교차표로 성능을 확인하고자 한다.
TP (True Positive) | 분류기가 병이 있다고 예측했고 실제로도 병이 있는 경우 |
TN (True Negative) | 분류기가 병이 없다고 예측했고 실제로도 병이 없는 경우 |
FP (False Positive) | 분류기가 병이 있다고 예측했지만 실제로는 병이 없는 경우 |
FN (False Negatvie) | 분류기가 병이 없다고 예측했지만 실제로는 병이 있는 경우 |
조금은 이해가 갔길 바란다. 실제로 병원에서는 FN, 즉 분류기가 병이 없다고 예측했지만 실제로 병이 있는 경우에 대한 오차를 줄이는 것이 매우 중요하다.
Multi-Class Confusion Matrix
Multi-Class인 경우에는 밑의 그림과 같이 판단한다.
정확도(Accuracy)
전체 데이터 중에서 제대로 분류된 데이터의 비율로 모델이 얼마나 정확하게 분류를 하는지를 나타낸다.
이것이 대체로 우리가 모델의 성능을 파악하는데 봐왔던 정확도이다.
Accuracy = (TP + TN) / (TP + TN + FP + FN) = (TP + TN) / (P + N)
정밀도와 재현율
정밀도(Precision)
모델이 양성이라고 분류한 데이터 중에서 실제로 양성인 데이터의 비율이다.
EX) 제품을 구매할 것으로 예측한 사람 중에서 실제 제품을 구매한 사람의 비율
Precision = TP / ( TP + FP)
재현율(Recall)
실제로 양성인 데이터 중에서 모델이 양성으로 분류한 데이터의 비율이다.
EX) 실제 제품을 구매한 사람 중에서 구매할 것이라고 예측했던 사람의 비율
Recall = TP / (TP + FN) = TP / P
정밀도와 재현율은 소극적 예측과 공격적(적극적) 예측을 판단할 때 사용한다.
암을 예측하는 모델에서 소극적 예측은 확실한 경우가 아니면 암이 아니라고 판단하는 것이고, 공격적(적극적) 예측은 조금만 의심이 가더라도 암이라고 판단하는 것을 의미한다.
소극적 예측 | 정밀도 ↑ 재현율 ↓ |
공격적(적극적) 예측 | 정밀도 ↓ 재현율 ↑ |
민감도와 특이도
민감도(sensitivity) : TPR (True Positive Rate) 민감도는 정밀도와 같다.
정확히 분류된 긍정 예시의 비율
EX) 실제 제품을 구매한 사람 중에서 구매할 것이라고 예측했던 사람의 비율
TPR = TP / (TP + FN) = TP / P
특이도(specificity) : TNR (True Negative Rate)
정확히 분류된 부정 예시의 비율
EX) 실제 제품을 구매하지 않은 사람 중에서 구매하지 않을것이라고 예측했던 사람의 비율
TNR = TN / (TN+FP) = TN / N
민감도와 특이도는 0~1까지의 범위에 있으며, 값이 1에 가까울수록 바람직하나 실제로 한쪽이 높으면 한쪽이 낮아져, 둘 다 높게 맞출 수 없다.
그래서 여러 모델 중 하나를 선택해야한다면 민감도가 최대인 것 중 특이도가 높은 것을 선택한다.
FPR (False Positive Rate) = False Alarm
실제로 양성인 데이터 중에서 모델이 음성으로 분류한 데이터의 비율이다. 즉, 반대로 예측하는 경우를 뜻한다.
FPR = FP / ( FP + TN ) = FP / N = 1- ( TN / ( TN + FP ) ) = 1 - 민감도
모델의 전체적인 정확도가 높아도 FPR, 즉 제대로된 값을 잘못 측정하면 예측에 큰 영향을 줄 수있으므로 FPR도 중요한 지표이다.
FPR은 ROC Curve의 x축으로, TPR과 함께 AUC를 판단하는 매우 중요한 척도이다.
카파 통계량 (Kappa Statistic)
두 관찰자(실제,예측)간의 측정 범주값에 대한 일치도를 측정하는 방법으로 K=0이면 완전 불일치, K=1이면 완전 일치이다.
Pr(a) : 데이터에서 관찰된 2명의 평가자(실제,예측)들의 일치확률
Pr(e) : 2명의 평가자(실제,예측)들의 데이터로부터 계산된 확률적 일치확률 (우연히 일치할 확률)
K는 이원교차표를 통해 구할 수 있으며, Python과 R(install.packages("vcd"))에서도 패키지로 한번에 계산할 수 있다.
Pr(a)는 실제와 예측들의 일치 확률이므로 정확도를 의미한다. Pr(a) = 정확도(Accuracy) = (TP + TN) / (P + N)
Pr(e)에 대해서는 아래의 예를 통해 설명하도록 하겠다.
평가자 A (예측) | ||||
평가자 B (실제) |
합격 | 불합격 | ||
합격 | 40 | 10 | 50 | |
불합격 | 20 | 30 | 50 | |
60 | 40 |
위의 표에서 Pr(e) : 2명의 평가자들의 데이터로부터 계산된 확률적 일치, 즉 우연히 일치할 확률을 구해보자.
평가자 A(예측)는 합격확률이 0.6, 불합격확률이 0.4이다.
평가자 B(실제)는 합격확률이 0.5, 불합격확률이 0.5이다.
평가자 A와 B 모두 합격을 줄 확률은 0.6 * 0.4 = 0.3 이며, 평가자 A와 B 모두 불합격을 줄 확률은 0.4 * 0.5 = 0.2 로,
Pr(e) = 0.3 + 0.2 = 0.5이다.
위의 예시표에 대한 카파 통계량은 (0.7(정확도) - 0.5) / (1 - 0.5) = 0.4로 그리 많이 일치하진 않다는 것을 알 수 있다.
카파 통계량이 크면 클수록 모델의 정확도가 우연히 나온 것이 아니라는 것을 알 수 있다.
이것을 이원교차표에 대해서 계산을 하고자 하면 Predicted class의 Positive와 Actual class의 Positive를 곱한 것과 Predicted class의 Negative와 Actual class의 Negative를 곱한 것의 합이 Pr(e)이다.
∴ Pr(e) = Predicted class Positive * Acutal class Positive + Predicted class Negative * Actual class Negative
PR Curve
PR Curve란 x축을 Recall, y축을 Precision으로 두고 시각화한 그래프로 ROC Curve와 마찬가지로 AUC로 평가한다. 주로 데이터 라벨의 분포가 심하게 불균등한 경우, 예를 들면 사람들에게 떡을 2개 주도록 설계된 기계를 상용화하기 위해 테스트할 때 떡을 그 이상이나 이하로 줄 확률보다 설계대로 2개만 줄 확률이 압도적으로 더 높은 (이게 올바른 예시인지는 잘 모르겠다 아 떡먹고 싶네 갑자기) 경우와 같이, 분류의 분포가 심하게 치우쳐진 경우에 사용한다.
PR Curve는 ROC Curve와 다르게 1에서부터 줄어드는 형태를 띄고 있다. PR Curve는 불균형한 데이터 셋을 가졌을 때의 핵심 성능평가 방법이다.
F1 점수 (F 척도)
F1 Score는 아래의 그림과 같이 모델의 성능을 하나의 수로 표현하고자 할 때, ROC 곡선이나 PR 곡선의 AUC 외에 많이 사용되는 지표이다.(0~1사이) F1 Score도 정밀도(Precision)와 재현율(Recall)을 이용한다. F1 Score는 모델의 성능을 하나의 숫자로 설명하기 때문에 여러 모델을 나란히 비교할 수 있다.
F1 Score는 정밀도와 재현율의 조화평균으로, 일반적인 산술평균이 아닌 조화평균을 사용하는 이유는 두 지표를 모두 균형있게 반영하여 모델의 성능을 판단하기 위함이다. 조화평균으로 평균을 구하면 작은값을 위주로 평균을 구할 수 있기 때문에 보다 정확한 평균값을 구할 수 있다.
정확도가 만약 높더라도 F1 Score가 현저히 작은 경우는 좋은 모델이라고 볼 수 없기 때문에 F1 Score도 모델의 성능을 파악하는데 중요한 지표라고 할 수 있다. 이에 대한 자세한 설명은 여기를 참고하길 바란다.
F1 Score도 Python과 R(install.packages("MLmetrics"))에 있는 패키지들을 통해 한번에 구할 수 있다.
'인공지능 > 인공지능 이론' 카테고리의 다른 글
12. Clustering (0) | 2019.09.13 |
---|---|
11. 차원의 저주 / PCA (0) | 2019.09.13 |
9. Classification (분류) (0) | 2019.09.11 |
8. Regression (회귀) (0) | 2019.09.08 |
7. 머신러닝종류 (0) | 2019.09.08 |