본문 바로가기

All about Data/Statistics

정밀도(precision)와 재현율(recall) 오차행렬 안 헷갈리는 방법, 분류모델 평가지표

머신러닝의 모델을 구축하는 것만큼이나 중요한 작업이 바로 모델 평가작업이다. 모델 별로 평가하는 방법도 여러가지가 존재하는데, 오늘은 분류 모델 평가방법 중의 기본이 되는, 정밀도와 재현율에 대해서 알아보고자 한다. 

일단, 정밀도와 재현율은 용어를 정말 잘못 선택한 것 같다. 개념이 어려운 것은 아닌데, 도무지 직관적이지 않아서 두고두고 헷갈린다. 

차근차근 시작해보자 - 

 

 

정확도(Accuracy)로만 평가할 순 없을까? 

정확도는 단순하지만 유용한 도구이다. 그런데, 다음과 같은 점을 유의하지 않으면, 정확도의 함정에 빠지기 쉽다. 

 

기상예보를 예로 들어 보겠다. 

우리나라의 날씨에는 '맑음'과 '비' 두 가지만 있으며, 맑을 확률이 70%이고 비가 올 확률이 30%라고 가정해보자. 

 

Tom과 Jerry는 다음 주 월~금요일의 날씨를 예측해보기로 한다. 

Tom은 나름의 분석방법을 적용해서 예측했고, Jerry는 맑은 확률이 기본적으로 더 높다는 정보를 듣고 모든 요일에 맑을 것이라고 예측한다. Tom의 모델이 훨씬 더 정교하지만, 정확도는 Jerry의 예측모델이 더 높게 나왔다. 

 

요일 실제 날씨 Tom의 예측 Jerry의 예측
월요일 맑음 맑음 (O) 맑음 (O)
화요일 맑음 (X) 맑음 (X)
수요일 맑음 비 (X) 맑음 (O)
목요일 맑음 맑음 (X) 맑음 (O)
금요일 비 (O) 맑음 (X)
[정확도]   40% (2/5) 60% (3/5)

 

우리가 이 결과를 기반으로, Jerry의 예측모델을 채택한다면 이 모델은 영원히 '비'가 온다는 소식을 전하지 않을 것이다. 

그렇다면, 우리는 이런 오류를 범하지 않기 위해서 어떤 조치를 취할 수 있을까? 

 

 

오차행렬표(Confusion Matrix)를 쉽게 이해하는 방법

어떤 의료 AI모델이 100명의 환자의 암을 진단했다. 진단 정확도가 얼마나 정교한지 알아보자. 

 

모델은 100명 중 40명의 환자가 암이라고 진단했고(True), 60명의 환자는 암이 아니라고 진단했다(False). 

실제 결과를 보니, 암이라고 진단했던 환자 40명 중, 30명은 실제로도 양성이었고(True Positive), 10명은 음성이었다(False Positive). 그리고, 암이 아니라고 진단했던 환자 60명 중, 40명은 실제로 음성이었고(True Negative), 20명은 양성이었다(False Negative). 오차행렬표로 옮기면 이렇게 표현할 수 있다. 

분명히 어려운 개념이 아니다. 표로 옮기니 더 쉬운 것 같다. 그런데, TP-FN-TP-TN을 쓰기 시작하면 갑자기 헷갈린다.

TRUE + TRUE = POSITIVE 오케이! TRUE + FALSE = NEGATIVE?????? 예측이 틀렸단건가? 실제 결과가 틀렸다는 건가?

 

 

그래서 방법을 찾아보았다. True/False를 Positive/Negative 로 변경하는 것이다.

긍정(양성) 예측한 경우 뒤에 Positive를 붙이고, 부정(음성) 예측한 경우에는 뒤에 Negative를 붙인다. 

그러면, 이제 Positive로 예측한 경우가 실제로 적중했을 경우엔 True를 붙이고, 틀렸을 경우엔 False를 앞에 붙인다. Negative 예측도 마찬가지다. True와 False는 예측과의 일치/불일치 여부로 생각한다. Volia- ! 이제부터 헷갈리지 않는다. 

 

정밀도와 재현율은 대체 언제나오냐고? 바로 지금!

 

  • 정밀도(Precision) : Positive로 예측한 것 중에서, 실제로 True인 비율.  TP / (TP+FP)
  • 재현율(Recall/Sensitivity) : 실제로 True인 것 중에서 예측도 Positive로 한 비율.  TP / (TP+FN)

 

앞서 소개한 암진단 사례의 정밀도와 재현율을 구해보면 다음과 같이 계산할 수 있다. 

  • 정밀도: 암 진단 양성예측한 건수(40건) 중에서, 실제로 양성인 건수(30건)의 비율 - 0.75
  • 재현율: 실제 암 양성인 건수(50건) 중에서, 양성이라고 예측한 건수(40건)의 비율 - 0.8 

 

미묘하게 다른 정밀도와 재현율을 달리 구분하여 평가하는 것은, 경우에 따라서 정밀도가 더 중요한 예측이 있고 재현율이 더 중요한 예측이 있기 때문이다. 

 

앞서 평가한 암 진단 모델은 어떨까? 

1. 암인 줄 알았는데(Positive) 실제론 아니었다(False). 다행이다. 해프닝 False Positive (2종 오류)

2. 암이 아닌 줄 알았는데(Negative) 실제로 암이었다(True). 치료시기를 놓쳤다. 아주 위험하다. True Negative (1종 오류)

 

이 경우에는 2번이 훨씬 영향을 미치므로, 모델은 "Negative" 예측을 할 때 신중에 신중을 기해야 한다. 즉, 실제 결과에서 잘못된 False Negative 예측이 얼마나 포함되었는지 판단하는 재현율[TP/(TP+FN)]이 훨씬! 중요한 척도가 되는 것이다.  

→ FN(False Negative)가 줄어들 수록, 분모가 작아져서 숫자가 커지기 때문!! 

 

 

반대의 경우도 있을까? 

한 가지 사례만 보면, 마치 재현율이 훨씬 중요한 것처럼 느껴지지만, 정밀도가 중요한 경우도 있다. 

 

스팸 이메일을 걸러내는 경우가 그렇다. 똑같은 적용을 거쳐보겠다. 

1. 스팸인 줄 알았는데(Positive) 실제론 아니었다(False). 중요한 이메일이 누락됐다. 때문에 거액의 거래를 놓쳤다.  False Positive (2종 오류)

2. 스팸이 아닌 줄 알았는데(Negative) 실제론 스팸이었다(True). 휴지통으로 이동한다. 약간 귀찮군.  True Negative (1종 오류)

 

이번 경우에는 스팸이라고 판단하는 "Positive" 예측에 신중을 기해야 하고, 실제로 스팸메일 중에서 잘못된 False Positive 예측이 얼마나 포함되었는지 판단하는 정밀도[TP/(TP+FP)]가 더 중요한 척도가 되는 것이다. 

→ FP(False Positive)가 줄어들수록, 분모가 작아져서 숫자가 커지기 때문!

 

 

실제 업무에 적용할 때, 업무의 특성을 파악해서 정밀도와 재현율 중 어느 지표를 높게 평가 받도록 설계하는 것이 좋을 지 고민해야 한다. 

(물론 극단적으로 한 쪽만 높은 결과를 나타내는 것도 좋은 모델이라고 할 수 없고, 균형을 이루기 위해서 ROC, AUC곡선으로 추가적인 검증 작업을 거친다.) 

 

 

자, 글을 끝내기 전에 다시 한 번 복습. 

TP : True Positive (긍정예측 → 정답)

FP : False Positive (긍정예측 오답) 

TN : True Negative (부정예측 정답) 

FN : False Negative (부정예측  오답)

 

앞에 붙는 T와 F는 결과가 양성 / 음성이라는 것을 의미하지 않는다. 예측과 일치여부를 나타내는 것이란걸 명심하자. 

 

 

정밀도와 재현율은 과연 완벽한가? 그렇지 않다. 한 쪽으로 편향되지 않도록 추가 보완하는 지표가 필요하다.

추가 지표는 아래 링크로 첨부한다.  

F1 Score, ROC, AUC 구해보기