본문 바로가기
Research/Machine Learning

ROC curve, ROC_AUC, PR_AUC, 민감도, 특이도

by 곽동현 IMCOMKING 2014. 6. 11.

ROC curve (Receiver Operating Characteristic curve) : FPR과 TPR을 각각 x,y축으로 놓은 그래프. ROC curve는 X,Y가 둘다 [0,1]의 범위이고, (0,0) 에서 (1,1)을 잇는 곡선이다.

- ROC 커브는 그 면적이 1에 가까울수록 (즉 왼쪽위 꼭지점에 다가갈수록) 좋은 성능이다. 그리고 이 면적은 항상 0.5~1의 범위를 갖는다.(0.5이면 랜덤에 가까운 성능, 1이면 최고의 성능)

- TPR : True Positive Rate (=민감도, true accept rate)
1인 케이스에 대해 1로 잘 예측한 비율.(암환자를 진찰해서 암이라고 진단 함)

FPR :  False Positive Rate (=1-특이도, false accept rate)
0인 케이스에 대해 1로 잘못 예측한 비율.(암환자가 아닌데 암이라고 진단 함)


민감도 : 1인 케이스에 대해 1로 잘 예측한 것.

특이도 : 0인 케이스에 대해 0으로 잘 예측한 것.


TPR과 FPR은 서로 비례하는 관계에 있다. 암환자를 진단할 때, 성급한 의사는 아주 조금의 징후만 보여도 암인 것 같다고 할 것이다. 이 경우 TPR은 1에 가까워질 것이다. 그리고 동시에 FPR도 1에 가까워진다. (정상인 사람도 전부 암이라고 하니까)

반대로 실력이 없는 의사라서 암환자를 알아내지 못한다면, 모든 환자에 대해 암이 아니라고 할 것이다. 이 경우 TPR은 매우 낮아져 0에 가까워 질 것이고, 마찬가지로 FPR 또한 0에 가까워질 것이다.(암환자라고 판단 자체를 안하므로, 암환자라고 잘못 진단 하는 경우가 없어짐)


그런데 문제는 좋은 성능에 대한 지표인 TPR을 높이려다보면, 나쁜 성능에 대한 지표인 FPR도 같이 높아져버린다는 것이다. 따라서 어떤 의사의 실력을 판단하기 위해서는 특정 기준(=threshold, 어느 정도의 징후일때 암이라고 예측 할 지)을 연속적으로 바꾸어 가면서 TPR과 FPR을 측정을 해야한다. 그리고 이것을 한눈에 볼 수 있게 시각화 한 것이 바로 ROC 커브이다.


이 ROC커브는 두가지 장점이 있다. 먼저 그 커브의 면적을 재어 다양한 기준에서의 TRP과 FPR을 복합적으로 평가할 수 있다는 점이고, 또 한가지는 실제로 암을 판단할 때, 어디를 기준으로 잡을 지 결정하는 데 도움이 될 수 있다.

단순히 TPR + (1-FPR)이 최대가 되는 지점을 잡아도 되지 않을까 생각할 수 있지만, 실제로는 병에 따라서 어느 쪽에 좀 더 강조를 둘 것인가가가 매우 중요할 수 있다. 예를 들어 걸릴 확률은 매우 낮지만 치사율이 극히 높은 병은 일단 환자라고 의심을 할 수록 좋기 때문에 FPR이 높더라도 괜찮을 수 있다. 반대로 걸릴 확률은 높지만 위험성이 매우 낮은 병은 FPR이 좀 낮은 기준을 선택하는 것이 괜찮을 것이다.




AUC: Area Under the Curve

Scikit-learng의 정의에 따르면 AUC라는 단어의 의미 자체는 임의의 curve에 대해 그 아래의 면적을 계산한 것을 의미한다.

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.auc.html


ROC AUC(ROC Area Under the Curve) == AUROC (the Area Under a ROC Curve)

앞에서 설명한 ROC 커브의 밑면적을 구한 값이 바로 AUC. 이 값이 1에 가까울수록 성능이 좋다. ROC AUC값은 전체적인 민감도와 특이도의 상관 관계를 보여줄 수 있어 편리한 성능 척도이다.

https://en.wikipedia.org/wiki/Sensitivity_and_specificity

http://synapse.koreamed.org/Synapse/Data/PDFData/0001KJFM/kjfm-30-841.pdf

http://digndig.net/blog/2013/06/01/312/

http://adnoctum.tistory.com/121


PR_AUC vs ROC_AUC

PR_AUC는 말그대로 Precision과 Recall curve에 대한 면적이고, ROC_AUC는 TPR과 FPR curve에 대한 면적이다. 둘중 비교했을 때 ROC_AUC가 상대적으로 좀 더 robust한 성능평가가 가능한 것으로 알려져있다. 데이터 imbalance가 심한 경우, PR_AUC를 쓰는 것이 좋다.(댓글 참조)

https://www.kaggle.com/general/7517


Micro/Macro ROCAUC

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html


Micro F1 score, Macro F1 score

Multi-class상황에서는 f1 score를 바로 정의할 수 없고 여러 class에 대해 어떻게 평균을 취할지를 정해야한다.

각각의 class 별로 f1 score를 구하고 이를 단순히 산술 평균을 낸 것을 macro f1이라 하고(이 경우 class imbalance가 무시된다.)

전체 class에서의 precision과 recall을 구해서 한번에 f1 score를 구하면 micro f1이 된다.(이 경우 class imbalance가 반영된다)

https://datascience.stackexchange.com/a/16001/68526

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html


Micro F1 scoreAccuracy와 동치이다.

아래는 binary classification 상황에서의 증명이다. 이 상황에서는 TP2가 TN1가 같기 때문에 쉽게 동치이다.



댓글12