Confusion Matrix

분류기의 성능을 평가하는 기본적인 방법은 A라는 클래스를 A라고 제대로 예측한 경우와 그렇지 않은 경우가 얼마나 많은지 세어보는 것이다. 이렇게 만들어진 일종의 table을 confusion matrix라 부르며 우리말로는 오차행렬, 정오행렬 혹은 혼동행렬로 번역한다. 아래의 [그림1]은 confusion matrix의 예시를 나타낸다.

[그림 1] confusion matrix 예시

[그림 1]을 자세히 살펴보자. Confusion matrix의 각 행은 실제 클래스를 나타내고 열은 예측한 클래스를 나타낸다. 즉, Confusion matrix의 첫번째 행은 100개의 음성클래스 데이터 중 95개를 음성 클래스로 분류하였고, 5개는 양성 클래스로 오분류함을 의미한다. 완벽한 분류기라면 대각성분만 0이 아닌 값이 되게 된다.


분류기의 성능 지표

[그림 2]와 같이 confusion matrix를 일반화 된 용어를 사용하여 이진 분류에 대하여 나타내보자. [그림 2]의 각 행렬에 적혀있는 용어들이 의미하는 바는 다음과 같다.

  • True Negative (TN): 음성 클래스를 음성 클래스로 예측
  • False Positive (FP): 음성 클래스를 양성 클래스로 예측
    - detection theory에서는 false alarm 혹은 Type-I error라고 부른다.
  • False Negative (FN): 양성 클래스를 음성 클래스로 예측
    - detection theory에서 missed detection 혹은 Type-II error라고 부른다.
  • True Positive (TP): 양성 클래슬르 양성 클래스로 예측
  • 명명 규칙: 정답 여부(True/False)를 앞에쓰고, 예측 결과(Positive/Negative)를 뒤에 쓴다.

[그림 2] Confusion matrix와 성능 지표간의 관계

Confusion matrix로부터 분류기의 성능을 측정할 수 있는 주요 지표들을 아래와 같이 도출할 수 있다.

Accuracy (정확도)

  • TP+TNTP+FP+TN+FN=제대로 분류한 데이터 수전체 데이터 수\frac{TP+TN}{TP+FP+TN+FN}=\frac{\text{제대로 분류한 데이터 수}}{\text{전체 데이터 수}}
  • 전체 데이터 중 정확히 분류한 데이터의 비율을 나타낸다.
  • 반대로 전체 데이터 중 잘못 분류한 데이터의 비율을 Error Rate이라 하며, Accuracy = 1-Error Rate이다.
  • 어떤 면에서 보면 가장 직관적인 지표이며 가장 대표적인 지표이기도 하다.

Fall-Out

  • FPTN+FP=양성으로 잘못 분류한 음성 데이터 수전체 음성 데이터 수\frac{FP}{TN+FP}=\frac{\text{양성으로 잘못 분류한 음성 데이터 수}}{\text{전체 음성 데이터 수}}
  • False Positive Rate (FPR), false alarm rate (FAR)이라고도 불림.
  • ROC 커브를 그리는데 사용

Specificity (특이도)

  • TNTN+FP=제대로 분류한 음성 데이터 수전체 음성 데이터 수=1FPR\frac{TN}{TN+FP}=\frac{\text{제대로 분류한 음성 데이터 수}}{\text{전체 음성 데이터 수}}=1-\text{FPR}
  • 통계학에서는 True Negative Rate (TNR)이라고 부른다.

Precision (정밀도)

  • TPTP+FP=양성으로 예측된 데이터 중 실제 양성인 데이터 수양성으로 예측된 데이터 수\frac{TP}{TP+FP}=\frac{\text{양성으로 예측된 데이터 중 실제 양성인 데이터 수}}{\text{양성으로 예측된 데이터 수}}
  • 검출된 결과가 얼마나 정확한지를 나타내는 지표이다.
  • 예를 들어, 이미지에서 사람만 detection 하고자 할 때, 얼마나 사람만 잘 골라서 detection하는지를 정량적으로 평가한다.
  • 통계학에서 Positive Predictive Value (양성 예측도)라고도 불린다.
  • 단어의 의미상 accuracy와 precision이 혼동될 수 있는데, accuracy는 시스템의 결과가 참값에 얼마나 가까운지를 나타내는 척도이고, precision은 시스템이 얼마나 일관된 값을 출력하는지를 나타내는 척도로 이해하면 된다. 다시 말해, accuracy는 시스템의 바이어스를 나타내고 precision은 시스템의 반복 정밀도를 나타낸다 [3].

Recall (재현율)

  • TPTP+FN=정분류한 양성 클래스의 수실제 양성 클래스의 수\frac{TP}{TP+FN}=\frac{\text{정분류한 양성 클래스의 수}}{\text{실제 양성 클래스의 수}}
  • Probability of Detection과 같은 의미이다.
  • Sensitivity(민감도), Hit Rate, True Positive Rate (TPR)이라고도 불린다.
  • 예를 들어, 이미지에서 사람을 detection하고자 할 때, 사람을 얼마나 빼먹지 않고 잘 검출하는지를 나타낸다.

정밀도/재현율 트레이드오프

분류기는 각 샘플의 점수를 계산하여 정해진 threshold보다 크면 이를 양성 클래스로 분류하고 threshold보다 작으면 음성 클래스로 분류한다. 따라서 정밀도와 재현율은 정의에 의해 서로 반비례 관계(즉, trade-off 관계)에 있다. (정밀도는 모델의 입장에서 평가하는 지표이고, 재현율은 데이터의 입장에서 평가하는 지표이다.) 즉, threshold를 높이면 음성 클래스를 양성 클래스로 오분류하는 경우가 감소하여 정밀도는 좋아지겠지만, 양성 클래스를 정분류하는 경우가 감소하기 때문에 재현율은 감소하게 된다.([그림 3] 참고) 극단적으로 threshold를 마이너스 무한대로 할 경우, 모든 샘플을 양성 클래스로 분류할 것이고, 이때 재현율은 100%가 되지만 정밀도는 최소가 된다.

[그림 3] Threshold 변화에 따른 정밀도와 재현율 (source: [1])

좋은 정밀도/재현율 트레이드오프를 선택하는 방법은 재현율에 대한 정밀도 곡선(precision-recall curve, PR 곡선)을 그려보고, 정밀도가 급격하게 감소하기 시작하는 하강점 직전을 정밀도/재현율 트레이드오프로 선택하는 것이 좋다. 물론 응용에 따라 정밀도와 재현율의 상대적인 중요도가 달라지기 때문에 둘의 균형점을 선택하는 것이 항상 올바른 선택은 아니다.

[그림 4] 정밀도-재현율 곡선 (source: [9])

F1F_1 Score

  • 정밀도/재현율 트레이드오프 관계에 의해 정밀도와 재현율 어느 한 쪽에 치우치지 않고 둘 모두를 반영하여 분류기의 성능을 측정하기 위해 사용되며, 아래와 같이 정밀도와 재현율의 조화평균으로 정의된다.
  • 21/정밀도+1/재현율=2×정밀도×재현율정밀도+재현율=TPTP+FN+FP2\frac{2}{1/정밀도 + 1/재현율} = 2\times\frac{정밀도 \times 재현율}{정밀도 + 재현율}=\frac{TP}{TP+\frac{FN+FP}{2}}
  • 0~1사이의 값을 가지며, 높을 값일 수록 좋다. (정밀도와 재현율이 같을 때, 가장 높다.)
  • 참고로 일반화 된 FF score 식은 다음과 같다. ([1-2, 4] 참고)
    - β>1\beta>1이면 재현율이 강조
    - β<1\beta < 1이면 정밀도가 강조
    - β=1\beta=1일 때의 점수를 F1F_1 score라 한다.
    F=1αPrecision+1αRecall=(1+β2)Precision×Recallβ2×Precision+Recall=(1+β2)TP(1+β2)TP+β2FN+FP,    where    β2=(1α)/α\begin{aligned} F &= \frac{1}{\frac{\alpha}{Precision}+\frac{1-\alpha}{Recall}} \\ &= \left(1+\beta^2\right)\frac{Precision\times Recall}{\beta^2\times Precision + Recall} \\ &= \frac{\left(1+\beta^2\right) TP}{\left(1+\beta^2\right)TP + \beta^2FN + FP} , \ \ \ \ \text{where } \ \ \ \beta^2=(1-\alpha)/\alpha \end{aligned}

ROC Curve

Receiver Operating Charateristic (ROC) Curve는 우리말로 수신기조작특성 곡선이라고 부른다. 이름이 다소 투박한데 원래 2차 세계대전 때 레이다 시스템의 성능을 평가하기 위한 목적으로 고안되었기 때문이다.

ROC 곡선은 detection theory를 공부한 사람이라면 조금은 친숙한 지표일 것인데, 가로 축에는 FPR = 1 - Specificity 값을 표시하고, 세로 축에는 Recall 값을 표시한다. (detection theory에서 사용하는 용어로는 가로 축에는 FAR, 세로 축에는 Probability of Detection)

Precision과 Recall이 트레이드오프 관계인 것처럼 TPR과 Recall 역시 트레이드오프 관계에 있다. (detection theory에는 FAR과 Probability of Detection이 트레이드오프 관계라고 부르며, target FAR에서 Probability of Detection을 최대화하는 전략을 Neyman-Pearson Dececion Rule이라고 한다.) 즉, FPR은 작을수록 좋고, TPR은 클수록 좋은데, threshold를 높이게 되면 FPR은 감소하지만 TPR도 함께 감소하게 된다. 이상적인 분류기는 FPR이 0이고, TPR이 1이므로 ROC 곡선의 좌측 상단에 위치하며, Naive 분류기는 [그림 5]의 점선으로 표시된 위치에 위치한다. 대부분의 분류기는 [그림 5]의 파란 실선과 같은 ROC 곡선을 갖는다.

[그림 5] ROC 곡선 (source: [6])

AUC (Area Under Curve)

ROC 곡선의 최적점이 그래프의 좌측 상단이기 때문에 더 좋은 분류기는 ROC 곡선의 아래 면적이 더 크게 된다. 따라서 AUC를 구하여 분류기 간의 성능을 정량적으로 비교할 수 있다. 파이썬의 sklearn 라이브러리에서는 다음과 같이 AUC를 계산하는 함수를 제공한다.

from sklearn.metrics import roc_auc_score
roc_auc_score(y_train, y_score) $ y_score는 decison_function() method의 출력

ROC 곡선 vs. PR 곡선

앞에서 PR 곡선과 ROC 곡선을 살펴보았는데 언제 어느 곡선을 사용하는 것이 적절한지에 대하여 간략히 요약하면 다음과 같다.

  • PR 곡선: 데이터가 불균형, FN보다 FP가 더 중요한 경우 (양성 클래스 탐지가 더 중요, e.g., 암 환자, 자율주행보조)
  • ROC 곡선: 데이터가 균형, FN와 FP의 중요도가 비슷한 경우 (e.g., MNIST)
  • ROC 곡선은 TPR(Recall)과 FPR(Fall-Out)을 사용하기 때문에 데이터 불균형에 덜 민감 (confusion matrix와 TPR, FPR 계산식 참고
  • PR 곡선에 사용되는 정밀도와 재현율을 계산할 때, TN는 관여하지 않음. 즉, 음성 클래스에 대한 비중이 적다는 것을 의미

다중분류기의 성능 평가

앞에서 분류기의 성능 지표를 살펴봄에 있어 우리는 이진 분류 문제만을 고려하였다. 그렇다면 클래스가 3개 이상인 다중 분류 문제에서 정밀도, 재현율, F1F_1 score 등은 어떻게 계산할 까?

방법은 간단하다. 예를 들어, F1F_1 score를 구한다고 할 때, 각 레이블에 대한 F1F_1 score를 구하고 이들을 간단하게 평균내면 된다. 만약, 클래스마다 중요도가 다르거나 샘플 수가 다르다면 클래스별 지지도로 가중치를 주어 weighted mean을 구한다.

보다 자세한 예제를 보고 싶다면 참고자료 [8]을 참고하라.


참고 자료

[1] 핸즈온 머신러닝: 사이킷런, 케라스, 텐서플로 2를 활용한 머신러닝, 딥러닝 완벽 실무
[2] https://en.wikipedia.org/wiki/F-score
[3] https://darkpgmr.tistory.com/162
[4] https://eungbean.github.io/2018/09/11/evaluation-metrics/
[5] https://sumniya.tistory.com/m/26
[6] https://www.medcalc.org/manual/roc-curves.php
[7] https://hwi-doc.tistory.com/entry/%EB%AA%A8%EB%8D%B8-%ED%8F%89%EA%B0%80%ED%95%98%EA%B8%B0-%EC%A0%95%ED%99%95%EB%8F%84%EB%A7%8C-%EB%86%92%EC%9C%BC%EB%A9%B4-%EC%A2%8B%EC%9D%80-%EB%AA%A8%EB%8D%B8
[8] https://towardsdatascience.com/multi-class-metrics-made-simple-part-i-precision-and-recall-9250280bddc2
[9] https://www.listendata.com/2019/07/precision-recall-curve-simplified.html

profile
연구와 개발의 중간 어디쯤

0개의 댓글