본문 바로가기
대학원 라이프/Step2.1 : 데이터공부

데이터공부#4 Accuracy와 F1-score (feat. Precision, Recall) 이해하기

by 더함 2023. 5. 29.
반응형

논문을 쓰기 위해 다시(?) 이해해보는 f1-score.

(결과를 돌려봤는데 이해가 안됨..ㅠㅠㅠㅠ)

 

전반적으로 아래 유튜브를 보며 이해했지만 중간중간 개인적으로 잘 와닿지 않는 부분들도 있어서 내가 보는 용도로

다시 정리해보기로 했다. Business Analytics 수업을 들으며 분명히 배웠는데 이게 막상 실제로 내가 필요해서 써먹으려고 보니 설렁설렁 이해하고 넘어간 것으로는 한계가 있다..ㅠ

 

[Confusion Matrix]

 

먼저 Confusion Matrix를 그리는 것부터 시작하는데,

아래의 추정과 실제 각각의 경우의 수를 기록한 표를 Confusion Matrix라고 한다.

[Accuracy]

 

그럼 기본으로 많이 사용되는 Accuracy로 시작해보자.

(SUM의 경우는 보통 표시 안하는 것 같은데 계산을 좀 편하게 해보려고 넣어놨다)

 

Accuracy는 전체 중에서 정답을 제대로 맞춘 비율을 말한다.

그러므로 노란 색으로 표시한 정답(100+90+110) / 전체(450) = 300/450 = 0.875

단, Accuracy의 경우 각 구분자별로 데이터의 비율이 크게 차이가 없어야 의미가 있다.

아래는 영상보다 좀 더 부풀려서 표현해본 데이터이다.

이 경우에 Accuracy는 정답(400+0+0) / 전체(450) = 0.888

위의 모델보다 Accuracy가 높지만, 실상은 A만 100% 맞추고 B와 C는 전혀 맞추지 못하고 있다.

 

그러므로 단순히 Accuracy가 높다고 좋은 모델이라고 하기엔 한계가 있으며, 데이터가 어떤 상태에 있는지에 대해 먼저 살펴보고 알맞은 모델을 적용해야 한다. 이 때 이를 고려하여 판단할 수 있는 기준 중 하나가 f1-score라고 보면 된다.

 

[f1-score]

 

f1-score는 아래와 같이 계산된다.

 

f1-score = 2 * (precision * recall) / (precision + recall)

 

즉, precision과 recall의 조화평균을 f1-score라고 부르고 있다.

이를 계산하려면 precision(=정확도, 정밀도)과 recall(=검출율, 재현율)에 대해 이해가 필요하다.

(생각해보니 굳이 재현율이 얼마야?라고 묻지 않으므로 번역 자체가 필요가 없는 것 같기도..)

 

그리고 precision과 recall을 계산하려면 다시 또 타고 들어가서 아래의 개념이 필요하다.

(neverending story..)

TP(=True Positive) : True로 추정했는데 실제도 True인 것.

FP(=False Positive) : True로 추정했지만 실제는 False인 것.

FN(=False Negative) : False로 추정했지만 실제는 True인 것.

TN(=True Negative) : False로 추정했는데 실제도 False인 것.

 

일단 T로 시작하면 맞춘 것, F로 시작하면 틀렸다고 구분할 수 있으며,

P면 True로 추정했다, N이면 False로 추정했다고 구분된다.

 

다시 돌아와서 precision과 recall을 살펴보자.

 

precision = TP / (TP+FP)

 

TP+FP, 즉 맞았건 틀렸건 True라고 추정한 값들 중에서 True를 맞춘 비율이라고 볼 수 있다.

표를 기준으로 하면 아래처럼 빨간 테두리를 전체(분모)로 그 중에 노란 음영처리한 TP의 비율이다.

 

recall = TP / (TP+FN)

 

TP+FN, 추정을 뭘로 했건 실제 True인 값들 중에서 True를 맞춘 비율이라고 볼 수 있다.

표를 기준으로 하면 아래처럼 빨간 테두리를 전체(분모)로 그 중에 노란 음영처리한 TP의 비율이다.

 

결국 precision이나 recall이나 분모가 달라질 뿐 결국은 TP를 얼마나 잘맞추는지에 관심이 있다.


다시 Confusion Matrix로 돌아와보자.

 

먼저 precision을 구하려면 TP와 FP가 필요하다.

 

A, B, C 각각의 경우에 따라 계산 해보면,

A의 경우, TP = 100, FP = 20 + 30 or 150 - 100 = 50

    그러므로 precision(A) = 100 / 150 = 0.67

B의 경우, TP = 90, FP = 40 + 20 or 150 - 90 = 60

    그러므로 precision(B) = 90 / 150 = 0.60

C의 경우, TP = 110, FP = 20 + 20 or 150 - 110 = 40

    그러므로 precision(C) = 110 / 150 = 0.73

 

precision의 평균을 구해보면 (precision(A) + precision(B) + precision(C)) / 3 = 0.67

다음으로 recall을 구하려면 TP와 FN이 필요하다.

 

다시 A, B, C 각각의 경우에 따라 계산 해보면,

A의 경우, TP = 100, FN = 60

    그러므로 recall(A) = 100 / 160 = 0.63

B의 경우, TP = 90, FN = 40

    그러므로 recall(B) = 90 / 130 = 0.69

C의 경우, TP = 110, FN = 50

    그러므로 recall(C) = 110 / 160 = 0.69

 

recall의 평균을 구해보면 (recall(A) + recall(B) + recall(C)) / 3 = 0.67

 

이를 바탕으로 f1-score를 구해보면 아무튼 평균이므로 둘의 조화평균을 구해보니 0.67이 나온다.

 

f1-score = 2 * 0.67 * 0.67 / (0.67 + 0.67) = 0.67

 

결국 첫 번째 Confusion Matrix의 경우 Accuracy는 0.875, f1-score는 0.67이 나온다.


다음 Confusion Matrix로 가보자.

극단적으로 설계했으므로 나름 유의미하게 나오지 않을까?

 

우선 precision을 구해보자.

 

A의 경우, TP = 400, FP = 0. 그러므로 precison(A) = 1

B의 경우, TP = 0, FP = 30. 그러므로 precision(B) = 0

C의 경우, TP = 0, FP = 20. 그러므로 precision(C) = 0

 

precision의 평균을 구해보면 (1+0+0) / 3 = 0.33

다음으로 recall을 구해보자.

 

A의 경우, TP = 400, FN = 30. 그러므로 recall(A) = 400 / 430 = 0.93

B의 경우, TP = 0, FN = 10. 그러므로 recall(B) = 0

C의 경우, TP = 0, FN = 10. 그러므로 recall(C) = 0

 

그러므로 recall의 평균을 구해보면 (0.93 + 0 + 0) / 3 = 0.31

 

동일하게 f1-score를 구해보면 0.32가 나옴을 확인할 수 있다.

 

결국 두 번째 Confusion Matrix의 경우 Accuracy는 0.888, f1-score는 0.32가 나온다.


결국 Acc, f1-score의 조합을 보면 Confusion Matrix별로 첫 번째는 (0.875, 0.67) 두 번째는 (0.888, 0.32)

 

Accuracy로 봤을 때 두 번째가 높았지만, f1-score를 추가로 고려해줌으로써 첫 번째 경우가 데이터에 적합한 모델이

잘 적용된 케이스임을 확인할 수 있었다.

 

F1-score의 경우 Precision과 Recall이라는 개념을 도입함으로써 각 경우별로 찢어서 확률을 계산해주다보니, 실제건 추정이건 모수가 적은 케이스가 있어도 이에 대한 보정치가 들어가면서 어느 하나의 케이스에 대한 성능이 확 떨어진다면 이에 대해 Accuracy에 비해 훨씬 가중치가 들어간다고 이해할 수 있을 것 같다.

 

영상과는 실제와 추정의 축이 다르게 표현되어 있어서 가로세로가 다름에 유의해주시길.

 

[머신러닝] 다중 분류 모델 성능 측정 (accuracy, f1 score, precision, recall on multiclass classification) - YouTube

 

반응형

댓글