들어가기에 앞서, 먼저 질문을 하나 드리겠습니다. 여러분은 Loss와 Metric의 차이를 설명할 수 있으신가요? 예를 들어 RMSE(Root Mean Square Error)라는 개념은 Loss 함수로도 사용되기도 하고, 회귀 모델의 Metric으로 사용되기도 합니다. 단순히 수식의 차이로 설명할 수는 없겠죠? 오히려 두 개념은 사용되는 시점과 용도가 다르다고 할 수 있겠습니다.
💡 Metric 함수를 Loss 로 사용하면 안되는 이유 💡
머신러닝 모델의 성능을 평가하는 척도인 metric 함수를 그대로 loss 함수로 사용하기에는 여러 문제점이 있어 적합하지 않습니다.
1. 대부분의 metric 함수는 불연속적이라 미분이 불가능한 형태입니다. 하지만 모델 학습에 주로 사용되는 경사하강법 계열의 알고리즘들은 미분 가능한 함수를 필요로 합니다.따라서 metric을 그대로 사용하면 이 알고리즘들을 적용할 수 없게 됩니다.
2. metric 함수는 그 특성상 값이 크게 변동하는 경향이 있습니다. 이는 최적화 과정을 매끄럽지 못하게 만들어 학습을 방해하는 요인이 됩니다. 모델이 local minimum에 빠지거나 발산할 위험이 커지는 거죠.
3. metric을 loss로 사용하면 모델이 학습 데이터에만 과도하게 최적화되는 과적합 문제가 발생할 수 있습니다. 일반적인 환경에서 실제 성능은 오히려 낮아질 수 있다는 이야기입니다.
4. 일부 metric은 전체 데이터에 대해서만 계산 가능한 경우가 있어, mini-batch를 사용하는 학습 과정에 적용하기 어려울 수 있습니다. 이는 계산 효율 측면에서도 좋지 않습니다.
이런 이유들로 인해, 보통은 cross-entropy나 MSE 같이 미분 가능하고 최적화에 적합한 loss 함수를 따로 사용하고, metric은 학습 과정을 모니터링하고 모델을 선택하는 평가 도구로 활용하는 것이 권장됩니다. 이렇게 하면 안정적인 학습과 좋은 일반화 성능을 동시에 이끌어낼 수 있습니다.
아래의 링크를 읽어보시면 더욱 상세한 설명을 알 수 있습니다.
https://modulabs.co.kr/blog/loss-versus-accuracy/

전체 표본 중 정확히 분류된 표본의 수
이진 분류일 때 정확도를 
이렇게 표현할 수 있습니다.
이 개념은 모델이 양성으로 규정한 것이 얼마나 정확한지를 보고 싶은 것입니다. 
모델이 음성으로 규정한 것에 대해서는 크게 관심이 없습니다. 정밀도가 높다는 것은 FP가 낮다는 것입니다. 즉 모델이 양성으로 잘못 규정한 것이 적을수록 정밀도는 올라갑니다.
이 개념은 실제로 양성이 것들이 얼마나 모델에 의해 정확하게 탐지되었나를 보고 싶은 것입니다.
실제로 음성인 것을 양성으로 잘못 규정한 것에 대해서는 관심이 없습니다. 재현율이 높다는 것은 FN이 낮다는 것입니다. 즉 모델이 실제 양성을 분류해 내지 못한 경우가 적을 수록 재현율은 올라갑니다.

위의 Precision과 Recall은 단독으로 평가 척도로 사용하기에 부족한 면이 있습니다.
모든 환자를 양성으로 진단해버려 Recall을 높이거나, 조금이라도 의심스러운 제품을 모두 불량으로 분류해 Precision을 높이는 예가 있습니다.
이러한 극단적인 방법들은 특정 평가 척도를 최적화하기 위해 다른 중요한 측면을 희생시키는 결과를 낳습니다. 실제로는 Precision과 Recall 간의 균형이 중요하며, 이 균형을 측정하기 위해 F1 스코어와 같은 종합적인 척도가 자주 사용됩니다.

F1 score는 위의 수식에서 β가 1이 될 때를 말합니다. 이는 Precision과 Recall의 조화평균이 되는 값으로 분류 모델의 훌륭한 척도가 됩니다.
PR(Precision-Recall) 커브는 Recall을 X축, Precision을 Y축에 놓고 Threshold 변화에 따른 두 값의 변화를 그래프로 그린 것입니다.

위 그림을 보면 Precision과 Recall 사이의 트레이드오프 관계를 확인할 수 있습니다. Threshold값에 따라 우리가 얻게 되는 Precision, Recall 값은 저 그래프상의 어딘가가 될 것입니다. 물론 우리가 원하는 값은 Precision이든 Recall이든 모두 1에 가깝기를 원합니다. 이상적으로는 그래프가 (1, 1)에 찍히면 좋겠습니다만, 가급적 위 그래프가 (1, 1)에 근접하도록 그려지길 바랍니다.
그래서 Threshold 값에 무관하게 모델의 전체적인 성능을 평가하는 방법으로, 위 PR 커브 아래쪽 면적을 계산하는 방법이 있습니다. 이것을 AUC(Area Under Curve) 값이라고 합니다. PR AUC를 계산하는 방법으로 다음과 같이 사이킷런에서 제공하는 average_precision_score 함수를 사용합니다.

위 수식의 특성을 살펴보면, average_precision_score(AP) 값은, n 값을 무한히 크게 한다면 아주 작은 Recall 구간에 대해 Pn 값을 적분하는 것과 같게 됩니다. 그러므로 PR 커브의 아래쪽 면적인 PR AUC와 같은 의미가 되겠군요. 하지만 사이킷런 문서에서는 average_precision_score와 PR AUC가 구현 측면에서 약간 다르다고 설명하고 있습니다. 두 개념이 의미적으로 비슷하게 사용될 수 있다고만 이해하면 될 것 같습니다.
ROC(Receiver Operating Characteristic Curve) 는 수신자 조작 특성 곡선이라는 단어로 표현할 수 있습니다.
ROC는 앞서 계산해보았던 Confusion Matrix 수치를 활용해, 분류기의 분류 능력을 그래프로 표현하는 방법입니다. 물론 이 그래프도 PR 커브와 마찬가지로 분류기의 Threshold 값의 변화에 따라 Confusion Matrix에 생기는 변화로 인해 그려지는 것입니다.
ROC를 그리는 축인 TP Rate과 FP Rate은 Precision, Recall과 비슷해보이지만 조금 다른 개념입니다.
TP Rate과 FP Rate은 아래의 수식과 같습니다.

위 그림은 ROC 그래프의 예시이며 점선이 ROC입니다.
TP Rate(TPR)의 수식을 잘 보면 실은 우리가 잘 아는 Recall과 같은 것입니다. FP Rate는 1-Specificity라고 소개되어 있는데, Specificity라는 것은 음성 샘플에 대한 Recall이라고 볼 수 있습니다.

위 그림은 ROC AUC(Area Under the ROC Curve) 를 보여주는 회색 영역으로, 저 영역의 넓이가 넓은 모델일수록, 상대적으로 좋은 성능을 보여준다고 합니다.
아주 이상적으로 Precision과 Recall이 전부 1이 되는 완벽한 모델이라면 ROC 커브에서는 어디에 점이 찍힐까요? 네, 바로 (0, 1)일 것입니다. 양성과 음성에 대한 Recall이 모두 1이 될 테니 TPR은 1, FPR은 0이 될 것입니다.
몇가지 극단적인 경우를 생각해 봅시다. 모델이 모든 샘플에 대해 양성이라고 분류한다면 어떨까요? 이땐 이 분류기가 (1, 1)에 찍힐 것입니다. 반대로 모든 샘플에 대해 음성이라고 분류한다면 이 분류기는 (0, 0)에 찍힐 것입니다. 이번엔 완벽한 랜덤 분류기를 가정해 봅시다. 이 분류기는 양성이든 음성이든 무관하게 p의 확률로 양성이라고 분류할 것입니다. 이 랜덤분류기의 Recall은 p가 될 것입니다. 음성에 대한 Recall도 p가 될 테니 이 분류기는 (p, 1-p)에 찍힐 것입니다.
👏 의미있는 분류기라면 y = x의 그래프보다 위쪽에 그려져야하며 (0, 1)에 가깝게 그려질수록 우수한 분류기라 볼 수 있습니다.
즉, ROC AUC가 클수록 상대적으로 좋은 성능의 모델이라고 할 수 있습니다.