AI 개념/기계학습, 심층학습

머신러닝 알고리즘의 성능평가: 혼동 행렬 (TP|FP|FN|TN)

AIstarter 2024. 3. 22. 18:36

해당 포스트에서는 머신러닝 알고리즘의 성능평가를 하는 방식 중 하나인
혼동행렬을 통한 정밀도 및 재현율 구하는 방식을 다뤄보고자 합니다.

 

[목차]

1. 정확도와 모순된 결과

2. 정밀도와 재현율 구하기 

   - 혼동 행렬


1. 정확도

모델의 성능을 표현하기 위한 가장 흔한 방법은 정확도를 나타내는 것입니다.

 

정확도는 다음과 같이 표현합니다.

▶ 정확도(accuarcy) = 올바르게 분류한 샘플 수 / 전체 샘플 수

 

예를 들어, 전체 샘플 100개 중 80개를 맞췄다면 정확도는 80입니다.
당연히 맞춘 개수, 즉 정확도가 높은 것이 성능이 좋다고 말할 수 있습니다.

 

하지만,  biased(편향된) 환경에서는 정확도는 높지만 결과가 긍정적으로 나오는 이상한 결과가 발생할 수 있습니다.  
우리는 예측할 때  "~가 맞다/~가 아니다" 두 가지 경우를 다 예측하게 됩니다. 예를 들어, 10개 중 8개가 "사탕이다"라고 예측하면, 나머지 2개는 "사탕이 아니다"라고 예측하는 것과 같습니다.
해당 개념을 머리에 두고, 아래 예시를 통해 정확도는 높지만 결과가 이상한 경우를 좀 더 이해해보겠습니다.

 

(예시) 

전체 샘플 수 : 100 개

강아지 샘플 수 : 10개

강아지 아닌 샘플 수: 90개

 

다음과 같은 환경에서,
"모두 강아지가 아니다"라고 예측시,  정확도는 90/100 로 매우 높지만 강아지인 샘플 수는 하나도 맞추지 못한 것입니다.

하나도 맞추지 못했는데, 정확도가 90%로 높다는 이유로 해당 모델은 좋은 결과를 낸다고 할 수 있을까요?

해당 문제점을 고려하여 제한된 것이 Precision(정밀도)와 Recall(재현율)입니다.

 


2. 정밀도와 재현율 구하기 

정밀도와 재현율은 예측한 값과 결과값을 토대로 성능을 나타내는 방식입니다. 분류하고자하는 대상을 중심으로 성능을 보고 싶을 때, 정밀도, 재현율을 성능지표로 사용합니다. 이러한 경우 정확도보다 더 명확합니다.


이를 이해하기 위해서 다음과 같은 예시로 이해해봅시다!

 

전체 인원은 100명이고, 병이 있는 사람은 그중에 30명입니다.
이때, 20명이 병이 있다고 예측했습니다. 그 중, 실제로 병이 있었던 사람은 15명이고 없었던 사람은 5명었습니다.

그렇다면 해당 예측은 잘 한것일까요?

 

우리는 이에 대한 성능을 평가하기 위해 "정밀도와 재현율"을 사용합니다.

 

Precision(정밀도)는 병이 있다고 예측한 사람중에 실제로 병이 있는 사람의 비율이라고 생각하시면 되고,

Recall(재현율)은 실제로 병이 있는 사람중에 병이 있다고 예측한 사람의 비율이라고 생각하면 됩니다.

 

그럼 위의 경우에는

  정밀도 = 실제로 병이 있는 사람 / 병이 있다고 예측한 사람 ☞ 15 / 20

  재현율 = 병이 있다고 예측한 사람 /실제로 병이 있는 사람 15 / 30

로 평가할 수 있습니다. 

 

 

위와 같은경우를 구하기 위해 사용되는 것이 바로  혼동행렬(Confusion Matrix)입니다.

 

이는 예측한것이 실제로 맞는지 틀리는지를 나타내는 행렬이다.

TP   |   FP  |  FN  |  TN 다음과 같이 총 4가지로 표현하는데,

- 해당 기호의 앞은 T/F로, True와 False를 의미합니다.

  이는 예측한 것이 맞는지 틀린지를 나타냅니다. 즉, 예측한 것이 맞으면 T, 예측한 것이 틀리면 F이 붙습니다. 

- 해당 기호의 뒷부분은 P/N으로, Positive와 Negative를 의미합니다.

  이는 무엇이라고 예측했는지를 나타냅니다. 즉,  '~다'라고 예측한 경우는 P, '~아니다'라고 예측한 경우는 N이 붙습니다.

 

이를 토대로 식으로 표현하면, 아래와 같이 표현됩니다.

  정밀도
= 실제로 병이 있는 사람 / 병이 있다고 예측한 사람

= 실제로 병이 있는 사람 / (병이 있다고 예측한 사람 중 틀린 인원수 + 병이 있다고 예측한 사람 중 맞은 수)

 

  재현율
= 병이 있다고 예측한 사람 / 실제로 병이 있는 사람 

= 병이 있다고 예측한 사람 / (병이 있는데 맞게 예측한 경우 + 병이 있는데 없다 예측한 경우)

 

이상적인 경우라면 100%, 즉 1이 나오면 Best 입니다.

 

 

[정리]

지금까지 이야기한 정확도, 정밀도, 재현율을 한번에 정리하면 다음과 같습니다.