반응형

모델을 평가하는 방법인 특이도, 민감도, 재현율, 정확도, 정밀도를 정리했습니다. 

 

 

2021. 12. 9  최초작성

2022. 2. 3  




우선 아래 표에 있는 TP, FP, TN, FN -  4가지에 해당되는 개수를 각각 구해야 합니다.

 

4가지 경우는 다음 두가지를 기준으로 합니다.   

 

  • Positive는 양성으로 판정을 의미, Negative는 음성으로 판정을 의미. 
  • True는 판정이 옳았음을 의미, False는 판정이 틀렸음을 의미.

 



민감도(sensitivity)는 전체 양성에서 검출된 양성 개수이며 재현율이라고도 합니다. 

 

민감도 = TP / (TP + FN)

 

TP + FN : 전체 양성 개수

TP          :  양성으로 판정했는데 실제로 양성인 경우



특이도(specificity)는 전체 음성 개수에서 검출된 음성 개수입니다.

 

특이도 = TN/(TN+FP)

 

TN + FP : 전체 음성 개수

TN         :  음성으로 판정했는데 실제로 음성인 경우

 

 

민감도와 특이도는 한 쪽이 증가하면 다른 한 쪽이 감소하는 경향을 보일 수 있습니다. 예를 들어 검사 항목을 모두 양성으로 판정하면 민감도는 1이 되지만 특이도는 0이 되며 반대로 모두 음성으로 판정하면 특이도는 1이 되지만 민감도는 0이 됩니다.

 

궁극적으로는 민감도와 특이도가 둘 다 높게 나오는 방법을 찾아야 합니다.



TN, FP, FN, TP 계산을 하기 위해 sklearn에서 제공하는 confusion_matrix 함수를 사용할 수 있습니다.

 

예측된 값 y_pred와 정답값 y_pred를 입력으로 사용하면 됩니다. 

두 배열의 같은 인덱스에 있는 원소를 비교하여 결과를 계산하게 됩니다. 

 

from sklearn.metrics import confusion_matrix

# 1은 양성, 0은 음성을 의미합니다.
y_true = [0, 0, 0, 1, 1, 1, 1, 1, 1, 1]
y_pred = [0, 1, 1, 0, 0, 0, 1, 1, 1, 1]

tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()

print('tn, fp, fn, tp = ', tn, fp, fn, tp)


sensitivity = tp/(tp + fn) # 민감도 또는 재현율
specificity = tn/(tn + fp) # 특이도


print('sensitivity, specificity = ', sensitivity, specificity)




실행결과 다음과 같은 결과를 얻을 수 있습니다. 

하나만 살펴보면 TN은 음성(0)으로 판정했는데 실제로 음성(0)인 경우로 y_pred에서 0이었는데 y_true에서도 0인 값을 찾으면 됩니다. 배열의 첫번째 인덱스 하나만 존재하므로 confusion_matrix 함수 결과와 일치합니다.

 

tn, fp, fn, tp =  1 2 3 4

sensitivity, specificity =  0.5714285714285714 0.3333333333333333



시험삼아 다음처럼 첫번째 원소만 다르고 나머지는 동일하게 바꾼후, 민감도와 특이도 값을 출력해봅니다.  

 

y_true = [0, 0, 0, 1, 1, 1, 1, 1, 1, 1]

y_pred = [1, 0, 0, 1, 1, 1, 1, 1, 1, 1]



실행결과입니다. 전체 양성(1) 중에 양성을 모두 찾았으므로 민감도는 1.0입니다. 전체  음성(0) 3개중에 2개를 찾았으므로 특이도는 0.66이 됩니다. 



tn, fp, fn, tp =  2 1 0 7

sensitivity, specificity =  1.0 0.6666666666666666




그외 정확도(accuracy)와 정밀도(precision)가 있습니다.



정확도 - 전체 중에 양성과 음성을 맞춘 개수

 

          정확도 = (TP+TN) / (TP+FN+FP+TN)




정밀도 - 양성이라고 판정한 것 중에 실제 양성 개수

 

          정밀도 = (TP / TP + FP)





참고

 

https://m.blog.naver.com/win0k/221599042773

 

https://www.waytoliah.com/1222

 

https://adnoctum.tistory.com/981



반응형

해보고 확인한 것을 문서화하여 기록합니다.
최소 일주일에 한번 이상 포스트를 하려고 노력중입니다.

부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
시간날때 마다 이전 포스트가 문제 있는지 확인을 해보려고 노력하고 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">