F1 score란?

Jadon·2022년 2월 7일
9

좋은 Article을 읽게 되어 헷갈리던 ML metrics에 대해 정리해보고자 한다.

F1 score 소개

F1 score는 분류 모델에서 사용되는 머신러닝 metric(평가지표)이다. 분류 모델에 사용되는 다양한 metric이 존재하지만, F1 score를 사용하는 이유는 뭘까? F1 score를 알아보기전 Accuracy에 대해 알아보자.

Accuracy

정확도는 말 그대로 얼마나 정확하냐를 측정하는 지표이다. 예를 들어, 개와 고양이를 분류하는 모델에서 전체 (개 5장, 고양이 5장) 10장 중 9장을 올바르게 분류하고 1장을 다르게 분류했다면 해당 모델의 정확도는 90%가 된다. 이를 보다 정확하게 표현하면 아래와 같은 그림이 된다. (# = the number of = ~의 수)

정확도는 분류 문제에서 클래스들이 동일한 분포를 갖고 있을 때 유용하게 쓰인다. 쉽게 말해 개의 사진이 100장 고양이 사진이 100장 있다면 equal distribution이라고 할 수 있다.

Imbalanced data example

웹사이트에서 판매량 데이터를 분석하고 있다고 가정해보자. 99%의 방문자들은 물건을 사지 않고 1%의 방문자만 물건을 구입한다. 여기서 어떤 방문자가 물건을 구입하고 어떤 방문자가 그냥 보기만 하는지 분류하는 모델을 개발한다고 해보자.

자, 이제 개발한 모델이 제대로 예측하지 못한다고 생각해보자. 모델은 모든 방문자가 looker(보기만 하는 사람)라고 예측했다. 이는 명백히 틀렸고 쓸모없는 모델일 것이다.

Accuracy is not a good metric to use when you have class imbalance

번역하자면 정확도는 클래스가 불균형할 때는 좋은 메트릭이 아니다는 말이다. 위 분류 문제에서 정확도(Accuracy)를 평가지표로 쓴다면 어떻게 될까, 모델의 정확도는 99%가 된다. 99%(looker)는 올바르게 분류했고 1%(buyer->looker로 예측한 경우)만 잘못 분류한 것이 된다. 이 말을 잘 이해해야 한다. 여기서 문제는 모델이 매우 나쁜 성능이지만 99%의 정확도는 매우 좋은 결과처럼 들린다는 것이다. 결론적으로 데이터가 불균형할 때는 정확도가 좋지 않은 지표라는 것이다.

Solving imbalanced data through metrics

데이터 불균형 문제를 해결하는 하나의 방법은 F1 Score를 사용하는 것이다. F1 Score는 예측 오류 개수만 관련되는 것이 아니라 발생한 오류의 종류도 관여하게 된다. 뒤에서 쉽게 알아보자.

Precision and Recall: foundations of the F1 Score

Precision(정밀도)과 Recall(재현율)은 데이터가 불균형할 때 사용하는 가장 대표적인 2가지 메트릭이고 F1 score의 기초가 된다. 하나씩 알아보자.

Precision: the first part of the F1 score

Precision은 독립적인 메트릭으로도 사용될 수 있다. 공식은 아래와 같다.

이것을 해석하자면, 모델이 True라고 분류한 것 중에서 실제로 True인 것의 비율이다.

  • 정확하지 않은 모델은 많은 것을 positive라고 예측할 것이다. 하지만 negative인 것을 positive로 예측한 노이즈가 많이 껴있을 것이다.
  • 정확한 모델은 "pure", 즉 순수하다. 모든 positive를 찾지는 못하더라도 최소한 positive라고 예측한 것은 모두 positive인 것을 의미한다. 쉽게 말해, 암에 걸렸다고 판단한 데이터가 100명이라면 100명 모두 실제로 암에 걸린 것이다.

Recall: the second part of the F1 score

Recall 또한 독립적인 메트릭으로도 사용할 수 있다. 공식은 아래와 같다.

이것을 해석하자면, 실제 True인 것 중에서 모델이 True라고 예측한 것의 비율이다.

  • Recall이 높으면 몇 개의 negative를 positive로 분류할지라도 data에서 positive case를 잘 찾은것을 의미한다.
  • Recall이 낮으면 데이터에서 positive case들을 전혀 찾을 수 없다는 것이다.

Precision vs Recall

그래서 뭐가 어떻게 다를까? 명백히 하자면, 슈퍼마켓에서 문제가 있는 제품을 팔았을 때, 그들은 문제가 있는 제품들을 회수(recall)하고 싶을 것이다. Precision과 Recall의 차이는 분모에 FP가 들어가냐 FN이 들어가냐 이다. 여기서 True Postive, True Negative, False Positive, False Negative를 알아보자.

  • True Postive: 문제가 있는(positive) 제품을 문제가 있다고(positive) 잘(true) 판별한 것.

  • True Negative: 문제가 없는(negative) 제품을 문제가 없다고(negative) 잘(true) 판별한 것.

  • False Positive: 문제가 없는(negative) 제품을 문제가 있다고(positive) 잘못(false) 판단한 것.

  • False Negative: 문제가 있는(positive) 제품을 문제가 없다고(negative) 잘못(false) 판단한 것.

그들은 오직 문제가 있는 모든 제품을 다시 되돌려 받는 것에만 관심이 있고 몇 클라이언트가 문제가 없는 제품을 되돌려주어도 상관이 없다면 precision은 이 슈퍼마켓의 관심사가 아닌 것이다.

아직도 이해가 어려울 수 있으니 다시 한 번 설명하자면, 문제가 있는 모든 제품을 다시 되돌려 받기만 하면 된다면, 문제가 없는 제품을 문제가 있다고 잘못 판단하여 되돌려 주는것은 전혀 상관이 없다. 하지만, 문제가 있는 제품을 문제가 없다고 잘못 판단하여 돌려주지 않게 되면 나중에 고소를 당하는 등, 문제가 발생할 수 있다.

Precision-Recall Trade-Off

이상적으로, 좋은 모델은 positive한 것을 모두 제대로 분류하고, positive한 것만 제대로 분류하면 된다. 하지만 현실에서는 두 가지 모두 높이는 것은 힘들다.

The F1 score: combining Precision and Recall

Precision과 Recall으로 F1 score가 구성되고 불균형한 데이터에서 잘 동작하는 평가지표가 된다. F1 score는 precision과 recall의 조화평균이 되고 공식은 아래와 같다.

왜 하필 조화평균일까?

Precision과 Recall중 더 작은 값에 영향을 많이 받게 하기 위함이다.
예컨대, precision = 0.9 recall = 0.1 이라면 f1_score = 0.18이지만 precision = 0.6 recall = 0.4라면 f1_score = 0.48이다.

Conclusion

결론적으로 F1 score는 precision과 recall이 모두 높으면 높고 0.0 ~ 1.0 사이의 값을 가진다(e.g. 0.87, %아님 주의).

위의 슈퍼마켓 예시는 precision을 무시한다. 따라서 슈퍼마켓 입장에서는 문제가 없는 제품까지 돌려받게 되어 손해가 발생할 수 있다.

처음 언급했던 웹사이트에서 buyer와 looker를 분류하는 예시에서 99명이 looker(negative)이고 1명이 buyer(positive)인 경우 모두 looker로 분류한 모델을 Accuracy(정확도)로 평가하면 99%의 정확도라는 썩 괜찮은 모델같지만, F1 score로 평가하게 되면 0이 나온다. 좋지 않은 모델이라는 것을 판단할 수 있게 되었다.

6개의 댓글

comment-user-thumbnail
2022년 8월 19일

안녕하세요. 좋은 설명 감사합니다.
혹시 아래에 설명해주신
"모두 looker로 분류한 모델을 F1 score로 평가하게 되면 0.4974가 나온다"
에서 어떻게 0.4974로 나오는지 알 수 있을까요??

제가 이해한 바로는
precision = TP / (TP + FP) = 99/100 = 0.99
recall = TP / (TP + FN) = 99 / 99 = 1
F1 Score = 2 (precision recall) / (precision+recall) = 0.9949748743718593

이렇게 나와서 문의드립니다!
감사합니다!

2개의 답글