ROC Curve, AUC

By | 2013/06/01

ROC Curve (Receiver Operating Characteristic Curve)

a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.

ROC Curve란 특정 진단 방법의 민감도(Sensitivity)와 특이도(Specificity)가 어떤 관계를 갖고 있는지를 표현한 그래프이다. 이 그래프는 특정 모델에 대한 정확도(Accuracy)를 나타낸다. 자, 여기까지 설명했을 때 ROC Curve를 이해하는 사람은 천재임에 틀림없다.. 이 사전적 정의를 가지고 ROC Curve를 이해할 생각은 버리고, 차근차근 알아보자.

truefalse

민감도 (Sensitivity) : True Positive Rate
진짜 환자 중, 검사 방법이 환자를 얼마나 잘 골라내는가? (Probability of a positive test, given that the patient is ill)
TP/P=TP/(TP+FN)

특이도 (Specificity) : True Negative Rate
진짜 정상인 중 검사 방법이 정상인을 얼마나 잘 골라내는가? (Probability of a negative test, given that the patient is well)
TN/N=TN(FP+TN)=1-FPR

자, 아까보다 조금 더 자세하게 알아보았다. 하지만 아직 ROC Curve를 이해하기엔 모자라다. 이제 지금까지 배운 민감도, 특이도의 개념을 이용하여 실제 사용예를 살펴보자. 10명의 사람이 있다. 이 사람들 중 누가 심근경색 환자이고, 누가 정상인인지 확인하기 위한 모델을 만들어야 한다고 할 때, 무엇을 기준으로 환자와 정상인을 구분하는 모델을 만들 것인가? 키 180cm 기준으로 그 이상은 심근경색, 그 미만은 정상인으로 구분해볼 수도 있고, 콧구멍 지름 2cm를 기준으로 그 이상은 심근경색, 그 미만은 정상인으로 구분해 볼 수도 있을 것이다. 여기서는 혈압을 기준으로 심근경색인 사람과 아닌 사람을 구분해보겠다.

roc

위의 표는 10명의 사람에 대해, 실제 그 사람이 심근경색인지 아닌지(YES/NO), 그리고 해당 사람의 혈압은 얼마인지를 나타내고 있으며, 혈압을 기준으로 오름차순으로 정렬되어있다. 실제 심근경색인 사람은 4명 뿐이며, 나머지 6명은 정상인이다.

1번 사람을 보자. 이 사람은 실제로는 정상인이며, 실제 혈압은 80이다. 그렇다면 여기서, 이 사람의 혈압인 80을 심근경색의 기준으로 삼아보자. 혈압이 80이상이면 심근경색이다. 이렇게 되면 위 표의 10명 모두는 심근경색으로 간주된다. 실제로는 정상인인 사람이 6명이 있지만 혈압이 80이상이면 심근경색이라고 간주하면 정상인은 0명인 것이다. 그래서 여기서 Specificity는 0/6 이다. 그리고 실제 환자 4명 중, 이 4명 모두가 환자로 간주되므로 Sensitivity는 4/4 이다.

이번에는 2번 사람을 살펴보자. 이 사람도 실제로는 정상인이며, 실제 혈압은 81이다. 혈압 81을 심근경색의 기준으로 삼으면, 위 표의 10명 중 1번 사람만이 정상으로 간주되몀, 나머지 9명은 심근경색 환자로 간주된다. 그러므로 실제 정상인 6명 중에서 단 한명(1번 사람)만이 정상인으로 간주되고 있으므로 Specificity는 1/6이 된다. 그리고 실제 환자 4명 중, 이 4명 모두가 환자로 간주되므로 Sensitivity는 4/4 이다. 이렇게 모든 사람에 대해 1-Specificity, Sensitivity를 구할 수 있다.

여기서 10명의 사람에 대한 Sensitivity를 Y축, 1-Specificity를 X축으로 하는 그래프를 그려보자. 그래프는 다음과 같다.

auc

달랑 10명을 가지고 그래프를 그리려니 그래프가 예쁘게 그려지지 않았지만... 어쨌든 이렇다. 이 그래프에서 이 선 아래의 면적(AUC : Aread Under the Curve)이 넓을 수록 '혈압'을 기준으로 한 심근경색 환자 구분 모델은 정확하다고 볼 수 있다. 모델이 완벽할 수록 파란색 선은 검은 대각선에서 멀어지면서, AUC는 1에 가까워 질 것이다. 위 그래프에서 AUC를 한번 구해보자. AUC를 구하는 방법은 위의 표에서, 1-Specificity의 값이 이 전 값과 달라지는 지점에서의 Sensitivity들을 모두 합한 값을 전체 정상인 수로 나누면 된다. 이렇게 말로 설명하면 알아듣기가 힘드니 직접 구해보도록 하자.

2번 사람의 1-Specificity는 5/6다. 1번 사람의 1-Specificity는 6/6인데, 5/6는 6/6과 다르므로, 2번 사람의 Sensitivity인 4/4 +
3번 사람의 1-Specificity는 4/6다. 2번 사람의 1-Specificity는 5/6인데, 4/6는 5/6과 다르므로, 3번 사람의 Sensitivity인 4/4 +
4번 사람의 1-Specificity는 3/6다. 3번 사람의 1-Specificity는 4/6인데, 3/6는 4/6과 다르므로, 4번 사람의 Sensitivity인 4/4 +
5번 사람의 1-Specificity는 2/6다. 4번 사람의 1-Specificity는 3/6인데, 2/6는 3/6과 다르므로, 5번 사람의 Sensitivity인 4/4 +
7번 사람의 1-Specificity는 1/6다. 6번 사람의 1-Specificity는 2/6인데, 1/6는 2/6과 다르므로, 7번 사람의 Sensitivity인 3/4 +
9번 사람의 1-Specificity는 0/6다. 8번 사람의 1-Specificity는 1/6인데, 0/6는 1/6과 다르므로, 9번 사람의 Sensitivity인 2/4 +
= 5.25
이 값을 총 정상인의 수인 6으로 나누면 5.25/6 = 0.875 이다. 그러므로 AUC = 0.875

만약 AUC값이 0.5이하로 나온다면(그래프에서 파란색 선이 검은 대각선 아래에 위치한다면) 심근경색 판단에 YES/NO 값이 바뀐 경우이니 다시 한번 체크해보도록 하자. 대략적으로 0.7 이상부터 어느 정도 해당 모델에 대해 정확하다고 볼 수 있다고 한다. 0.875는 매우 높은 값이므로, 이 경우에 혈압을 갖고 심근경색을 판단한 것은 유효했다고 판단할 수 있다. 만약 심근경색을 판단하기 위해 10명의 사람들의 키, 몸무게 등을 어처구니 없는 기준을 가지고 AUC를 구했다면 0.5에 매우 가까운 값이 나왔을 것이다.

지난 겨울방학에 관련 스터디를 하면서 정리해 둔 자료인데, 처음에 ROC Curve에 대해 공부할 때 쉽게 이해할 만한 자료가 없어서 고생했던 기억이 나서 블로그에 정리해보았다.

참고.
http://en.wikipedia.org/wiki/Receiver_operating_characteristic
http://adnoctum.tistory.com/121