본문 바로가기

TIL/개인공부

[TIL] Precision, Recall, classification_report

반응형

Precision, Recall이 말할때마다 너무 헷갈려서 생각정리겸 적어놓는다.

 

Precision같은경우에는 수식에서도 보이듯이 Negative요소를 고려하지않는 수치이다. 즉, "분류"가 잘되었는지만 고려한다.

Recall같은경우에는 Negative요소를 고려하는 수치이다. 즉, "잘못 분류"가 되었는지도 함께 고려한 값이다.

 

암에 관련된 모델을 만들었다고 했을때

  • TP - 암에 걸리고 암이라고 진단받은 사람
  • FP - 암에 걸리지 않았지만 암이라고 진단받은 사람
  • TN - 암에 걸리지 않았지만 암이라고 진단을 "안"받은 사람
  • FN - 암에 걸렸는데 암이라고 진단을 "안"받은사람

따라서 Precision은 예측모델이 Negative요소로 잘못 분류되도 상관이 없을때 주로 사용하는 측정값이다.

  • 예시로, 암을 진단하는 모델에서 건강한 사람을 암으로 판단해도 굳이 큰 리스크가 없는것이다. 건강한 사람이 암으로 분류되면 보험으로 진단을받아 암이 아닌걸 밝혀내면된다(다만, 이 사람이 얻는 정신적인 피해는 크겠지만...)

 

반대로 Recall은 Negative요소를 고려하기때문에 특정 클래스가 예측모델이 Negative로 잘못분류되면 안되는 상황에서 주로 사용된다.

  • 예시로, 스팸메일을 분류하는 모델에서 일반 메일이 스팸으로 잘못처리되어 전송이 안되면, 업무마비가 올수가 있는 상황이 오기때문이다

게임시스템에서 빗대어 말해보자(핵 유저 Positive, 일반 유저 Negative로 설정)

  • 만약에 트롤촌을 만들었고, 해당 트롤촌에 핵 유저를 보낸다고 했을 때. 이런상황에서는 Precision값을 중심적으로 보는것이 좋다. 최대한 핵 유저를 많이 커버하되, 일반 유저(Negative)가 들어가도 상관이 없기때문이다.
  • 만약에 핵 유저를 탐지하는 모델을 만들었다고 했을때는 Recall값이 매우 중요해진다. 왜냐하면 일반유저(Negative)가 제재당할경우에는 큰 파장이 일어날수 있기때문이다.

 

아무튼 정리하자면

  • Precision은 특정 클래스가 잘 매칭이 되는지에 대한 수치값이고
  • Recall은 특정 클래스 이외에도 잘 매칭이 되는지에 대한 수치값이다

 

python의 sklearn에서 classification_report라는 함수가 있는데

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html

 

sklearn.metrics.classification_report

Examples using sklearn.metrics.classification_report: Recognizing hand-written digits Recognizing hand-written digits, Faces recognition example using eigenfaces and SVMs Faces recognition example ...

scikit-learn.org

macro avg, weighted avg, micro avg라는 값이 출력이 된다. 각각 아래와같은 의미를 가진다

  • micro avg: 단순 평균을 이용한 계산방식. 만약에 데이터가 불균형한 데이터일 경우에는 부정확할수가 있다.
  • macro avg:라벨 별 각 합의 평균
  • weighted avg: 불균형한 데이터일 경우에 보는 수치값. 라벨의 비중에 따라서 가중치를 곱해준다
반응형