그림 및 글작성에 대한 도움 출저 : 유튜브 - 테리 엄태웅님의 딥러닝 토크


개요

딥러닝에 있어서, Accuracy말고도 여러가지 metric을 보아야하는 것 중 하나가 ROC커브이다.

저번시간에 다룬 아래의 4가지 개념에 대해서 다시한번 상기해보자.

image

  • True Positive : 올바른(예측)값들에 대해서, (실제값도) 올바른 경우,
    - 혼동행렬에서의 \ 대각선 라인을 의미(전체클래스의 TP)
  • True Negative for 특정클래스 : 거절해야할 (예측)값에 대해서, (실제값도) 거절되어야하는 경우,
  • False Positive for 특정클래스 : 올바른 (예측)값에 대해서, (실제값이) 거절한 경우,
  • False Negative for 특정클래스 : 거절해야할 (예측)값에 대해서, (실제값이 거절하지못하고) 올바른 경우

다르게 해석해보면, True/False는  예측값이 실제값과 같다/다르다를 얘기하는 것이다.
True인 경우는 실제값과 같으니 \ 대각선 방향에 위치하게 된다. 그 이외 박스들은 다 False라 보면 된다.
Positive/Negative예측값이 어떻게 나왔는지이다.
여기서는, 4가지 경우에 대해서만 다루니, 이렇게 해석이 가능한 것 같다.


예를 들어, True Positive 는 실제랑 예측이랑 같은 레알, 그 예측값이 양성으로 나온 경우이다.
True Negative는 실제값과 예측값이 같은 레알, 그 예측값이 음성으로 나온 경우이다.
image

False Positive는 실제랑 예측이랑 다른 거짓으로, 그 예측값이 양성으로 나온 경우이다.
- 거짓이려면, \대각선 이외의 값들 중에서 --> 예측값이 양성인 암으로 예측한 경우이다.
- 쉽게 외우려면, False Positive = False Alarm 거짓으로 알람이 울렸다고 외우면 된다.
False Negative는 실제랑 예측이랑 다른 거짓으로, 그 예측값이 음성으로 나온 경우이다.


Accuracy

정확도는 전체 중에, 맞은 것(\대각선, True, 레알)만 선택하면 된다.

image

그러나, 정확도는 클래스별 분포가 같을 때만 이용가능하다고 저번시간에 언급했다.
image

정상환자의 정확도는 988 / 990 =99.8%이지만,
암환자의 정확도는 9/10 = 90%이다.
전체 정확도는 99.7%로,,, 암환자의 정확도(90%)가 정확하게 반영되지 않는다.


정상환자의 분포는 990명, 암환자의 분포는 10명으로 여기서 accuracy를 보면 안된다. 머신러닝에서는 f1-score를 이용하면 된다고 했다.

Accuracy의 단점을 보완하는 성능척도가 Precision과 Recall이 그리고 ROC curveAUC이다.


Precision과 Recall

ROC curve에 대해 언급하기 전에, Precision과 Recall을 복습하자

Precision은 혼동행렬의 세로방향으로써,  특정 클래스의 예측값(Positive 판정)에 대해 실제 정답값은 얼마나 있는지이며,
Recall은 혼동행렬의 행방향으로써,  특정 실제값에 대해, 해당 예측값은 어떻게 당겨왔는지이다.
image


image


ROC curve

ROC curve는 보통 binary classification(2개의 클래스 분류) 나 medical application에서 많이 쓰는 성능 척도이다.

image

위의 그래프에서 어느것이 더 좋은  ROC 커브인가?
빨간색이 좋은 커브이다.

빨간색 커브가 더 좋은 이유는?
아래 면적을 구해서 더 큰 것이 좋은 커브가 된다. ROC curve 아래 면적을 AUC라(Area Under the Curve)라고 한다.
image


ROC curve를 쓰는 이유는 무엇일까?
클래스별 분포가 다를 때, Accuracy의 단점을 보완하면서 더 자세히 보기 위해서이다.

image

위의 그림처럼, 양 끝쪽은 확실히 정상이나 암환자로 구분이 가능하다.
하지만, 가운데 쪽은 판단이 불분명한 부분이 있을 수 밖에 없다.
image

이 상황에서 최선의 판단(초록색 선을 그는 행위를)하려면, 항상 error들을 포함할 수 밖에 없다.

아래의 그래프는 위에서 등장했던 그래프보다 훨씬 판별하기가 쉽다.
이 차이를 보는 것이 ROC curve이다.

image

내가 판단선(초록색선)을 내리는데, 왼쪽 <->오른쪽 으로 움직일 수록, 어느정도로 안좋은 결과를 초래하는지에 대한 얘기가 ROC curve라 할 수 있다.
아래의 분포는 초록선을 움직이더라도 error가 많이 안생길 것이다. 이러한 경우가 처음 등장한 ROC curve 그래프의 빨간색 선에 해당한다.

만약 위의 분포처럼 많이 겹치는 부분이 많을 수록 직선에 가까워 지게 된다.

image


ROC curve의 이용

feature를 골라내는 곳에 이용할 수 있다.
예를 들어, 누가 더 잘달리는 지 예측한다고 가정하자

feature로는 키, 몸무게를 선택한다.
그러면 키 큰 사람들 중에 못 달리는 사람, 키 작은 사람들 중에 빨리달리는 사람,
몸무게가 많이 나가지만 빨리달리는 사람, 몸무게가 적게나가지만 못 달리는 사람 정도가 겹치게 될 것이다.

data를 지난대회 것을 사용한 뒤, 100등을 기준으로 빨리 달리는사람과 못달리는 사람을 가른다고 가정해보자.
data자체가 양질의 데이터이기 때문에, ROC curve가 빨간색과 같은 것이 나올 것이다.
만약 90등이나 110등을 기준으로 짜르더라도, 민감도가 크지않을 것이다.

ROC curve는 양질의 데이터라면, 더 넓은 면적을 가질 것이며, 더 좋은 성능의 모델일수록 더 넓은 면적을 가질 것이다.


즉, ROC curve가 좋은 것을 사용한다
-> 머신러닝의 경우, raw_data에서 내가 정하는 Decision Boundary에 덜 민감하면서, label을 구분하는데 더 믿음이 가고 잘 예측되겠구나를 결정할 수 있다.
-> my) 딥러닝의 경우, 클래스별 분포가 다를 때, accuracy의 대용으로 사용한다. 특히 딥러닝 모델비교 및 사람과의 비교에 쓸 것이다.


ROC curve에서의 수식

image

기본적으로 ROC curve는 Recall( 행방향 : 실제값에 대해서 예측값이 어느정도로 )에 대한 얘기이다.

이 때 등장하는 개념이,
y축 : TPR(True Positive Rate) = Recall = sensitivity
x축 : 1 - ( TNR(True Negative Rate) = specificity )

- Recall이 높다는 것은 초록색선을 쭉 왼쪽으로 당겨서 실제 Positive 분포(TP)초록색 우측의 예측 Positive가 다 들어오도록 만드는 행위다.
  FN이 줄어들면서, TP는 엄청나게 증가한다. 그래서 TPN은 증가한다.
image

- 그러나 그렇게 된다면, 실제 Negative 분포(TN) 중 FP가 엄청나게 늘어나고 + 실제 검출되는 (TN)가 엄청나게 줄어들 것이다.
image

즉, Recall값을 높일 수록 TPR은 증가하지만, 그만큼 TNR은 줄어드는 Trade off가 생길 것이다.

이러한 변화에 대해서 TPN 및 TNR의 비율을 그래프로 그린 것이 ROC curve이다.
만약, TPN과 TNR의 비율을 그린다면 아래와 같은 모양으로 나타나게 되고,
image
TPN과 1-TNR의 비율을 그린다면, 처음 봤던 ROC curve 그래프가 나타나게 된다.
image


극단적으로 판단선을 왼쪽으로 옮겨보자.
image
이 경우, TN가 모두 FP가 되면서, TN=0이 된다.그렇다면 1-TNR은 1이 된다
FN도 0이 되어서, TPR은 1이 된다.
ROC curve 그래프 상에서는 우측상단이 될 것이다.
image


반면에, 판단선을 가장 우측으로 밀어넣으면,
TP가 모두 FN가 되면서, TP=0 -> TPR =0
FP가 모두 TN가 되면서, TNR =1 -> 1-TNR = 0이 되면, 그래프상에는 아래와 같은 점이 찍힌다.
image



요약하자면,
Accuracy가 다가 아니다.
클래스가 imbalanced한 data라면 Precision과 Recall도 봐야한다.
- Recall같은 경우, 1차 검사에서 예측값을 암환자로 다 가져와야하는 경우에 잘 봐야한다. 실제값에 대해 판정도 다 들어와야하는 경우
- Precision의 경우, 판단(예측)이 실수하면 안되는 경우에 잘봐야한다. 유죄판결한 경우, 모두 실제값이어야한다.

ROC curve는, 판단 선(cut off, decision boundary)를 움직였을 때, 얼마나 성능(결정)들이 민감한지에 대한 것이다.
AUC가 넓을 수록, 안정된 예측을 할 수 있는 모델 or 데이터이다.

+ Recent posts