Precision Recall 차이 | [Bigs] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기 모든 답변

당신은 주제를 찾고 있습니까 “precision recall 차이 – [BigS] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: th.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 그로잉린 이(가) 작성한 기사에는 조회수 1,025회 및 좋아요 57개 개의 좋아요가 있습니다.

Table of Contents

precision recall 차이 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [BigS] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기 – precision recall 차이 주제에 대한 세부정보를 참조하세요

여러분 안녕하세요! 오늘은 Confusion Matrix(혼동행렬, 오차행렬)을 활용해서 여러 가지 관련된 개념들을 살펴볼게요. 영상 내내 나오는 분석모형의 성능을 평가하기 위해 사용되는 표가 바로 ‘Confusion Matrix’인데요~ 이를 통해 정분류율, 오분류율, 민감도, 재현율, 특이도, 정확도, F1 score를 계산할 수 있죠! 들으면 알겠는데 자꾸만 헷갈리는 이 개념들!! 같이 이해하면서 외워봅시당ㅎㅎ
⚠️ 주의
한국어 명칭이 책이나 시험에 따라 다르게 표기됩니다. 그러니 한국어보다는 \”영어 표기\”를 항상 같이 보고 정확히 파악해 주세요!
case1) Accuracy : 정분류율, Precision : 정확도
case2) Accuracy : 정확도, Precision : 정밀도

😊 Icon made by Freepik from www.flaticon.com

precision recall 차이 주제에 대한 자세한 내용은 여기를 참조하세요.

분류성능평가지표 – Precision(정밀도), Recall(재현율) and …

ROC curve는 그래프이기 때문에 명확한 수치로써 비교하기가 어렵습니다. 따라서 그래프 아래의 면적값을 이용합니다. 이것이 바로 AUC(Area Under Curve) …

+ 여기를 클릭

Source: sumniya.tistory.com

Date Published: 8/21/2022

View: 8201

Precision과 Recall에 관하여 – 윤’s Blog

마찬가지로, 실제로는 True인데 False로 라벨링 한 것에 민감하게 반응하고 있습니다. 두 개의 차이점을 스팸 메일을 통해서 예를 들어 보겠습니다. 스팸 …

+ 여기에 표시

Source: yoonheo91.tistory.com

Date Published: 6/7/2022

View: 6790

precision, recall의 이해 – 다크 프로그래머

그리고 정확도에는 precision이란 용어를 사용한다. recall은 대상 물체들을 빠뜨리지 않고 얼마나 잘 잡아내는지를 나타내고 precision은 검출된 결과가 …

+ 더 읽기

Source: darkpgmr.tistory.com

Date Published: 11/8/2022

View: 2943

Precision? Recall? 쉽게 알아보자!

우리는 이미 앞에서 진단 키트를 예시로 들었기 때문에, 여기서는 진단 키트가 분류기라고 가정하겠습니다. 각 관측값의 점수와 임곗값(Threshold)를 비교 …

+ 여기에 자세히 보기

Source: datanetworkanalysis.github.io

Date Published: 4/14/2021

View: 5811

Precision, Recall, Accuracy 쉽게 이야기하기 – 둥그런 일상

이 둘의 차이는 누구의 입장에서 생각하느냐?라는 차이가 있습니다. Precision은 컴퓨터의 입장에서 이야기를 하는 것이고, Recall은 현재 사실의 …

+ 더 읽기

Source: circlezoo.tistory.com

Date Published: 11/2/2021

View: 509

[머신러닝] Precison과 Recall 이란? (F-measure / Precision …

Recall의 의미는 P 중에서 TP 즉, 실제 Positive 들 중에서 내 알고리즘이 예측한 Positive의 비율로써, 얼마나 내 알고리즘이 진짜들 중에서 몇 개나 …

+ 여기를 클릭

Source: m.blog.naver.com

Date Published: 12/25/2022

View: 2680

[ML] Precision 과 Recall의 Trade-off, 그리고 ROC Curve

Precision은 우리말로 ‘정밀도’, Recall은 ‘재현율’ 이라고도 부른다. 재현율은 ‘민감도’, ‘특이도’ 라는 용어로도 불린다. 정밀도와 재현율에 대한 개념 …

+ 자세한 내용은 여기를 클릭하십시오

Source: techblog-history-younghunjo1.tistory.com

Date Published: 10/27/2021

View: 5830

threshold, precision, recall의 의미 – 천천히, 그러나 꾸준히

f1 점수는 precision과 recall의 조화 평균 = 2 * precision … weighted avg : 0과 1이 비율 차이가 많이 날 경우 한쪽에 무게를 두어 평균을 조정 …

+ 여기에 더 보기

Source: aimb.tistory.com

Date Published: 11/9/2022

View: 3174

12. Precision, Recall, F1 score (Feat. TP, FP, FN, TN)

Model1의 Average precision 결과를 보면 Accuracy와 비교해서 비교적 A에 덜 의존적인 결과를 볼 수 있다는 것을 알 수 있어요. Model2도 마찬가지 …

+ 여기에 표시

Source: 89douner.tistory.com

Date Published: 10/1/2021

View: 5167

머신러닝 분류 평가지표 이해하기(정확도, 정밀도, 재현율, F1 …

Note: Precision과 recall은 서로 상반되는 관계에 놓여있습니다. 재현율 : Recall. 위의 accuracy는 데이터에 따라 매우 잘못된 통계를 나타낼 수도 …

+ 여기에 표시

Source: medium.com

Date Published: 11/21/2021

View: 9815

주제와 관련된 이미지 precision recall 차이

주제와 관련된 더 많은 사진을 참조하십시오 [BigS] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[BigS] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기
[BigS] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기

주제에 대한 기사 평가 precision recall 차이

  • Author: 그로잉린
  • Views: 조회수 1,025회
  • Likes: 좋아요 57개
  • Date Published: 2022. 2. 28.
  • Video Url link: https://www.youtube.com/watch?v=Eyxynd-vDsQ

분류성능평가지표 – Precision(정밀도), Recall(재현율) and Accuracy(정확도)

기계학습에서 모델이나 패턴의 분류 성능 평가에 사용되는 지표들을 다루겠습니다. 어느 모델이든 간에 발전을 위한 feedback은 현재 모델의 performance를 올바르게 평가하는 것에서부터 시작합니다. 모델이 평가해야하는 요소와 그 것을 수치화한 지표들, 그리고 관련 개념들에 대해서 다루도록 하겠습니다.

모델의 분류와 정답

모델을 평가하는 요소는 결국, 모델이 내놓은 답과 실제 정답의 관계로써 정의를 내릴 수 있습니다. 정답이 True와 False로 나누어져있고, 분류 모델 또한 True False의 답을 내놓습니다. 그렇게 하면, 아래와 같이 2×2 matrix로 case를 나누어볼 수 있겠네요.

이제 각 case별로 살펴보겠습니다.

True Positive(TP) : 실제 True인 정답을 True라고 예측 (정답)

False Positive(FP) : 실제 False인 정답을 True라고 예측 (오답)

False Negative(FN) : 실제 True인 정답을 False라고 예측 (오답)

True Negative(TN) : 실제 False인 정답을 False라고 예측 (정답)

이러한 case별로 우리의 분류 모델의 성능을 어떻게 평가할 수 있을까요?

1. Precision, Recall and Accuracy

Precision, Recall, Accuracy는 논문에서도 사용하는 지표들이며 가장 눈에 익는 지표들입니다. 하지만 서로 헷갈리는 경우가 많으니, 제대로 정리할 필요가 있겠습니다. 우리는 모델이 예측한 다양한 경우를 생각해보며, 위의 2×2 matrix에 해당하는 것을 어떻게 지표화 할 것인지 고민해보겠습니다. 지표를 고민함과 동시에 실제 사례를 들어서 해당 지표를 왜 써야하는지도 함께 생각해보고자 합니다. 여기서는 한달 동안의 날씨를 예측하는 상황을 생각해보겠습니다. 날씨는 비가 오거나 맑거나 두 가지만 존재한다고 가정합니다.

1.1 Precision(정밀도)

정밀도란 모델이 True라고 분류한 것 중에서 실제 True인 것의 비율입니다. 즉, 아래와 같은 식으로 표현할 수 있습니다.

Positive 정답률, PPV(Positive Predictive Value)라고도 불립니다. 날씨 예측 모델이 맑다로 예측했는데, 실제 날씨가 맑았는지를 살펴보는 지표라고 할 수 있겠습니다.

1.2 Recall(재현율)

재현율이란 실제 True인 것 중에서 모델이 True라고 예측한 것의 비율입니다.

통계학에서는 sensitivity으로, 그리고 다른 분야에서는 hit rate라는 용어로도 사용합니다. 실제 날씨가 맑은 날 중에서 모델이 맑다고 예측한 비율을 나타낸 지표인데, 정밀도(Precision)와 True Positive의 경우를 다르게 바라보는 것입니다. 즉, Precision이나 Recall은 모두 실제 True인 정답을 모델이 True라고 예측한 경우에 관심이 있으나, 바라보고자 하는 관점만 다릅니다 . Precision은 모델의 입장에서, 그리고 Recall은 실제 정답(data)의 입장에서 정답을 정답이라고 맞춘 경우를 바라보고 있습니다. 다음의 경우를 생각해보겠습니다.

“어떤 요소에 의해, 확실히 맑은 날을 예측할 수 있다면 해당하는 날에만 맑은 날이라고 예측하면 되겠다.”

이 경우에는 확실하지 않은 날에는 아에 예측을 하지 않고 보류하여 FP의 경우의 수를 줄여, Precision을 극도로 끌어올리는 일종의 편법입니다. 예를 들어 한달 30일 동안 맑은 날이 20일이었는데, 확실한 2일만 맑다고 예측한다면, 당연히 맑다고 한 날 중에 실제 맑은 날(Precision)은 100%가 나오게 됩니다. 하지만 과연, 이러한 모델이 이상적인 모델일까요?

따라서, 우리는 실제 맑은 20일 중에서 예측한 맑은 날의 수도 고려해 보아야합니다. 이 경우에는 Precision만큼 높은 결과가 나오지 않습니다. Precision과 함께 Recall을 함께 고려하면 실제 맑은 날들(즉, 분류의 대상이 되는 정의역, 실제 data)의 입장에서 우리의 모델이 맑다고 예측한 비율을 함께 고려하게 되어 제대로 평가할 수 있습니다. Precision과 Recall은 상호보완적으로 사용할 수 있으며, 두 지표가 모두 높을 수록 좋은 모델입니다.

1.3 Precision-Recall Trade-off

1. 3. 1 with Type 1, 2 error

위 confusion matrix를 보면 어딘가 익숙한 table인 듯한 느낌을 받는데, 가설 검정에 대해 배울 때 해당 matrix와 유사한 table을 본적이 있을 것입니다.

이 table과 위 matrix는 같은 개념을 다르게 표현한 것 뿐입니다. 가설 검정에서도 Type 1 error와 Type 2 error는 서로 trade off 관계에 있다고 배웠습니다. 여기서 다시 짚고 넘어가보죠.

먼저 Type 1, 2 error의 정의는 다음과 같습니다.

이 정의에 따라 Type 1, 2 error를 그림으로 살펴봅시다.

Image Source: https://stats.stackexchange.com/questions/211736/type-i-error-and-type-ii-error-trade-off 가설 검정 시에 어떤 상황에서 어떤 가설을 받아들일지의 기준이 필요합니다. 그래서, 그 기준으로써 critical region을 잡게 되는데 Type 1 error는 H 0 가 true일 때, reject H 0 일 확률, 즉, 미리 설정해둔 critical region의 표본을 뽑을 확률입니다. 위의 그림에서 Any mean이 기준점이고 H 0 관점에서 빨간색 영역이 기각역이라고 볼 수 있습니다. 그리고 이 기각역에 따라 Type 2 error도 정해집니다. 그림으로 보다시피 Any mean을 좌우로 조정하게되면 Type 1, 2 error의 크기가 변합니다. 하지만 둘다 커지거나 둘다 작아지는 경우가 없는 trade-off관계입니다.

다시 본론으로 돌아와서, Precision과 Recall은 TP를 분자로써 같이하고 분모에는 TP에 Type 1, 2 error에 해당하는 FN, FP를 더하여 계산합니다. 이때, FN, FP는 각각 Type 1, 2 error에 있으므로 Precision과 Recall 또한 trade-off 관계에 있다고 할 수 있습니다.

1. 3.2 with Venn-diagram

조금 더 직관적으로 벤다이어그램으로 두 관계를 생각해볼 수 있습니다.

A는 실제 날씨가 맑은 날입니다. 그리고 B는 모델에서 날씨가 맑은 날이라고 예측한 것입니다. 이때 b의 영역은 TP로 실제 맑은 날씨를 모델이 맑다고 제대로 예측한 영역입니다. 이러한 영역 상에서 Precision과 Recall은 다음과 같습니다. 모델의 입장에서 모두 맑은 날이라고만 예측하는 경우를 생각해봅시다. 그렇게 되면 TN(d)의 영역이 줄어들게 되고 그에 따라 FN(a)의 영역 또한 줄게 됩니다. 그러므로 Recall은 분모의 일부인 FN(a)영역이 줄기 때문에 Recall은 100%가 됩니다. 즉, 여기서 A⊂B인 관계를 형성합니다. 하지만, 주의할 것은 단순히 a의 영역만 줄어드는 것이 아니라 d의 영역과 a의 영역이 모두 c로 흡수된다는 것입니다. Precision의 경우에는 기존보다 FP(c)의 영역이 커져 Precision은 줄게 됩니다. 이해가 안된다면 다음 표로 이해해보겠습니다. General Case에서 Recall은 20 / 50 = 40%, Precision = 20 / 60 = 33.3% 입니다. 그리고 분류모델이 모두 True라고 예측한 오른쪽의 case에서의 recall은 FN = 0이므로 100%이지만 그에 따라 FP가 늘어서 precision은 20/100 = 20%가 되었습니다. 이처럼 precision과 recall은 모두 높은 것이 좋지만, trade-off 관계에 있어서 함께 늘리기가 힘듭니다.

1.4 Accuracy(정확도)

이제는 또 관점을 다르게 생각해봅시다. 사고의 확장이 빠른 사람들은 예상했겠지만, 위 두 지표는 모두 True를 True라고 옳게 예측한 경우에 대해서만 다루었습니다. 하지만, False를 False라고 예측한 경우도 옳은 경우입니다. 이때, 해당 경우를 고려하는 지표가 바로 정확도(Accuracy)입니다. 식으로는 다음과 같이 나타냅니다.

정확도는 가장 직관적으로 모델의 성능을 나타낼 수 있는 평가 지표입니다. 하지만, 여기서 고려해야하는 것이 있습니다. 바로 domain의 편중(bias)입니다. 만약 우리가 예측하고자 하는 한달 동안이 특정 기후에 부합하여 비오는 날이 흔치 않다고 생각해보죠. 이 경우에는 해당 data의 domain이 불균형하게되므로 맑은 것을 예측하는 성능은 높지만, 비가 오는 것을 예측하는 성능은 매우 낮을 수 밖에 없습니다. 따라서 이를 보완할 지표가 필요합니다.

1.5 F1 score

1.5.1 F1 score

F1 score는 Precision과 Recall의 조화평균입니다.

F1 score는 데이터 label이 불균형 구조일 때, 모델의 성능을 정확하게 평가할 수 있으며, 성능을 하나의 숫자로 표현할 수 있습니다. 여기서 단순 산술평균으로 사용하지 않는 이유는 무엇일까요? 우리가 평균 속력을 구할 때, 이 조화평균의 개념을 사용해 본 경험이 있을 것입니다. 조화평균의 본질에 대해 이해해보겠습니다.

1.5.2 조화평균의 기하학적 접근

조화평균은 기하학적으로 다음과 같이 표현할 수 있 습니 다. 서로 다른 길이의 A, B와 이 두 길이의 합만큼 떨어진 변(AB)으로 이루어진 사다리꼴을 생각해봅시다. 이 AB에서 각 변의 길이가 만나는 지점으로부터 맞은 편의 사다리꼴의 변으로 내린 선분이 바로 조화평균을 나타냅니다.

기하학적으로 봤을 때, 단순 평균이라기보다는 작은 길이 쪽으로 치우치게 된, 그러면서 작은 쪽과 큰 쪽의 사이의 값을 가진 평균이 도출됩니다. 이렇게 조화평균을 이용하면 산술평균을 이용하는 것보다, 큰 비중이 끼치는 bias가 줄어든다고 볼 수 있습니다. 즉, F1-score는 아래와 같이 생각할 수 있습니다.

2. 그 외 다른 지표들

이 외에도 모델의 성능을 측정하는 다양한 지표들이 존재합니다. 다음을 살펴봅시다.

2.1 Fall-out

Fall-out은 FPR(False Positive Rate)으로도 불리며, 실제 False인 data 중에서 모델이 True라고 예측한 비율입니다. 즉, 모델이 실제 false data인데 True라고 잘못 예측(분류)한 것으로 다음과 같이 표현할 수 있습니다.

2.1 ROC(Receiver Operating Characteristic) curve

여러 임계값들을 기준으로 Recall-Fallout의 변화를 시각화한 것입니다. Fallout은 실제 False인 data 중에서 모델이 True로 분류한, 그리고 Recall은 실제 True인 data 중에서 모델이 True로 분류한 비율을 나타낸 지표로써, 이 두 지표를 각각 x, y의 축으로 놓고 그려지는 그래프를 해석합니다. 아래 예시를 보죠.

Image Source: https://www.medcalc.org/manual/roc-curves.php

curve가 왼쪽 위 모서리에 가까울수록 모델의 성능이 좋다고 평가합니다. 즉, Recall이 크고 Fall-out이 작은 모형이 좋은 모형인 것입니다. 또한 y=x 그래프보다 상단에 위치해야 어느정도 성능이 있다고 말할 수 있습니다.

2.2 AUC(Area Under Curve)

ROC curve는 그래프이기 때문에 명확한 수치로써 비교하기가 어렵습니다. 따라서 그래프 아래의 면적값을 이용합니다. 이것이 바로 AUC(Area Under Curve)입니다. 최대값은 1이며 좋은 모델(즉, Fall-out에 비해 Recall 값이 클수록) 1에 가까운 값이 나옵니다.

Reference

[1] http://blog.acronym.co.kr/556

[2] https://ko.wikipedia.org/wiki/%EC%A0%95%EB%B0%80%EB%8F%84%EC%99%80_%EC%9E%AC%ED%98%84%EC%9C%A8

[3] http://darkpgmr.tistory.com/162

[4] http://nittaku.tistory.com/295

[5] http://here.deepplus.co.kr/?p=24

Precision과 Recall에 관하여

안녕하세요.

오늘은 Precision과 Recall에 관하여 이야기해보려고 합니다.

생각날 때마다 찾아보고 또 까먹고를 반복했기 때문에 제대로 한 번 정리해보려고 합니다.

Precision과 Recall은 한글로 정밀도와 재현율이라고 번역됩니다.

아래 그림은 Precision과 Recall을 설명하는 가장 유명한 그림입니다.

(실제로 이해하기도 가장 편한 그림인 것 같습니다.)

출처 – https://www.wikiwand.com/en/Precision_and_recall

조금 더 자세한 설명을 위해 2 by 2 매트릭스가 있을 때

Predict | Actual True False True True positive False positive False False negative True negative

위와 같이 나타낼 수 있습니다.

또한, Precision과 Recall을 식으로 정리해보면

Precision = TP / (TP + FP )

Recall = TP / (TP + FN)

와 같이 됩니다.

그렇다면 각각의 지표들을 무엇을 보고자 하는 것일까요?

먼저, Precision과 Recall의 공식에서 차이점을 살펴보겠습니다.

둘 다 분자는 True positive로 동일한데 반해 분모가 TN이 들어가냐 FP가 들어가냐에

따라서 Precision이냐 Recall이냐로 나누어지고 있습니다.

Precision은 True로 예측한 것들을 보고 있습니다.

즉, 예측 중에서 실제로는 False이지만 True로 라벨링 한 것에 민감하게 반응합니다.

그렇기 때문에 조금 더 오류가 없는 것을 중요하게 생각하고 있습니다.

반면에 Recall은 실제 True인 값에 초점을 맞추어서 보고 있습니다.

마찬가지로, 실제로는 True인데 False로 라벨링 한 것에 민감하게 반응하고 있습니다.

두 개의 차이점을 스팸 메일을 통해서 예를 들어 보겠습니다.

스팸 메일의 경우 스팸 메일을 찾아내는 것보다

중요한 메일을 스팸처리 하지 않는 것을 더 중요하게 생각합니다.

그렇기 때문에 Precision과 Recall 중 중요한 지표가 되는 것은

Recall 이 되겠지요!!

이해가 안되신다면 질문은 항상 환영입니다.

많은 사람들이 Precision과 Recall을 한 번에 포괄적으로 보는 지표를 원하는 데

그래서 등장한 것이 바로 F-1 score입니다.

F1 = 2 * (Precision * Recall ) / (Precision + Recall)입니다.

(F1 스코어도 다양한 형태로 변형되고 있더군요.)

그렇다면 또 다른 궁금증이 생길 텐데 Accuray (정확도)를 놔두고 왜 다른 지표들을 사용하는 것일까요?

정답은 간단합니다. Accuray가 내포하는 정보를 넘어서 알고 싶을 때가 있습니다.

예를 들어,

Predict | Actual True False True 200 50 False 50 10000

위와 같이 표현된 confusion matrix가 있을 때

Accuracy -> (200 + 10000) / (200 + 50 + 50 + 10000) ≒ 99%

반면 Precision의 경우 -> 200 / (200 + 50) = 80%

Recall의 경우 -> 200 / (200 + 10000) ≒ 1.9%

이렇듯 Accuracy의 경우 아주 높은 수치를 보여주지만 Precision과 Recall에서 다르게 나타날 수 있습니다.

(대게 Accuracy는 True False 간 밸런스가 잘 맞는 데이터일 때 사용합니다.)

그렇기 때문에 상황에 맞는 지표들을 체크해야 합니다.

잘못된 부분의 지적은 항상 환영합니다.

그럼 이만.

Precision? Recall? 쉽게 알아보자!

import numpy as np import pandas as pd from sklearn.metrics import confusion_matrix truth = np . array ([ 0 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 ]) prediction = np . array ([ 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 ]) mat = confusion_matrix ( truth , prediction ) tn = mat [ 0 ][ 0 ] fp = mat [ 0 ][ 1 ] fn = mat [ 1 ][ 0 ] tp = mat [ 1 ][ 1 ] print ( “True Negative:” , tn ) # False를 False라고 분류 print ( “False Positive:” , fp ) # False를 True라고 분류 print ( “False Negative:” , fn ) # True를 False라고 분류 print ( “True Positive:” , tp ) # True를 True라고 분류 acc = ( truth == prediction ). sum () / len ( truth ) * 100 print ( ‘Accuracy: ‘ , round ( acc , 2 ), ‘%’ ) precision = tp / ( tp + fp ) # True를 True라고 분류 / True라고 분류 # 환자로 분류한 사람들 중 실제 환자일 확률 print ( “Precision: ” , precision ) recall = tp / ( tp + fn ) # True를 True라고 분류 / 실제 True print ( “Recall: ” , recall ) # 실제 환자를 환자로 분류할 확률

Precision, Recall, Accuracy 쉽게 이야기하기

출처: geralt on Pixabay

분류성능평가지표 중 Precision(정밀도), Recall(재현율), Accuracy(정확도)은 머신러닝(Machine Learning) 성능 평가 중 중요하고 기본이 되는 지표이기 때문에 한 번 알아보고자 합니다.

Q. Precision, Recall, Accuracy가 뭔가요?

Percision, Recall, Accuracy는 논문에서도 많이 보이는 지표이며 또 그만큼 중요하게 생각하는 지표입니다.

하지만 이것을 이야기하기전에 뭔저 알아야할 것이 있습니다. 그것은 바로 TP(True Positive), FP(False Positive), TN(True Negative), FN(False Negative)입니다. 이것에 대해 각각 이야기하면 아래와 같습니다.

– TP(True Positive): 실제 True인 정답을 True라고 예측

– FP(False Positive): 실제 False인 정답을 True라고 예측

– TN(True Negative): 실제 False인 정답을 False라고 예측

– FN(False Negative): 실제 Ture인 정답을 False라고 예측

Q. TP, FP, TN, FN을 조금 쉽게 설명해줄 순 없나요?

TP, FP, TN, FN은 중요한 개념입니다만 외우려고 하니 잘 외어지지 않고 헷갈리기만 합니다.

이렇게 생각해보는 것이 좋을 것 같습니다.

Positive를 True라고 생각하고 뒤에서부터 읽어보는 것입니다.

– TP: 컴퓨터가 Positive(True)라고 했는 데 결과가 진짜(True)였다. (맞춘거죠?)

– FP: 컴퓨터가 Positive(True)라고 했는 데 결과가 가짜(False)였다. (틀린겁니다.)

– TN: 컴퓨터가 Negative(False)라고 했는 데 결과가 진짜(True)였다. (맞춘겁니다.)

– FN: 컴퓨터가 Negative(False)라고 했는 데 결과가 가짜(False)였다. (틀린겁니다.)

Q. Precision이라고 하는 게 뭘까요?

정밀도. 말부터 벌써 어렵습니다. 정밀하게 무엇을 한다는 걸까요?

정밀도라는 것은 모델이 True라고 한 것 중에 실제 True인 것의 비율입니다.

식으로 표현하면 TP/(TP+FP)가 되는 것이죠.

즉, 컴퓨터가 맞다고 한 것 중에서 실제로 얼마나 맞았냐?라는 것입니다.

이것은 PPV(Positive Predictive Value) 정답률이라고 불리기도 합니다.

Q. Recall은 뭘까요?

재현율. 벌써 익숙하지 않은 단어입니다.

재현율이라는 것은 실제 True인 것 중에서 모델이 얼마냐 맞냐?라고 한 것입니다.

식으로 표현하면 TP/(TP+FN)가 되는 것이죠.

즉, 실제로 맞은 것 중에서 컴퓨터가 얼마나 맞췄냐?라는 것입니다.

익숙한 통계에서는 민감도(Sensitivity)라는 용어로 사용됩니다.

Q. Precision과 Recall은 뭐가 다른가요? 무슨 관계인가요?

보다보면 둘 다 얼마나 맞았냐?를 말하는 것이라서 동일한 게 아닌가? 라는 생각이 들 수도 있습니다.

이 둘의 차이는 누구의 입장에서 생각하느냐?라는 차이가 있습니다. Precision은 컴퓨터의 입장에서 이야기를 하는 것이고, Recall은 현재 사실의 입장에서 이야기하는 것입니다.

공식을 보면 아시겠지만 Precision과 Recall은 둘 다 1이 가장 좋은 값입니다. 그래서 최대한 1로 만들어주려고 합니다.

하지만 이 과정 속에서 신기한 현상이 있습니다. 생각해봅시다. TP, FP, TN, FN은 각각의 값이 있을 겁니다. 우리는 여기서 Precision의 값을 올려주기 위해서 FP를 0으로 만들기로 했습니다. 즉 결과가 False인 것을 모두 없애버리기로 한 것이죠. 여기에서 FP값이 0이되어 없어지다보니 자연스럽게 FN의 값이 올라가게 됩니다. 이들의 총합은 같아야하기 때문이죠. 그렇게 FN값이 올라가게되면 Recall 값은 줄어듭니다.

즉, Precision 값을 올리려고 해봤더니 Recall 값이 줄어드는 겁니다.

이 관계를 Trade-off 관계에 있다고 합니다.

Q. Accuracy는 뭔가요?

Accuracy는 정확도를 이야기합니다. 정확도 이름만 들어도 직관적입니다.

앞서 Precision과 Recall의 경우 Ture인 지표에서만 생각했다면 Accuracy의 경우는 False인 경우도 함께 생각할 수 있습니다. 옳은 경우를 전부 생각해보는 것이죠.

Q. Accuracy가 가장 직관적이면 Accuracy만 있으면 되지 Precision과 Recall은 어디다 쓰는 거죠?

맞습니다. Accuracy만 있으면 정확도를 찾는 데는 문제가 없습니다. 하지만 저희는 정확도를 알고 싶은 것이 아닙니다. 정확도를 더 높이고 싶은 것이죠. 정확도를 더 높이기 위해서 세부적으로 값을 확인하고 뭐가 문제인지 분석해야겠죠. 그러기위해서는 더 많은 지표가 필요합니다. 그렇기에 Precision과 Recall 역시 함께보는 것이며, 또 중요합니다.

Q. F1 Score라는 것도 있던데 이건 뭘까요?

Precision과 Recall은 앞서 말씀드린 것처럼 Trade-off 관계에 있습니다. 데이터는 균형적이지 않은 데이터일 확률이 높습니다. 마치 사다리꼴의 밑면과 윗면처럼 다른 크기를 가지는 것과 같은 그림이라고나 할까요? 이런 사다리꼴을 반으로 나눠서 같은 면적을 가지려고 하면 중간을 잘라서는 안됩니다. 그럼 면적이 달라지니까요. 생각해보면 이 방식은 물리에서 수학에서 많이 썼었습니다. 자전거를 타다가 뛰어서 목적지에 가는 철수의 평균속력을 구하는 문제가 떠오르네요.

Precision과 Recall의 조화평균을 F1 Score라고합니다.

참고: https://sumniya.tistory.com/26

반응형

[머신러닝] Precison과 Recall 이란? (F-measure / Precision-Recall Curve / AUC-PR 개념 포함!)

이런 기준들을 다루다 보면 느끼겠지만, 정말 많이 용어들이 등장한다. 이렇게 이름을 다양하게 해놓기 때문에 상황에 따라서 헷갈리기도 한다. 그래서 한번 정리할 때, 관련 용어는 최대한 알아 두는게 중요한듯!

여기서도 보면 Precision은 Positive Predictive Value(PPV)와 완전히 동일한 말이다. 의미를 보면, 분자에 TR(True Positive)가 오고, 분모에는 TP아 FP(False Positive)가 온다. 이것이 무슨말인지 잘 생각해보자. 이러한 수식을 보면, 그냥 이건 이거구나 하면 안된다. 이건 마치 영어를 공부하는 것과 같다는 생각이 들었다. 영어 표현도 그 자체 단어적으로 외우면 실제 상황에서 못 쓰는 것과 마찬가지로, 이러한 수식도 정확하게 어떤 의미인지를 파악해두어야 한다.

TP와 FP는 결국 내가 Positive 라고 예측한 것들의 집합이다. 즉, 내가 Positive라고 예측한 것들 중에서 실제 정답과 맞으면 TP, 틀리면 FP가 된다. 어찌 되었든 내가 사용한 알고리즘을 통해서 Positive라고 예측한 것들 중에서 얼마나 정답을 잘 맞추었는지의 비율이 Precision이다.

위키피디아의 그림 예제를 통해서 좀 더 자세히 알아보자.

[ML] Precision 과 Recall의 Trade-off, 그리고 ROC Curve

이번 포스팅에서는 분류 문제 성능을 평가하는 대표적인 metric으로서 Precision과 Recall에 대해 알아보고 이 둘 간의 관계 , 그리고 ROC Curve와 이를 Score로 환산한 AUC 에 대해서 알아보려고 한다. 그리고 Scikit-learn을 통해서 구현하는 방법 에 대해서도 소개한다.

목차는 다음과 같다.

1. Precision 과 Recall

2. Precision과 Recall의 Trade-off

3. F1 – Score

4. ROC Curve와 AUC

본격적인 내용에 들어가기 앞서 Cofusion Matrix에 대한 사전적인 지식이 필요하다. 이에 대한 개념을 모른다면 다음의 포스팅 내용들 중 Confusion Matrix에 대한 내용을 숙지하자.

#https://techblog-history-younghunjo1.tistory.com/60

1. Precision 과 Recall

보통 분류 결과 성능을 평가할 때 Accuracy(정확도)를 지표로 많이 쓰기도 한다. 하지만 이진분류 (Binary classification)에서는 정확도를 지표로 잘 사용하지 않고 정밀도와 재현율을 가지고 평가 를 한다. Precision은 우리말로 ‘정밀도’, Recall은 ‘재현율’ 이라고도 부른다. 재현율은 ‘민감도’, ‘특이도’ 라는 용어로도 불린다. 정밀도와 재현율에 대한 개념을 간단하게만 짚고 넘어가자.

Precision(정밀도) : 모델이 True라고 예측했을 때, 실제값이 True인 비율

Recall(재현율) : 실제값이 True일 때, 그 값들을 모델이 True라고 예측한 비율

Confusion Matrix

위 Matrix를 기반으로 해서 정밀도에 대한 공식은 다음과 같다.

정밀도 공식

다음은 재현율에 대한 공식이다.

재현율 공식

2. Precision 과 Recall의 Trade-off

정밀도와 재현율은 왜 개별적으로 측정하는 것일까? 이는 정의되는 문제의 종류에 따라 다르다. 재현율은 보통 실제값이 Positive일 때 예측한 값이 Positive일 경우가 매우 중요한 상황일 때 사용된다. 단적인 예로, 암 판단 분류 예측을 하는 문제에 있어서 실제로 암이 걸렸는데 예측을 암이 걸리지 않았다고 판단하게 되면 수반되는 위험이 매우 커지게 된다.

반대로 정밀도는 모델이 Positive라고 예측했을 때 실제값이 Negative일 때 위험이 수반되는 경우에 사용된다. 예시로는 스팸메일 분류를 들 수 있다. 만약 분류 모델이 중요한 업무내용을 담고 있는 메일(Negative)을 스팸메일(Positive)이라고 분류하게 된다면 중요한 업무내용이 전달되지 못하는 위험상황이 발생한다.

그런데 이 재현율과 정밀도 사이는 Trade-off라는 관계가 존재한다. Trade-off란, 쉽게 말해서 “두 마리 토끼를 다 잡을 순 없다” 라는 의미이다. 즉, 정밀도와 재현율을 둘 다 모두 최대값으로 할 수가 없다는 것이다. 정밀도가 극도로 높게 된다면 재현율은 낮아질 수 밖에 없고 반대로 재현율이 극도로 높게 된다면 정밀도값은 낮아질 수 밖에 없다. 마치 머신러닝에서 Bias와 Variance를 둘 다 동시에 높일 수 없는 것처럼 말이다.

이진분류인 상황에서 Positive(1) label로 분류하는 확률값의 디폴트값은 0.5이다. 이 디폴트값을 낮추고 높여줌으로써 정밀도와 재현율을 조절할 수가 있다. 이 디폴트값을 ‘분류 결정 임계값(threshold)’ 라고 부른다. 만약 이 임계값을 0.5에서 0.4로 낮추어 준다면 정밀도와 재현율에는 어떤 변화가 발생할까?

임계값을 낮추게 된다는 것 은 그만큼 모델이 Positive라고 예측하는 횟수가 많아진다는 것과 동일한 의미 이다. 재현율의 의미는 실제값이 Positive인데 모델이 Positive로 예측한 비율이다. 따라서 분모의 FN(실제값이 Positive인데 모델이 Negative라고 예측한 횟수) 값이 낮아질 수 밖에 없다. 따라서 임계값을 낮추게 되면 재현율은 커진다.

반대로 정밀도는 모델이 Positive 라고 예측했을 때 실제값이 Positive인 비율이다. 그래서 분모의 FP(모델이 Positive라고 예측했을 때 실제값이 Negative인 횟수) 값이 커지게 된다. 따라서 임계값을 낮추게 되면 정밀도는 작아지게 된다.

이러한 임계치 변경을 Scikit-learn을 통해서 구현할 수 있다. 코드 예시는 Titanic 데이터를 사용했으며 Scikit-learn의 pred_prob() 함수와 Binarizer 라이브러리를 이용해 구현할 수 있다.

import numpy as np import pandas as pd import warnings warnings.filterwarnings(action=’ignore’) from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # 원본 데이터를 재로딩, 데이터 가공, 학습데이터/테스트 데이터 분할. titanic_df = pd.read_csv(‘./train.csv’) y_titanic_df = titanic_df[‘Survived’] X_titanic_df= titanic_df.drop(‘Survived’, axis=1) X_titanic_df = transform_features(X_titanic_df) X_train, X_test, y_train, y_test = train_test_split(X_titanic_df, y_titanic_df, \ test_size=0.20, random_state=11) lr_clf = LogisticRegression() lr_clf.fit(X_train , y_train) pred = lr_clf.predict(X_test) # get_clf_eval함수는 Confusion Matrix, Accuracy, Precision, Recall을 한 번에 출력하기 위해 정의한 함수. get_clf_eval(y_test , pred)

위 코드는 기본적으로 설정된 임계치가 0.5인 값인 상태로 분류 성능을 평가했다. 평가결과는 다음과 같다.

임계치가 0.5일 때의 평가

다음은 임계치를 0.4로 설정한 후 분류 성능을 평가했다.

# 임계값을 0.4로 설정했을 때 from sklearn.preprocessing import Binarizer custom_threshold = 0.4 pred_proba_1 = pred_proba[:,1].reshape(-1,1) custom_predict = Binarizer(threshold=custom_threshold).fit_transform(pred_proba_1) # 결과값이 달라짐 get_clf_eval(y_test, custom_predict)

결과값은 다음과 같으며 정밀도와 재현율의 값이 바뀐 것에 주목해보자.

임계치가 0.4일 때의 평가

또한 Scikit-learn에서 제공하는 precision_recall_curve() 함수를 사용해 각 임곗값에 따른 정밀도-재현율을 출력해볼 수 있다.

# precision_recall_curve를 이용해 임곗값에 따른 정밀도-재현율 값 추출 from sklearn.metrics import precision_recall_curve # label이 Positive(1)일 때의 예측확률을 추출 pred_proba_class1 = lr_clf.predict_proba(X_test)[:, 1] # precision_recall_curve는 실제값과 Positive예측확률을 인자로 넣고 # 정밀도, 재현율, 임곗값 3가지를 반환받음 precision, recalls, thresholds = precision_recall_curve(y_test, pred_proba_class1) print(“임곗값 shape”, thresholds.shape) print(“정밀도 shape”, precision.shape) print(“재현율 shape”, recalls.shape) #반환된 임곗값 배열 row가 143건이므로 샘플로 10개 추출하되, 14번의 step으로 추출 thr_idx = np.arange(0, thresholds.shape[0], 14) print(“추출한 임곗값 인덱스”, thr_idx) print(“샘플링한 10개 임곗값”, np.round(thresholds[thr_idx], 2)) #위에 설정한 임곗값 인덱스에 매핑되는 정밀도와 재현율 출력 print(“정밀도:”, np.round(precision[thr_idx], 3)) print(“재현율:”, np.round(recalls[thr_idx], 3))

결과값들은 다음과 같다.

각 리스트의 같은 인덱스 위치끼리 임곗값-정밀도-재현율이 매핑된다.

3. F1 – score

F1-score는 정밀도와 재현율이 어느 한쪽으로 치우치지 않는 수치를 나타낼 때 상대적으로 높은 값을 갖는다. 만약 A라는 모델의 정밀도가 0.9, 재현율이 0.1 이고 B라는 모델의 정밀도가 0.5, 재현율이 0.5라고 했을 때, A와 B모델의 F1-score는 각각 0.18, 0.5라는 값을 갖게 된다. 결국 B라는 모델이 더 높은 F1-score를 가지며 결국 더욱 더 객관적인 분류 성능을 갖고 있음 을 알 수 있다.

F1-score도 Scikit-learn에서 f1_score() 라는 함수로 편리하게 제공해주고 있다.

from sklearn.metrics import f1_score f1 = f1_score(y_test, pred) print(f” F1-score : {f1:.2f}”)

4. ROC Curve 와 AUC

ROC Curve와 AUC는 서로 동일하다고 볼 수 있다. 하지만 표현하는 방식에 차이가 있을 뿐이다. ROC Curve는 X축을 FPR(Fall-out)지표, Y축을 TPR(Recall)지표로 하는 그래프로 나타내는 방식 이다. AUC는 이 ROC Curve를 점수로 환산한 방식 이다. 값이 1에 가까울 수록 좋은 값이다.

#FPR지표란, 실제 데이터가 Negative인데 모델이 Positive라고 예측한 비율이다.

ROC Curve와 AUC도 Scikit-learn 라이브러리에서 편리하게 제공하고 있다.

from sklearn.metrics import roc_curve # label이 Positive(1)일때의 예측확률을 추출 pred_proba_class1 = lr_clf.predict_proba(X_test)[:,1] # roc_curve함수는 실제값, 예측확률값(1일때)를 인자로 주고 3개의 값들을 반환받는다. # fpr : Fall-out # tpr : Recall fprs, tprs, thresholds = roc_curve(y_test, pred_proba_class1) thr_idx = np.arange(0, thresholds.shape[0], 5) print(“임곗값 인덱스”, thr_idx) print(“샘플용 10개 임곗값”, np.round(thresholds[thr_idx], 2)) print(“임곗값에 따른 FPR”, np.round(fprs[thr_idx], 3)) print(“임곗값에 따른 TPR”, np.round(tprs[thr_idx], 3))

결과값은 다음과 같다. 이러한 결과값을 가지고 밑의 코드를 실행해 ROC Curve Plot을 그릴 수 있다.

roc_curve 결과값

# ROC curve 그래프 그리기 def roc_curve_plot(y_test, pred_proba_c1): fprs, tprs, thresholds = roc_curve(y_test, pred_proba_c1) # ROC Curve를 plot으로 그림 plt.plot(fprs, tprs, label=’ROC’) # Random한 가운데선(0.5)을 직선으로 그림 plt.plot([0, 1], [0, 1], ‘k–‘, label=’Random’) start, end = plt.xlim() plt.xticks(np.round(np.arange(start, end, 0.1), 2)) plt.xlim(0,1); plt.ylim(0,1) plt.xlabel(‘FPR(1- Sensitivity)’); plt.ylabel(‘TPR(Recall)’) plt.legend() plt.show() roc_curve_plot(y_test, lr_clf.predict_proba(X_test)[:,1])

ROC Curve plot

AUC를 코드상에서 구현하는 방법은 다음과 같다.

# AUC score 출력 # roc_auc_score함수 사용 from sklearn.metrics import roc_auc_score # roc_auc_score(y_test, predict_proba가 반환한 객체)를 인자로 한다. pred_proba = lr_clf.predict_proba(X_test)[:,1] roc_score = roc_auc_score(y_test, pred_proba) print(f”ROC score : {roc_score:.3f}”)

threshold, precision, recall의 의미

머신러닝에서 어떤 모델이 더 예측을 잘하는가 판단하기 위해 여러 평가지표를 사용한다.

Accuracy(정확도) 는 전체 범주를 모두 바르게 맞춘 경우 / 전체 수 = tp+tn/total f1 점수 는 precision과 recall의 조화 평균 = 2 * precision * recall/(precision+recall) Precision(정밀도) 는 positive로 예측한 경우 중 올바르게 positive를 맞춘 비율 = tp/tp+fp

Recall(재현율, Sensitivity)는 실제 positive인 것 중 올바르게 positive를 맞춘 비율 = tp/tp+fn

Accuracy : 가장 유용하게, 많이 쓰이는 지표로, data가 balance 할 때 효과적이다. (1이랑 0이 반반 분포하는 데이터일 때) 하지만 데이터셋의 타깃 값의 비율이 불균형할 때는,

F1 Score를 사용하여 모델을 비교할 때 더 좋은 예측을 하는 모델을 구할 수 있다.

조화 평균이라는 것이 불균형한 지표 사이에서 큰 값에 패널티를 주어, 작은 값에 불리하지 않게 조화로운 평균을 주기 때문이다. (precision과 recall 값이 균일하지 않을 때도 마찬가지다.)

분류-예측 문제에서 어떤 걸 positive로 보느냐 따라 0과 1 라벨이 달라지고, 이에 대한 precision, recall이 다르다.

예를 들어 백신 접종을 하지 않을 확률에서 백신 접종을 positive(1)로 볼 수도, negative(0)으로 볼 수도 있다.

암 환자를 분류하는 문제에서,

Precision 값이 커질수록 정말 암환자인 사람만 암환자라고 예측하게 된다.

더 정밀해지는 셈이다. Precision이 높으면 threshold도 높은데,

threshold의 의미는 분류기준이다.

threshold를 기준으로 그 이상이면 1이라고 예측(분류)한다. (디폴트 값은 0.5다.)

따라서 분류 기준이 높으므로 더 깐깐하게, 정밀하게 예측(분류)한다.

Recall을 높이면 암환자가 아닌 사람도 암환자라고 하게 된다.

Recall을 높이면, threshold가 낮아진다.

threshold의 의미는 분류기준이다.

그래서 Recall을 높이면, threshold가 낮아지므로 암환자의 분류 기준점이 낮아진다.

따라서 조금이라도 암환자일 것 같으면 다 암환자라고 분류한다

결론적으로, precision을 놓치지 않는 상황에서 recall을 높이는 것이 좋다.

weighted avg : 0과 1이 비율 차이가 많이 날 경우 한쪽에 무게를 두어 평균을 조정해준다.(비율이 많은 쪽에 weight가 가도록)

ROC 커브 : 이진 분류 문제에서

ROC 커브의 중간점은 tpr-fpr이 가장 큰 지점으로, 최적의 threshold 값을 가진다.

AUC : ROC 커브 아래 면적으로, auc_score가 그 면적의 넓이를 나타낸다.(최대가 1)

auc_score가 클수록 머신러닝 학습이 잘 된 거다.

12. Precision, Recall, F1 score (Feat. TP, FP, FN, TN)

안녕하세요 이번글에서는 CNN 모델을 평가하는 또 다른 지표인 F1 score에 대해서 알아보도록 할거에요.

앞서 “5.CNN 성능은 어떻게 평가하게 되나요?”라는 글에서 봤듯이 CNN은 accuracy 기반을 하여 CNN 성능을 평가한다고 말씀드렸어요.

하지만 어떠한 상황에서는 accuracy를 기반으로 하는 것 보다는 다른 성능지표를 사용하는것이 더 좋을 수 있어요. 그래서 이번글에서는 accuracy를 사용하면 좋지 않은 상황과 이런 상황에서 대안이되는 성과지표(measurement)를 알아보도록 할게요.

이번 글의 이미지와 모든 내용은 아래 유튜브 영상에서 참고하였으니 아래영상을 보시는걸 추천드립니다.

<1.Confusion Matrix>

로봇에게 A라는 글을 보여주고(input) 로봇이 A라고 답(answers)했을 때 아래 테이블 처럼 1이라는 표시를 해줍니다. 만약 B라는 글을 보여줬는데 D라고 답한다면 (B,D) 구역에 1이라고 표시를 해볼게요.

이러한 과정을 반복해서 최종적으로 아래와 같은 테이블을 얻었다고 해봅시다. 로봇A, 로봇B는 각기 다른 결과들을 보여주었어요 (아래와 같은 결과(Matrix)를 Confusion Matrix라고 합니다). 그렇다면 우리는 두 로봇의 Confusion Matrix를 봤을때 어떤 로봇모델을 쓰는것이 좋을까요?

위에서 질문한 답을 하기 위해서 “Accuracy, Recall, Precision, F1 score”라는 성능평가 지표를 보고 어떤 로봇(모델)을 사용할지 결정하게 되는데, 이러한 개념을 이해하기 위해서는 먼저 TP, TN, FP, FN이라는 개념에 대해서 알아봐야해요.

<2. TP(True Positive), TN(True Negative), FP(False Positive), FN(False Negative)>

특정 클래스를 잘 구분하는지 알아본다고 해볼게요.

만약 A라는 클래스를 잘 구분하는지 알아본다고 했을 때, 아래 두 가지 개념이 유용하게 사용돼요

Positive and Negative: 정답과 관계없이 A 클래스 입장에서 모델이 A라고 분류하면(+) A기준에서는 Positive하게 분류한것이고, A라고 분류하지 않으면(-) Negative 하게 분류한거에요.

True and False: 정답과 관련하여, 예측과 정답이 일치하면 True, 예측과 정답이 일치하지 않으면 False로 분류해요.

1-1) TP (True Positive)

로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, A클래스를 보여주고 A라고 (positive) 올바르게 (True) 예측하면 A에 대해서 True Positive하다고 할 수 있어요 (True Positive for A).

1-2) FP (False Positive for A)

로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, B,C,D 클래스를 보여줬을 때 A라고 (positive) 잘 못 판단(False) 한다면 A에 대해서 False Positive하다고 할 수 있어요 (False Positive for A).

1-3) FN (False Negative for A)

로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, A 클래스를 보여줬을 때, A가 아니(Negative)라고 잘 못 (False) 판단하는 경우를 A에 대해서 False Negative 하다고 해요 (False Negative for A).

1-4) TN (True Negative for A)

로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, B,C,D 클래스를 보여줬을 때, A가 아니(Negative)라고 올바르게 판단(True) 하는 경우를 A에 대해서 True Negative 하다고 합니다 (True Negative for A).

<사진5>

<3. Accuracy>

위에서 언급한 개념들을 토대로 우리가 사용할 수 있는 첫 번째 성능지표는 Accuracy에요. Accuracy는 아래와 같은 수식을 통해 계산이되요

(아래영상은 TP로만 계산이 되었네요. 개념만 이해하시면 될 것 같습니다.)

이런 경우에는 Accuracy 지표를 이용하여 Model1, Model2를 평가하고 Model1을 사용하게되면 실제로 어떤 class(A,B,C,D)를 보여줘도 Model2보다 높은 확률로 정답을 도출해낼거에요.

하지만, 위와 같은 경우는 Model1, Model2 모두 실제 테스트 클래스(actual values)가 A=10, B=10, C=10, D=10 으로 각각 동일할 거에요. 이럴때 머신러닝이 학습하기 위한 데이터셋의 class가 balance하게 구성되어 있다고 이야기해요. 그렇다면 class가 imbalance한 구조에서도 accuracy라는 지표가 효율적일까요?

예를들어, 의학 이미지 데이터들을 보면 정상인(normal)에 해당하는 데이터셋은 굉장히 많이 있는 반면에, 병(변)이 있는 사람들의 데이터셋은 굉장히 적어요. 만약 정상인의 MRI 이미지가 1000개가 있고, 암환자의 MRI 이미지가 100개가 있는 경우에 accuracy 지표를 쓰면 어떤 문제가 일어날까요?

1) Accuracy 문제점

위에서 언급한 Accuracy measurement는 imbalanced dataset을 갖고 있는 상황에 따라서 그닥 효율적이지 않은 성능지표가 될 수 있어요. 만약 위의 예시처럼 모든 클래스의 데이터가 10개씩 balance하게 있지 않고 아래와 같이 A클래스에만 집중적으로 데이터가 몰려있다면 어떻게 될까요? A기준에서 봤을때는 아래 성능지표가 좋을 수 있지만, B,C,D 관점에서 보면 해당 모델을 평가하는데 accuracy가 좋은 measurement가 될 수 있을까요?

한 눈에 보더라도 모든 데이터가 A에 쏠려있기 때문에 accuracy가 B,C,D에도 적용이 되기에는 B,C,D에 대한 모집단이 부족한걸 보실 수 있으실 거에요.

아래 예시를 통해 살펴볼게요.

먼저 Model1을 오로지 A관점에서 보면 모델이 그닥 좋지 않을 수 있어요. 왜냐하면 100/(200=100+80+10+10) = 50%의 정확성을 보이기 때문이에요. 하지만, B,C,D 관점에서 보면 모두 80% 이상의 정확성을 보이기 때문에 Model1은 B,C,D 관점에서는 좋은 모델이고, A모델 관점에서는 좋지 않은 모델이되요.

Model2의 경우 A관점에서 보면 198/200 = 99%의 정확성을 보여 좋겠지만, B,C,D의 관점에서 보면 모두 10%의 정확성을 보이기 때문에 Model2가 좋은 모델이라 할 수 없어요.

이런 경우 Accuracy를 적용해 Model을 평가하게 되면 어떻게 될까요? 이런 상황에서는 특정 class의 샘플수와 해당 class의 정확성에 많이 의존해서 accuracy가 도출될 수 밖에 없게되요. 위에 있는 예시를 보더라도, Model1,2에 입력된 A클래스가 앞도적으로 많고, A클래스에 대한 accuracy에 따라서 전체 클래스(A,B,C,D)에 대한 accuracy 가 결정이돼요.

우리가 의학적인 목적으로 머신러닝을 이용한다고 해볼게요. 1000명이 진료를 보러 왔는데 실제 990명이 정상인이고 나머지 10명이 병(변)이 있다고 해보겠습니다. 이 머신러닝 모델은 정상인들에 대해서는 100%의 정확성을 보였고, 실제 병(변)이 있는 분들에 대해서는 50%의 확률을 보였다고 할게요. 전체적으로 볼때 1000명의 환자중 995명을 제대로 판별했으니 99.5%의 정확성을 보인다고 할 수 있겠죠. 그럼, 이 병원을 신뢰하고 가야하는건가요? 실제로 병(변)이 있는 분들께서 이 병원을 찾았다가는 큰 낭패를 보시게 될 거에요.

위와같이 데이터셋의 class가 imbalance하게 되어있다면 어떤 성능지표를 사용해야 하는걸까요? 이럴때 상용될 수 있는 기법이 F1 score를 계산하는거에요. 그럼 지금부터 F1 score 개념을 이해하기 위해 Precision, Recall 개념을 차례대로 살펴볼게요.

<4. Precision>

Given a class prediction from the classifier, how likely is it to be correct?

각각의 클래스에 대해서 정확하게 분류됐는지를 알고 싶을 때, Precision이라는 개념을 사용해요. 아래 예시를 기준으로 A 상황에 대한 Precision을 보고자 한다면, 9/(9+1+5+0=15) 가 되겠네요.

일반화해서 보자면, 머신러닝 모델이 특정 클래스를 prediction할 때, 해당 클래스에 대한 prediction(예측) 얼마나 잘 맞을지를 보여주는 지표라고보시면돼요. 즉, 특정 클래스에 대해 prediction 했다는 것만 고려한다는 것에대한 숨어 있는 의미는 Negative 요소를 고려하지 않는다는 점이에요.

Model1의 Average precision 결과를 보면 Accuracy와 비교해서 비교적 class A에 덜 의존적인 결과를 볼 수 있다는 것을 알 수 있어요.

Model2도 마찬가지네요.

결과적으로 보면 Accuracy는 imbalance한 dataset 상황에 있을 때, 특정 class의 accuracy에 지나치게 의존적일 수 있지만, Precision은 평균을 취함으로써 그 의존성을 줄여주게 됩니다. 즉, 다시말해 precision은 머신러닝 모델이 A or B or C or D를 prediction할 때, 평균적으로 얼마나 정확하게 prediction하는지 알려주는 성과지표라고 할 수 있겠어요.

<5. Recall>

Given a class, will the classifier detect it?

어떤 클래스가 주어졌을 때, 주어진 클래스를 다른 클래스들 중에서 잘 검출(detect)하는지 알고싶을 때 사용하는 개념이 recall이라는 개념입니다. 예를들어, 실제 A 클래스가 머신러닝 모델에 들어 왔을 때, 9번 정도 A라고 예측(prediction)했다면, “A,B,C,D 클래스”들 중에서 A 클래스를 90% 잘 검출해냈다고 할 수 있어요.

그래서 아래같와 같이 A에 대한 recall은 9/(9+1+0+0) 이 됩니다.

Recall 또한 각각의 클래스에 대한 recall의 평균을 취하기 때문에 한 class의 accuracy에 지나치게 의존하지 않게 됩니다.

Recall 또한 마찬가지로 imbalance한 dataset 상황에 있을 때, 각 클래스에 대한 평균을 취함으로써 특정 class의 의존성을 줄여주게 됩니다. 즉, 다시말해 recall은 머신러닝 모델이 특정 class에 대해 (특정 class가 test 입력으로 들어올때), 평균적으로 (전체 (A,B,C,D) 클래스들 중에서 정답이 되는 특정 클래스를) 얼마나 잘 detect(검출)하는지 알려주는 성과지표라고 할 수 있겠어요.

<6. F1-score>

앞선 글에서 봤듯이 클래스가 imbalance한 문제에서는 precision과 recall이 유용하게 사용될 수 있어요. 그렇다면 precision과 recall 지표를 동시에 잘 이용한다면 imbalance dataset이 주어진 상황에서 좀 더 좋은 모델을 선택할 수 있지 않을까요?

다시말해, 특정 class의 accuracy에 덜 의존하면서, precision(Given a class prediction from the classifier, how likely is it to be correct? )과 recall(Given a class, will the classifier detect it?)이 내재하고 있는 두 가지 상황(어떤 관점에서 모델을 판단할지)을 모두 고려하면, 좀 더 객관적이고 다양한 상황을 고려할 수 있는 평가지표가 될거에요.

일반적으로 어떤 두 개념을 동시에 고려할 때 도입되는 개념은 평균입니다. 그래서 Precision과 Recall 두 개념(속에 녹아있는 상황들)을 적절하게 고려해주기(나타내주기) 위해 Precision과 Recall의 평균을 취하게 되는거죠.

<사진1>

평균을 내는 방식에도 종류가 여러가지인데, 일반적으로 산술평균을 내게 되면 precision과 recall 두 개념(상황)을 모두 고려할 때 문제가 발생할 수 있어요. 앞서 Precision과 Recall에서 얻었던 장점이 특정 클래스의 accuracy에 의존적이지 않다는 점이라면, Precision과 Recall을 개념을 혼합할 때도 조심해야하는 부분이 두 값의 평균(precision과 recall을 혼합했을 때)값이 precision 또는 recall 두 개념을 적절하게 고려할 수 있는 값을 의미하는가에요.

precision = (p(A)+p(B)+p(C)+p(D))/4 = p

recall = (r(A)+r(B)+r(C)+r(D))/4) = r

산술 평균값 = (p+r)/2

예를들어, 어떤 A라는 모델에서 precision 값이 0.9이고, recall 값이 0.1이라고 해볼게요. 이 결과 산술평균값은 0.5일거에요. B라는 다른 모델에서는 precision 값이 0.5이고, recall 값도 0.5라고 해볼게요. 이 결과 산술평균값도 0.5에요. 그런데, A라는 모델에서 얻은 0.5라는 값이 precision, recall을 동시에 잘표현해주나요? precision의 의미를 내포한다고 하기에는 너무 결과값(평균값)이 작은것 같고, recall을 표현하기에는 결과값이 너무 큰 것 같지 않나요?

우리가 알고 싶은건 precision과 recall 이라는 두 개념을 동시에 잘 아울러서 보여줄 수 있는 결과값이 존재하는가에요. 즉, precision과 recall 값들의 차이가 나지 않아야 precision과 recall 모두 성능이 좋은지 아닌지를 이야기 할 수 있게 되는거에요. precision과 recall 두 값이 차이가 많이난다면 두 개념 중에 특정 값(precision or recall)에 의존적이게 됩니다.

precision, recall 값이 차이가 많이 난다면 당연히 두 개념이 머신러닝 모델 성능에도 문제가 있다고 보는것이 합리적인 판단이에요. 그래서 precision과 recall 이라는 상황을 고려할 때, 두 상황을 “모두” 적절하게 고려했는지를 판단하려면 precision과 recall 값의 차이가 심하게 나면 안됩니다.

그래서 precision과 recall 간에 차이가 급격하게 나는 것 보다, precision과 recall을 혼합한 결과가 두 값의 차이가 적을 때 높아야 두 상황(precision, recalll)을 적절하게 고려했다고 할 수 있을거에요.

이러한 철학을 기반으로 도입된 개념이 ‘조화평균’이라는 개념이에요.

1) 조화평균(harmonic mean)

말을 그대로 풀어 쓰면, 어떤 두 값에 대한 평균을 낼때 두 값이 조화롭다면(두 값의 차이가 많이 나지 않는다면) 높은 값을, 두 값이 조화롭지 않다면 (두 값의 차이가 많이 난다면) 낮은 값을 도출해준다는 철학을 갖고 있어요.

예를들어, 어떤 모델이 precision = a = 0.9 라고 하고, recall = b = 0.1을 기록했다고 하고, 다른 모델이 precision = a = 0.5, recall = b = 0.5라고 했을 때의 조화평균을 구하면 아래와 같아요.

첫 번째 케이스는 precision과 recall의 차이가 너무 크기 때문에 결과값이 낮게 나왔어요. 이 경우에는 precision과 recall 값들 간의 차이가 크기때문에 두 값을 동시에 잘 보여줄수 (상징할수) 없기 때문에 그러한 의미로 낮은 값이 도출됩니다. 두 번째 케이스는 precision과 recall을 모두 잘 대변해주고 있네요.

이렇게 precision과 recall에 대한 조화평균의 철학을 도입한 성과지표를 F1 score라고 할 수 있겠어요.

###요약하자면###

위와 같이 precision, recall에 대한 조화평균 값이 낮다고 한다면 두 가지 경우를 생각해 볼 수 있어요.

첫 번째는 precision, recall 값이 서로 차이가 많이 나는 경우입니다. 이러한 경우에는 두 값을 “동시에” 고려할만한 지표로 사용하기에 적절치 않기 때문에 조화평균값이 낮게 나옵니다. 즉, imbalance dataset 상황상에서 사용하기 힘든모델이라는 결론을 내릴 수 있어요.

두 번째는 precision, recall 값이 서로 차이가 많이 나지는 않은 경우입니다. 이러한 경우에는 precision, recall 값 모두가 낮기 때문에 이 역시 imbalance dataset 상황에서 사용하기 힘든모델이라는 결론을 내릴 수 있어요.

Precision만 너무 높아도 안되고, Recall만 너무 높아도 안되고, 이 둘 간의 평균값이 높아야 모델에 대한 전반적인 성능이 좋다고 할 수 있습니다. 그런데, 일반적인 산술평균을 적용하면 Precision or Recall 둘 중에 엄청 높은 값에 해당하는 쪽으로 평균이 치우쳐질 수 있기 때문에 조화평균을 사용하게됩니다.

일반적으로 두 값(precision, recall)이 어느정도 비례해야 좋은건데, 어느 한 값이 너무 낮아버리면 성능에도 당연히 문제가 있다고 보는게 맞기 때문에 산술평균을 쓰는것보다 조화평균을 쓰는 F1 score라는 성과지표를 사용하는것이 더 좋습니다.

[사진 래퍼런스]

사진1

http://blog.naver.com/PostView.nhn?blogId=dalsapcho&logNo=20167498252

키워드에 대한 정보 precision recall 차이

다음은 Bing에서 precision recall 차이 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [BigS] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기

  • 혼동행렬
  • 정확도
  • 민감도
  • 재현율
  • 특이도
  • 정분류율
  • 오분류율
  • f1
  • score
  • 오차행렬
  • confusion
  • matrix
[BigS] #맨날 #헷갈리는 #모델 #평가 #지표! #민감도, #재현율, #특이도, #정확도, #F1 #Score #이해하기 #+ #외우기


YouTube에서 precision recall 차이 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [BigS] 맨날 헷갈리는 모델 평가 지표! 민감도, 재현율, 특이도, 정확도, F1 Score 이해하기 + 외우기 | precision recall 차이, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  Cuchilla De Corte Profundo Cricut Maker | Explicando Cuchillas Y Tapetes De Corte De Cricut 인기 답변 업데이트

Leave a Comment