본문 바로가기
내가 공부한 것들

[알고리즘] 혼동행렬(Confusion matrix)로 알고리즘 성능 평가하기

by 2ns 2022. 8. 11.

 

 

프로젝트에서 개발한 알고리즘의 효과 평가를 해야하는 업무를 현재 진행하고 있다.

무언가를 예측하거나 분류하는 알고리즘을 만들게 되면 반드시 거쳐야 하는 관문이 있다.

 

혼동행렬을 만들어서 알고리즘의 성능을 나타내는 여러가지 지표를 계산하는 것이다.

 

혼동행렬은 머신러닝 또는 로지스틱 회귀분석과 같은 분류 계열의 통계적 기법을 활용할 때, 알고리즘이 예측한 것이 실제 예측한 것과 맞는지를 실제 값과 예측 값을 함께 나타내어 한눈에 알아보기 쉽게 시각화 한 표다. 

 

예를 들어 위험 상황을 예측하는 알고리즘을 테스트 한다고 가정해보자.

    실제
    위험함 위험하지 않음
예측 위험함 True Positive (TP) False Positive (FP)
위험하지 않음 False Negative (FN) True Negative (TN)

 

True Positive : 실제로 위험한 상황인데, 알고리즘도 위험하다고 예측한 경우 (알고리즘이 맞춘 경우)

False Positive : 실제로는 위험하지 않은 상황인데, 알고리즘은 위험하다고 예측한 경우 (= Type I Error와 같음)

False Negative : 실제로는 위험한데, 알고리즘은 위험하지 않다고 예측한 경우 (= Type II Error와 같음)

True Negative : 실제로 위험하지 않은 상황이고, 알고리즘도 위험하지 않다고 예측한 경우 (알고리즘이 맞춘 경우)

 

처음엔 헷갈릴 수 있는데, 딱 두가지만 기억하면 절대 잊어버리지 않을 수 있다.

 

1. True, False는 알고리즘이 맞췄는지 틀렸는지를 나타냄
2. Positive, Negative는 알고리즘이 예측한 방향 (Positive면, 알고리즘이 Positive라고 예측한 것)

 

FP와 FN는 각각 1종 오류(Type I Error), 2종 오류 (Type II Error)와도 같다.

아래 그림에 이해하기 쉽게 설명을 해놓았다. H0을 위험하지 않다고 하는 귀무가설로 놓고, H1을 위험하다고 하는 대립가설로 놓으면 위의 혼동행렬과 의미가 같게 된다.

 

다시 돌아와서 예시를 통해 혼동행렬을 조금 더 쉽게 이해해보자. 

 

총 200건의 상황 중 100건의 위험상황과 100건의 위험하지 않은 상황에 대한 분류를 수행했다고 가정해보자.

(아래 표와 같이 나타낼 수 있다)

 

    실제
    위험함 (100건) 위험하지 않음 (100건)
예측 위험함
(120건 예측)
80 40
위험하지 않음
(80건 예측)
20 60

 

위의 혼동행렬 표로 알 수 있는 사실은

알고리즘이 120건을 위험하다고 예측했는데, 80건은 실제로 위험했고, 40건은 실제로 위험하지 않았다는 것

알고리즘이 80건을 위험하지 않다고 했는데, 20건은 실제로 위험했고, 60건은 실제로 위험하지 않았다는 것이다.

 

혼동행렬 표만 가지고도 위와 같은 해석을 할 수 있지만,

위의 해석들 보다 더 직관적으로 성능을 나타낼 수 있도록 수치화하여 지표로 사용되는 것들이 있다.

 

간단히 4개를 소개하면 다음과 같다.

 

1. 정확도 (Accuracy) : $\cfrac{TP + TN}{TP + FP + FN + TN}$ 

    : 전체 중 맞춘 것의 개수가 얼만큼인지를 나타내는 지표

 

2. 정밀도 (Precision) : $\cfrac{TP}{TP+FP}$

   : 위험하다고 예측한 것 중에 실제로 위험한 것의 개수를 나타내는 지표

 

3. 재현율 (Recall) = 민감도 (Sensitivity) : $\cfrac{TP}{TP+FN}$

   : 실제 위험한 것 중에 위험하다고 예측한 것의 개수를 나타내는 지표

 

4. 특이도 (Specificity) : $\cfrac{TN}{TN+FP}$

   : 실제 위험하지 않은 것 중에 위험하지 안하고 예측한 것의 개수를 나타내는 지표

 

 

각 지표들의 장단점이 있어서 하나만 구하기 보다는 보통 4가지를 함께 구하며,

F1 score 또는 ROC cuve 등을 계산하여 다각적으로 알고리즘의 성능을 확인하기도 한다

 

(나머지 지표들은 다음 포스팅에서)...