Confusion Matrix 평가 지표는 특정 범주를 구분하도록 학습된 분류 모델의 예측 성능 평가를 위해 사용됩니다.
분류 모델의 예측 성능에 대해 정답/오답의 형태로도 표현할 순 있지만, 이는 데이터에 따라 많은 오류를 갖습니다.
그렇기에 여러 지표를 기반으로 분류 모델의 성능을 객관적으로 나타내고자 할 때, Confusion Matrix를 사용합니다.

Confusion Matrix는 분류 모델이 도출한 "확률"과 "임계값"을 기반으로 산출되는 행렬 형태의 지표입니다.
새로운 데이터 X에 대해, 모델은 0~1 사이의 확률을 도출하며, 일반적으로 0.5의 임계값을 통해 0/1로 변환합니다.
이 과정에서 실제 정답과 모델의 예측값으로 산출되는 4가지 정보가 있는데, 이를 TP, TN, FP, FN 이라고 합니다.
True Positive? False Negative? 해당 뜻을 이해하는 가장 쉬운 방법은 앞/뒤로 분리해서 이해하는 방법입니다.

이를 나눠서 이해해봤을 때, 앞쪽은 결과를 나타내고 뒤쪽은 분류 모델의 "예측 결과"가 됩니다.
그렇다면 False Negative를 해석한 결과는, 분류 모델은 Negative(0) 이라고 예측했지만 틀렸다! 가 됩니다.
False Positive라면? 분류 모델이 Positive(1) 이라고 예측했지만 틀렸다! 가 되는겁니다.
결국 Confusion Matrix 라는 것은, 모델의 예측과 실제 결과를 종합한 후, 이를 Matrix로 정리한 것입니다.
Confusion Matrix 까지는 알겠는데, 정리된 Matrix는 어디에 써먹나요?
이 때, 사용되는 것이 바로 Recall(재현율), Precision(정밀도), Accuracy(정확도) 등이라고 할 수 있습니다.
정확도는 일반적으로 사용되는 정답 / 전체 데이터 수로 정리되기 때문에, 쉽게 이해할 수 있습니다.
정확도를 제외한 Recall, Precision, F1 score 지표는 분류 모델 평가의 핵심 지표로, 자주 사용되는 지표입니다.
중요하기 때문에, 각각의 평가 지표에 대해 한번 정리하고 넘어가도록 하겠습니다.
1. Recall (재현율)

앞서 정리한 Confusion Matrix를 기반으로 하며, 정답인 데이터에 대해 제대로 잘 탐지했는지 묻는 지표입니다.
약간 헷갈릴 수 있지만, 조금 더 정리해보자면 전체 정답 중 아니라고(FN) 한 것은 없는지에 대한 지표입니다.
FN은 False Negative로, 모델은 Negative라고 했지만 실제 정답은 Positive인 데이터를 의미합니다.
그렇기에 실제 정답들을 놓치지 않고 잘 정답이라고 했는지에 따라, Recall의 Score가 변하게 됩니다.
2. Precision (정밀도)

Recall에 비하면 Precision은 상대적으로 조금 이해하기 쉬운 지표라고 할 수 있습니다.
분류 모델이 Positive라고 예측한 모든 데이터 중, 실제 Positive인 경우의 비율을 의미합니다.
Precision Score가 높아지기 위해선, False Positive(Positive라고 했는데, 오답인 경우)가 최소가 되어야 합니다.
그렇기에 Positive라고 예측한 데이터가, 틀리지 않고 모두 Positive인 경우 높은 Score를 도출하게 됩니다.
3. F1 score (조화평균)

앞서 설명한 Recall, Precision을 종합하여 나타낸 지표입니다.
양쪽의 지표가 모두 좋은 성적을 도출할 때, 높은 score가 산출되기에 정량적인 성능 측정에 적합합니다.
Precision과 Recall이 모두 중요하거나, 이를 평균낸 적절한 지표가 필요할 때 사용되며, 가장 많이 사용됩니다.
앞서 정의한 Confusion Matrix의 값을 활용하여, 이러한 지표들을 정의하고 산출할 수 있게됩니다.
하지만 이러한 지표들은 한가지 큰 문제가 있습니다.
Positive와 Negative를 구분하는 기준인 임계값(Threshold)이 고정된 값이기 때문입니다.
다시 말해, 임계값이 변경될 때마다 Positive와 Negative의 비율이 달라지고, Precision과 Recall이 변화합니다.
만약 우리가 학습된 모델의 전반적인 성능을 알고싶다고 할 때, 명확한 성능을 알기 어렵게 됩니다.
그렇기에 고정된 임계값이 아닌, 변화하는 임계값을 통해 모델의 전반적인 성능을 체크하자! 가 핵심입니다.
이 때, 사용되는 지표가 AUC score이며, 이는 ROC curve를 통해 계산될 수 있습니다.
그렇다면 ROC curve는 어떻게 만들어낼 수 있을까요?
ROC curve에선 내가 가진 데이터의 모든 예측 값(확률)을 모든 임계값으로 활용합니다.
정리하자면, 예측된 확률을 기준으로 모든 값을 정렬한 뒤, 예측된 확률 하나하나를 모두 임계값으로 사용합니다.
예시 데이터를 담은 표를 함께 확인해보겠습니다.

10개의 샘플 데이터가 있다고 했을 때, 모델의 예측값을 기준으로 모든 데이터를 정렬합니다.
이후 가장 높은 확률을 임계값으로, 각각 Precision과 Recall을 계산합니다.

다음 데이터에 대해 임계값을 설정한 뒤, 동일하게 Precision과 Recall을 계산한다면 위와 같습니다.
이런 단계로, 모든 데이터에 대해 임계값을 설정해준 뒤, Precision과 Recall을 구하는 단계를 반복합니다.

이렇게 모든 데이터에 대해 Confusion Matrix, Recall, Precision을 계산할 수 있으며, 이를 통해 다음을 계산할 수 있습니다.

True Positive Rate는 Recall과 동일하며, 우리는 Matrix를 통해 모든 구간의 FPR의 값만 구해주면 됩니다.

내가 가진 모든 데이터 포인트를 통해, 그래프에 점을 찍어준 뒤, 점 사이를 연결해준 것이 ROC curve 입니다.
위 이미지처럼 우리 데이터를 나타낸다면, 우리 데이터는 총 10개의 점을 갖게 됩니다.
온라인이나 자료로 떠도는 ROC curve가 곡선의 형태를 내는 이유는, 무수히 많은 데이터를 활용했기 때문입니다.
그렇기에 원래 계단 형태로 그래프가 도출되는 것이 정확하게 맞는 것이기에, 혼동하시면 안됩니다.
마지막으로 이렇게 만들어진 ROC curve를 기반으로, AUC score를 산출할 수 있게됩니다.
AUC score는 Area Under the Curve의 줄임말로, 커브 아래 영역의 면적을 의미합니다.

아래 면적의 크기가 넓으면 넓을수록, 즉 curve의 모양이 11시 방향으로 커질수록 좋은 모델이라고 할 수 있습니다.
이러한 AUC score는 단 하나의 임계값이 아닌, 다양한 임계를 통해 모델을 평가합니다.
그렇기에 모든 구간에서, 모델의 전반적인 성능을 확인하기 좋고, 모델의 성능을 명확하게 이해할 수 있습니다.
이 외에도 Multi-Class에선 Confusion Matrix, ROC curve와 macro, micro, weighted의 개념 또한 존재합니다.
이번 포스트에선 다루지 않으니, 관심이 있으신 분들은 위 키워드로 내용을 검색해보시면 좋을 것 같습니다.
긴 글 읽어주셔서 감사합니다.