drawROC() 함수는 ROC 곡선을 만드는 상세한 방법을 포함하고 있습니다(코드 3-7 참조). 다음과 같은 작업을 수행합니다.
• 신경망의 시그모이드 출력(확률)에 대해 임계값을 변경하여 각기 다른 분류 결과를 얻습니다.
• 각 분류 결과와 실제 레이블(타깃)을 사용해 TPR과 FPR을 계산합니다.
• FPR에 대한 TPR 그래프를 그려서 ROC 곡선을 만듭니다.
코드 3-6에서 보듯이 훈련 초기(에포크 001)에는 모델의 가중치가 랜덤하게 초기화되기 때문에 ROC 곡선이 점 (0, 0)과 점 (1, 1)을 연결하는 대각선에 매우 가깝습니다. 훈련이 진행됨에 따라 ROC 곡선은 왼쪽 위 모서리 쪽으로 점점 더 올라갑니다. 왼쪽 위 모서리는 FPR이 0이고 TPR이 1인 지점입니다. 0.1과 같이 주어진 FPR 수준에 초점을 맞추면 훈련을 진행함에 따라 TPR 값이 증가하는 것을 볼 수 있습니다. 쉽게 말해서 잘못된 경보(FPR)를 일정 수준으로 고정한다면 훈련이 진행될수록 높은 수준의 재현율(TPR)을 달성할 수 있습니다.
이상적인 ROC 곡선은 왼쪽 위 모서리에 가깝게 구부러진 26 모양의 곡선입니다. 이때 최고 성능의 이진 분류기인 100% TPR과 0% FPR을 얻을 수 있습니다. 하지만 실전 문제에서는 모델을 향상시켜 ROC 곡선을 왼쪽 위 모서리에 가깝게 만들 수 있을 뿐입니다. 왼쪽 위 모서리는 이론적인 이상일 뿐 절대 달성할 수 없습니다.
ROC 곡선의 모양과 그 의미에 대한 설명을 토대로 얼마나 좋은 ROC 곡선인지 그 아래 면적을 계산하여 정량화할 수 있습니다. 즉, 최댓값이 1인 단위 사각형 공간을 ROC 곡선과 x축이 얼마나 감싸고 있는지 측정합니다. 이를 AUC(area under the curve)라고 부르며 코드 3-7의 코드로 계산합니다. 이 측정값이 거짓 양성과 거짓 음성 사이의 균형을 잡는 데 정밀도, 재현율, 정확도보다 낫습니다. 랜덤한 예측의 ROC 곡선(대각선)의 AUC는 0.5입니다. 모양의 이상적인 ROC 곡선의 AUC는 1.0이 됩니다. 훈련이 끝난 피싱 감지 모델의 AUC는 0.98을 달성했습니다.