정리 조금/Basics

Macro & Micro Averaging

Turtle0105 2024. 2. 29. 22:12

Intro

Multiclass에서 Overall Accuracy와 Macro F1 score는 언제 같아지는가?

 

라는 질문으로 시작된 몇가지 metrics에 대한 조사. 생각보다 부정확하게 알고있었다...! Precision, Recall 그리고 F1 score에 대해서는 아래 포스트에서 다루었으니, 오늘은 multicalss에서의 metric 대해 조금만 생각해보고 넘어가자.

https://jaehong-data.tistory.com/5

 

F1 score

Intro 이진 분류는 두가지 범주를 갖는 표본을 분류하는 것이다. 분류는 일상 뿐 아니라 여러 산업에서 중요하게 사용되어 왔다. 전통적인 통계 모형인 (MLE를 IRLS로 추정하는) logistics regression부터,

jaehong-data.tistory.com

 

Macro & Micro Averaging

Micro averaging과 Macro averaging은 다중 클래스 분류 문제에서 성능 지표를 계산하는 두 가지 방법이다. 이러한 방법은 특히 클래스 간 불균형이 있을 때 중요하게 고려되어야 하며, 각 방법은 Precision과 Recall을 포함한 다양한 성능 지표의 계산에 적용될 수 있다. 구체적인 지표를 보기위해 먼저 일반적인 muticlass에서 confusion matrix를 보자면 아래와 같다.

 

여기서 각각 $k$ class의 TP, FP, FN을 $TP_k$, $FP_k$, $FN_k$라 하자.

Macro

Macro averaging은 모든 클래스에 대해 개별적으로 성능 지표를 계산한 후, 이를 평균하여 전체 성능을 평가한다. 이 방법은 모든 클래스를 동등하게 취급하며, 소수 클래스와 다수 클래스 사이의 성능 차이를 더 잘 드러내는 경향이 있다.

  • Macro Precision: 모든 클래스에 대한 Precision의 산술 평균.

  • Macro Recall: 모든 클래스에 대한 Recall의 산술 평균.

$$ Macro Recall = \sum_{k=1}^{n}{\frac{recall_k}{n}} $$

  • Macro F1 Score: 개별 클래스의 F1 Score를 계산한 후, 산술 평균한다.

$$ Macro F1 = \sum_{k=1}^{n}{\frac{F1_k}{n}} $$

Where $F1_k = 2 \times \frac{precison_k \times recall_k}{precison_k+recall_k} = \frac{2×TP_k}{2×TP_k+FP_k+FN_k​}$

각 클래스의 성능을 동일하게 여기고 반영!

 

  • 장점: 모든 클래스를 동일하게 취급하여, 클래스 간 균형을 유지하려는 시도에 유리. 클래스 불균형이 있는 데이터 세트에서 유용함.
  • 단점: 매우 적은 수의 샘플을 가진 클래스가 성능에 큰 영향을 줄 수 있어, 일부 경우에는 모델 성능의 과대평가나 과소평가를 일으킬 수 있음.

Micro

Micro averaging은 모든 클래스에 대한 성능을 집계하여 전체 성능을 계산한다. 이 방법은 각 클래스의 샘플 수를 고려하여 전체적인 성능을 평가한다. 구체적으로는 전체 TP, FP, FN을 사용하여 Precision, Recall, F1 Score를 계산한다.

  • Micro PrecisionMicro Recall은 윗그림 그대로 행렬로 계산하면 쉽다.

$$ (Micro Precision, Micro Recall) = (\frac {\sum_{k=1}^{n}{TP}} {\sum_{k=1}^{n}{TP} + \sum_{k=1}^{n}{FP}}, \frac {\sum_{k=1}^{n}{TP}} {\sum_{k=1}^{n}{TP} + \sum_{k=1}^{n}{FN}}) $$

 

  • Micro F1 Score는 Micro Precision과 Micro Recall의 조화 평균으로 계산됨. 이는 전체 데이터셋에 대한 균일한 성능 척도를 제공함.

$$MicroF1 = 2 \times \frac{Micro Precison \times Micro Recall}{Micro Precison+Micro Recall}$$

그런데 이렇게 되면, Micro F1 score까지도 같아진다.

 

  • 장점: 전체 성능에 중점을 두며, 모든 클래스의 샘플을 동등하게 취급. 대규모 데이터 세트와 클래스 불균형이 심한 경우에 유리.
  • 단점: 개별 클래스의 성능 변화를 덜 반영하므로, 특정 클래스에서의 성능 저하가 전체 성능 지표에 크게 반영되지 않을 수 있음.

ETC.

Weighted

마지막으로 Weighted version이 있다. 이는 직관적으로 각 class당 얼마만큼의 샘플이 있는지에 따라 가중치를 주어 계산하는 방식이다.

$$WeightedF1 = \sum_{k=1}^{n}{{w_k}{F1_k}} $$

Where $w_k=\frac{r_k}{S}$ is a proportion of class $k$.

 

  • 장점: 클래스의 크기(샘플 수)를 고려하여 각 클래스의 중요도를 반영. 클래스 불균형을 다루는 데 효과적.
  • 단점: 크기가 큰 클래스의 성능이 지표에 더 큰 영향을 미침. 이는 소수 클래스의 중요성을 상대적으로 감소시킬 수 있음.

Accuracy

참고로, accuracy($acc$)는 아래와 같다.

$$acc = \frac{TP}{S}$$

전체 예측 중에서 얼마나 맞게 예측했는지이다.

  • 장점: 직관적이고 이해하기 쉬움. 전체 데이터 세트에 대한 모델의 정확한 예측 비율을 제공.
  • 단점: 클래스 불균형이 있을 때 오해의 소지가 있음. 예를 들어, 한 클래스의 샘플이 대다수를 차지하는 경우, 모델이 항상 그 클래스를 예측하더라도 높은 정확도를 보일 수 있음.

Conclusion

전반적인 성능이 중요 - Micro F1 score
소수의 범주의 성능도 중요 - Macro F1 score

Outro

쭉 정리하고 나니, 별거없긴하다. 그래서 다시 처음의 질문으로 돌아가자면, 언제 macro F1 score와 accuracy가 같아지는가...?

우선, micro F1 score는 micro precision & micro recall과 이미 같고, 그에 따라 accuracy와 같아진다.

그렇다면, macro F1 score는 언제 accuracy와 같아지는가? 처음에는 그저 모든 margin이 column-wise & row-wise 모두 같은 값을 갖는다면 가능하다 생각했다. 그렇다면 가능은하지만, 너무 조건이 강하다. 가령 아래와 같은 순간이다.

 

$$\forall k, r_k=c_k=e $$

여기서 $e$는 어떤 상수이다.

 

그리고 오늘 수식으로만 보자면, 결국 $precision_k = recall_k$인 경우 +  class별 분포가 동일 + 완벽하게 균형 잡힌 분류기에서 가능하다는 사실을 알았다... 위 보다는 조금 느슨해보이는 조건이지만, 여전히 숨막힌다.

 

$$ Macro F1 Score =  \sum_{k=1}^{n}{\frac{precision_k}{n}} = \sum_{k=1}^{n}{\frac{accuracy}{n}} = accuracy $$

 

따라서 이 경우는 매우 드물며 결국엔, Accuracy는 전체적인 정확도에 중점을 두고, Macro F1 Score는 클래스별 성능의 균형을 중시한다는 결론이다. 한번 해봤으니 이제는 그냥 잘 사용하자.

 

혹시 또 다른 좋은 조건이 있다면 알려주세요!

 

Reference

Scikit learn

wiki

'정리 조금 > Basics' 카테고리의 다른 글

parquet  (0) 2024.04.22
Deep Copy & Shallow Copy  (0) 2024.03.11
Inner & Outer Product  (0) 2024.02.15
Internet Protocol  (0) 2024.02.14
Pixel  (0) 2023.12.01