본문 바로가기

Signal Processing & Machine Learning

[모델 평가] Confusion matrix (TP, TN, FP, FN) 및 단일/다중 클래스 평가 방법 (1)

포스팅에서는 단일 다중 분류 모델에서, 모델의 성능을 평가하기 위한 다양한 performance measures 대하여 포스팅한다



1. 목적


분류 모델 평가 하기 위해서는 다양한 평가 기준들이 존재한다대표적으로, 정말 간단하게는 정확도 또는 오차율 등으로 분류 성능을 테스트하게 되지만, 이러한 단순한 방법으로 performance 표현하는 것은 분류 모델의 신뢰성을 떨어뜨린다


논문이나 질병 관련 자료 등을 보면, Performance measures에는 정말 다양한 측정 방법들이 있고, 관련 분야에 종사하는 분들은 모두 번씩 들어봤을 익숙한 키워드들이다


- 특이도 (specificity), 민감도 (sensitivity), FPR (false positive rate), +P or PPV (positive predictivity value), 정밀도 (precision), 재현율 (recall), 오답률 (detection error rate)


단어 자체만 봤을 때는, 전혀 감지 오지 않는다. 같은 의미 (수식) 다르게 쓰는 표현도 존재할 뿐만 아니라, '특이도' 같은 경우엔, 뭐가 특이하다는 것인지 전혀 수가 없다. '재현율' 경우, 재현한다는 것인지 도무지 수가 없다


분류를 , '정답'이면 '정답' 것만 찾으면 되지, 우리는 저렇게 어려운 방법들을 모두 사용하여 평가를 해야 하는 것일까

분류의 성능은 단순히 '정답' 아닌, '오차'까지 모두 고려해주어야 한다. 모든 것에는 완벽한 '정답' 없기 때문이다. 말인 즉슨, 단순히 'A' 'B' 분류할 , 100% 정확한 결과는 나올 있다. 하지만, 실세계에 존재하는 다양한 데이터를 이용한 분류 모델에는, '오차' 존재하지 않을 수가 없다


예를 들어, 내가 'a'라는 원소를 가지고 학습된 'A' 모델에 분류 테스트를 했을 , 정답이 'A' 나올 있다. 하지만, 'ab'라는 원소를 가지고 학습된 'A' 모델에 분류 테스트를 했을 , 정답이 'A' 나올 경우도 있고, 학습된 'B' 모델에 분류 테스트를 했을 , 정답이 'B' 나올 경우도 생긴다

이처럼, 'A' 'B' 학습 모델에 비슷한 특징을 갖는 원소 'ab', 'A' 분류모델에 테스트 경우와 'B' 분류 모델에 테스트할 경우, 어느 한쪽에 대해 '오차' 발생할 있으며, 이는  분류 모델의 많은 최적화가 필요하다는 의미가 된다




2. TP, TN, FP, FN - 단일 분류 모델


위의 performance measures  구하기 위해선, confusion matrix가 필요하다. confusion matrix란, '혼동 행렬', 'contingency table', 'error matrix' 등으로도 표현이 된다. 각 row와 column의 제목을 제외하고, 2x2로 구성된 배열이며, 아래와 같이 표현된다. 

Predict

Reference

TP

FN

FP

TN


'Reference'는 학습시킨 분류 모델, 즉, 분류하고자 하는 클래스의 라벨을 의미한다. 'Predict'는 학습된 분류 모델로 성능을 예측한 결과를 의미한다. Confusion matrix의 2x2 배열은 TP, FN, FP, TN으로 채워진다. 

4가지 요소에 대하여, 설명하자면, 

TP는 True positive의 약자로, 실제 True인데, 분류모델에서 예측이 True라고 판단된 경우이다. 

TN는 True negative의 약자로, 실제 False인데, 분류모델에서 예측이 False라고 판단된 경우이다. 
FP는 False positive의 약자로, 실제 False인데, 분류모델에서 예측이 True라고 판단된 경우이다. 
FN는 False negative의 약자로, 실제 True인데, 분류모델에서 예측이 False라고 판단된 경우이다. 

이렇게 정의를 해놓아도........ 도대체 뭐라는지 잘 이해가 가지 않는다. 
이해가 잘 가도록 설명을 하자면, 

TP는, "맞췄다!!!!!!!!!!!!!!!!!" 이다. 
TN은, "오답을 오답이라 맞췄다!!!!!!" 이다. 
둘다 잘한 거다. 

반면, FP는, "아.....잘못맞췄다" 이다. FN은, "아.......놓쳤어" 이다. 
둘다 못한 거다. 

즉, TN와 TN이 높을 수록 그리고 FP와 FN이 낮을 수록 좋은 것이다. 

이렇게 설명해도 잘 이해가 안된다면 아래 표현된 그림으로 설명해본다. 




위의 그림을, 간략하게 설명하자면, 총 8개의 데이터가 입력되고 있으며 {a, b, c}는 정답 클래스 (파란색 동그라미)로 분류되어 입력되고 있고, {d, e, f, g, h}는 오답 클래스 (주황색 동그라미)로 분류되어 입력되고 있다. 
파란색 네모 원소는 '정답'의 원소이고, 주황색 네모 원소는 '오답'의 원소이다.

정답 클래스를 먼저 보면, {a, c}는 TP (맞췄다!!) 이다. 정말, 표면적으로 보면 이는 3개중에 2개를 맞춘 것으로 정답률이 꽤 높아 보이고, 수치로 66.6%로 표현할 수 있다. 하지만 이러한 측정 방법은 정말 큰 오류를 범한 것이다. 반면, {b}는 정답 클래스로 분류되어 FP (잘못맞췄다!!)로 간주되어, 표면적으로 보면 오답이 적어보인다. 

하지만, 우리는 '오답'클래스를 확인해야 한다. '정답'클래스로 분류되어야 할 나머지 4개의 원소 {d, f, g, h}들이 모두 '오답'클래스로 분류된 것이다. 파란색 원소들은 모두 정답을 놓쳤기 때문에 FN이 되고, 그 중 오답 원소 {e}는 '오답'클래스로 분류되었기 때문에 TN이다. 

최종적으로 confusion matrix는 그림의 오른쪽과 같이 표현할 수 있으며, predict와 reference의 방향을 잘 확인한 수 최종적으로 원소의 갯수가 8개, 즉, 입력데이터와 같아야 되어야 한다. 
즉, 위와 같은 모델은.. 정답이 있긴 있는데..(TP), 정답을 놓친 애들이 너무 많아.. (FN) 지기 때문에, 분류 모델을 다시 학습 시키거나 최적화 시킬 필요가 있다. 




2. TP, TN, FP, FN - 다중 분류 모델




머신러닝 기법을 적용하는 연구에서는 binary classification 중요하지만, multi-classification 해야 하는 경우가 상당히 많다. 그럼, 다중 분류에서는 confusion matrix 어떻게 표현할까?


정답은 '독립적으로 표현' 이다. 정말 쉬울 수 있다

A 클래스로 식별된 원소는 A 클래스 (정답)가 되는 것이고, B, C, D라고 식별된 것들은 A' (오답) 클래스로 분류 되는 것이다. 


이렇게 각각 구해야 하는 이유는, 추후에 최종적으로 accuracy를 구할 때, 각각 구하지 않고, 4개의 클래스로 confusion matrix를 그려서 performance를 측정하면, accuracy의 분모가 1이 되기 때문에 독립적으로 구하여 평균을 내주어야 한다. 

accuracy는 (TP+TN)/(TP+TN+FP+FN)으로, 아래 표와 같이 해당된다. 


Predict

A

B

C

D

Reference

A

TP

FN

FN

FN

B

FP

TN

FP

FP

C

FP

FP

TN

FP

D

FP

FP

FP

TN


* 다음 이어서 performance measure들에 대해서 포스팅하겠습니다.