이번 포스팅에서는 모델 성능 평가를 하는 데 사용되는 지표인 정밀 /재현율에 대해 알아보겠습니다.
정밀도/재현율을 이해 하기 위해선 먼저 혼동 행렬(confusion matrix)에 사용되는 표현방식에 익숙해질 필요가 있는데요.
여기서 혼동 행렬이란 분류모델이 총 몇개 중에 몇 개 맞췄다정도로만 성능을 평가하는 게 아니라 좀 더 다양한 관점에서 성능을 평가하는데 도움을 주는 표 정도로 이해하시면 될 것 같습니다.
1) confusion matrix 표현방식 이해
이해를 돕기 위해 우리 문제가 암이 양성인지 음성인지를 맞추는 문제를 푼다고 가정하겠습니다.
여기서 아래 빨간 사각형 부분에서 Positive는 실제 양성인 케이스, Negative는 실제로 음성인 케이스를 의미합니다.
이어서 아래 파란색 사각형 부분에서 Positive는 내가 양성이라고 예측한 부분, Negative는 음성이라고 예측한 부분을 의미합니다.
위 두개의 케이스를 조합한 것이 바로 초록색 사각형 부분입니다.
여기서 앞에 T는 맞췄다라는걸 의미합니다.
좌상단에 TP는 실제 양성인것을 양성이라고 잘 예측한 것을 의미하고, 우하단에 있는 TN은 실제 음성인 것을 음성이라고 잘 예측했다는 뜻입니다.
즉 맞췄다라는 True의 T자를 앞에 붙여준 거죠.
정리하자면 Positive로 예측해서 맞춘 거면 TP, Negative로 예측해서 맞춘 거라면 TN입니다.
다음으로 반대 케이스인데요.
앞에 F가 온 것을 봐서는 예측이 틀린 케이스라는 걸 눈치채셨을 겁니다.
FP는 Positive(양성)으로 예측을 했는데 사실은 Negative(음성)이라 틀린 케이스이고,
FN는 Negative(음성)으로 예측했는데 사실은 Positive(양성)이라 틀린 케이스입니다.
지금까지 혼동행렬(confusion matrix) 표현방식에익숙해지는 시간을 가졌고, 이를 기반으로 정밀도/재현율에 대해 알아보겠습니다.
2) 정밀도 / 재현율 개념
개인적으로 정밀도 / 재현율의 컨셉을 이해하는 데 있어 수식보다 좋은 게 없다고 생각합니다.
두 수식의 차이가 보이시나요?
정밀도는 FP가 분모에 있고, 재현율은 FN이 분모에 위치해 있습니다.
이게 뭘 의미할까요?
이를 다르게 말하면 정밀도를 높이기 위해서는 FP를 낮추기 위해 무던히 노력해야 하고, 재현율을 높이기 위해서는 FN을 낮추기 위해 무던히 노력해야 하는 걸 의미합니다.
FP를 낮춘다는 걸 뭘 의미할까요?
실상은 음성이었는데 양성이라고 잘못 예측하지 마라! 라는걸 의미합니다.
즉 '너는 확실한 것만 맞춰! 괜히 엄한 거 찔러보지 말고!'라는 의미입니다.
반대로 FN을 낮춘다는 걸 뭘 의미할까요?
사실 양성인데 음성이라고 잘못 예측하지 마라! 라는걸 의미합니다.
즉, '틀리든 말든 상관없는데 양성인 건 절대 놓치면 안 돼!'라는 의미입니다.
이 두 성능지표는 상황에 따라 중요도를 달리하는데요.
가령 암 예측 문제 같은 경우,
음성인데 양성으로 예측하는 경우, 병원비가 조금 더 나오는 문제가 있을 뿐이지만 양성인데 음성으로 예측해버린다면 큰 문제가 발생합니다.
즉 이러한 케이스는 재현율을 높이는데 취중해야 합니다.
반면 스팸 메일 같은 경우(스팸 메일을 양성으로 표현) 양성(스팸메일)인데 음성(일반 메일)으로 잘못 판단하면 그냥 메일을 삭제하면 됩니다. 하지만 음성(일반 메일)인데 양성(스팸메일)으로 잘못 판단할 경우 중요한 메일을 놓칠 수도 있습니다.
이러한 케이스는 당연히 정밀도가 더 중요하겠죠.
이 둘의 특징을 보면 한쪽(정밀도)은 너무 조심하고, 한쪽(재현율)은 너무 들이댄다(?)라고 표현해볼 수 있을 것 같습니다.
이 둘은 이러한 상반적인 특징 때문에 한쪽을 높이면 한쪽이 떨어지는 trade-off(트레이드 오프)관계에 있습니다.
좋은 분류 모델이란 성능지표 중 한쪽에 치우친 상태가 아닌 조화로우면서, 각 지표가 높은 상태 일 때를 의미합니다.
'머신러닝,딥러닝' 카테고리의 다른 글
쥬피터노트북에 chatgpt 적용 하기 (0) | 2023.05.04 |
---|---|
YOLO 포맷, COCO 포맷으로 쉽게 변경하는 방법 (0) | 2023.01.10 |
[sklearn] 'stratify' 의 역할(train_test_split) (0) | 2023.01.05 |
댓글