Micro, Macro, Weighted Averaged F1 Score

상솜공방·2024년 12월 30일

딥러닝

목록 보기
2/4

머신 러닝에서 다중 클래스 분류를 수행할 때, 정밀도(Precision), 재현율(Recall), 그리고 이를 조화평균한 F1 스코어(F1-score)를 여러 방식으로 요약해볼 수 있습니다. 대표적으로 micro, macro, weighted avg 방식을 사용해 F1 스코어를 계산할 수 있는데요. 아래에서 각각의 공식(수식)특징을 상세히 정리해보겠습니다.


1. 먼저, F1 스코어 기본 정의

이진 분류에서 F1 스코어는 다음과 같이 정의됩니다.

F1=2×Precision×RecallPrecision+Recall\text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}
  • Precision=TPTP+FP\text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}}
  • Recall=TPTP+FN\text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}}

다중 클래스의 경우에는 클래스별로 TP, FP, FN을 정의하고, 이를 어떻게 합치거나 평균낼지에 따라 micro-F1, macro-F1, weighted-F1로 나뉩니다.


2. Micro-averaged F1

2.1 정의

  • 마이크로 평균은 다중 클래스 분류에서 모든 클래스의 TP, FP, FN을 전부 합산한 뒤,
    그 합산 값( k=1KTPk\sum_{k=1}^{K} \text{TP}_k, k=1KFPk\sum_{k=1}^{K} \text{FP}_k, k=1KFNk\sum_{k=1}^{K} \text{FN}_k )을 가지고 정밀도와 재현율을 한 번에 계산하는 방식입니다.
Precisionmicro=k=1KTPkk=1K(TPk+FPk),Recallmicro=k=1KTPkk=1K(TPk+FNk).\text{Precision}_{\text{micro}} = \frac{\sum_{k=1}^{K} \text{TP}_k}{\sum_{k=1}^{K} (\text{TP}_k + \text{FP}_k)}, \quad \text{Recall}_{\text{micro}} = \frac{\sum_{k=1}^{K} \text{TP}_k}{\sum_{k=1}^{K} (\text{TP}_k + \text{FN}_k)}.
  • 이를 이용해 F1 스코어를 구하면 Micro-F1이 됩니다.
F1micro=2×Precisionmicro×RecallmicroPrecisionmicro+Recallmicro.\text{F1}_{\text{micro}} = 2 \times \frac{\text{Precision}_{\text{micro}} \times \text{Recall}_{\text{micro}}} {\text{Precision}_{\text{micro}} + \text{Recall}_{\text{micro}}}.

2.2 특징

  1. Micro-Precision = Micro-Recall
    kTPk\sum_k \text{TP}_k이 분자에 공통으로 들어가므로, 수학적으로 보면 micro-precision과 micro-recall은 동일한 값이 됩니다.
    따라서
    Micro-F1=Micro-Precision=Micro-Recall.\text{Micro-F1} = \text{Micro-Precision} = \text{Micro-Recall}.
  2. “샘플” 단위로 계산
    • 클래스별로 나누지 않고, 전체 샘플 단위에서 이진 분류처럼 묶어서 보는 개념입니다.
    • 클래스가 여러 개라도, 전체적으로 맞춘 샘플(TP) / 전체 예측(또는 전체 실제)로 보는 것이므로, 데이터가 많이 몰린(샘플 수가 큰) 클래스가 더 큰 영향력을 가집니다.
  3. 실전 활용
    • 전체적인 분류 성능을 빨리 파악하기에 유리.
    • 클래스 불균형이 있어도, “모든 샘플 중 얼마나 맞췄는가”라는 관점에서 직관적 성능 지표를 얻을 수 있음.

3. Macro-averaged F1

3.1 정의

  • 매크로 평균각 클래스별로 Precision, Recall, F1을 구한 뒤, 이를 단순 평균(가중 없이) 내는 방식입니다.

1) 먼저 각 클래스 kk에 대해,

Precisionk=TPkTPk+FPk,Recallk=TPkTPk+FNk,F1k=2×Precisionk×RecallkPrecisionk+Recallk.\text{Precision}_k = \frac{\text{TP}_k}{\text{TP}_k + \text{FP}_k}, \quad \text{Recall}_k = \frac{\text{TP}_k}{\text{TP}_k + \text{FN}_k}, \quad \text{F1}_k = 2 \times \frac{\text{Precision}_k \times \text{Recall}_k}{\text{Precision}_k + \text{Recall}_k}.

2) 그리고 F1k\text{F1}_k평균 (클래스가 KK개라면 1Kk=1KF1k\frac{1}{K}\sum_{k=1}^K \text{F1}_k):

F1macro=1Kk=1KF1k.\text{F1}_{\text{macro}} = \frac{1}{K} \sum_{k=1}^{K} \text{F1}_k.

3.2 특징

  1. 클래스별 성능을 동일한 중요도로 반영
    • 클래스 빈도(샘플 수)와 무관하게, 각 클래스의 F1 점수를 “똑같은 비중”으로 평균하기 때문에, 소수 클래스에 대한 성능이 매우 낮으면 매크로 평균이 크게 떨어짐.
  2. 소수(희귀) 클래스 중요
    • 데이터 불균형이 심한 상황에서, 대부분 샘플이 차지하는 클래스 하나만 잘 맞춰도 micro-F1은 높을 수 있지만, 소수 클래스에서 성능이 나쁘면 macro-F1은 크게 감소.
    • 소수 클래스의 성능을 높이고자 할 때 macro-F1을 참고하면 좋습니다.

4. Weighted-averaged F1

4.1 정의

  • 가중 평균(weighted average)은, 각 클래스별로 F1 점수를 구한 뒤, 해당 클래스의 샘플 수 비중(wkw_k)으로 가중하여 평균내는 방식입니다.
F1weighted=k=1Kwk×F1k,wherewk=클래스 k의 샘플 수전체 샘플 수.\text{F1}_{\text{weighted}} = \sum_{k=1}^{K} w_k \times \text{F1}_k, \quad \text{where} \quad w_k = \frac{\text{클래스 }k\text{의 샘플 수}}{\text{전체 샘플 수}}.

4.2 특징

  1. 클래스 분포(샘플 수)에 비례
    • 샘플 수가 많을수록 해당 클래스 F1이 결과에 크게 기여.
    • 따라서, 클래스가 불균형하더라도 각 클래스별 성능(F1)을 계산하되, 많이 등장하는 클래스를 더 강조하고 싶을 때 쓰기 좋다.
  2. Macro-F1 대비
    • 매크로와 달리, 샘플 수가 많은 클래스가 더 큰 가중을 받음.
    • 한편, 소수 클래스를 완전히 무시하는 것은 아니며, 소수 클래스의 F1도 반영되기는 하되 가중치가 작아서, 기여도는 작아질 수 있음.
  3. 실전 활용
    • 클래스 불균형이 있지만, 그래도 모든 클래스 성능 지표를 계산한 뒤 “최종 한 숫자로 요약”할 때 자주 사용됨.
    • 특히, 다중 클래스 분류 리포트(예: scikit-learn의 classification_report)에 기본적으로 macro avg, weighted avg가 함께 제공되는 경우가 많다.

5. 어느 것을 중요하게 볼까?

  1. 불균형이 심하고, 다수 클래스 위주로 성능이 중요한 경우

    • Micro-F1이나 Weighted-F1을 특히 많이 참고
    • 예: 실제 업무량이 대부분 특정 1~2개 클래스에서 발생하고, 이를 잘 맞추는 것이 비즈니스적으로 매우 중요하다면, Micro-F1 기준이 더 실용적일 수 있음
  2. 소수 클래스까지 모두 중요하거나, 각 클래스가 동일하게 중요한 경우

    • Macro-F1을 우선시하여 “각 클래스 성능”을 고르게 확인
    • 예: 질병 분류에서 3~4가지 질병 유형이 있고, 어느 한 유형도 놓쳐서는 안 되는 경우. 샘플 수는 다를 수 있지만, 매크로 F1 기준으로 보는 것이 유리
  3. 클래스 간 중요도가 비례하되, 극단적 불균형이 있을 때

    • Weighted-F1으로 “샘플 수 많은 클래스”에 조금 더 무게를 두되, 그래도 “소수 클래스” 성능이 어떤지 가중 평균으로 파악
    • 예: 10개 클래스 중 하나만 샘플 수가 극도로 적은데, 그래도 완전히 무시할 수는 없을 때

6. 결론 & 추천

  • 문제 도메인에서 각 클래스의 중요도가 동일하다면, Macro-F1을 좀 더 주의 깊게 보는 것을 권장합니다.
  • 전체 샘플 기준으로 글로벌 성능을 확인하고 싶다면, Micro-F1이 적합합니다.
  • 클래스 불균형을 일부 반영하면서도, “클래스별 성능”을 구해보고 싶다면, Weighted-F1이 유용합니다.

현업 실무연구에서도, 하나의 지표만 보지 않고, Micro-F1, Macro-F1, Weighted-F1을 함께 보면서 “모델이 어떤 클래스를 잘/못 맞추는지”를 종합적으로 파악하는 경우가 많습니다. 각각의 의의를 비교하며 여러 각도에서 모델을 평가해보시는 것이 가장 바람직합니다.


7. 실제 계산 해보기

1. 예시 데이터

예시로, 실제 클래스(행)와 예측 클래스(열)가 다음과 같다고 가정해 봅시다:

실제\예측ABC(실제 라벨 별 합)A153220B410317C121215(예측 라벨 별 합)20151752\begin{array}{c|ccc|c} \textbf{실제}\backslash\textbf{예측} & A & B & C & \text{(실제 라벨 별 합)} \\ \hline A & 15 & 3 & 2 & 20 \\ B & 4 & 10 & 3 & 17 \\ C & 1 & 2 & 12 & 15 \\ \hline \text{(예측 라벨 별 합)} & 20 & 15 & 17 & 52 \end{array}
  • AA로 예측한 총 샘플 수: 15+4+1 = 20
  • BB로 예측한 총 샘플 수: 3+10+2 = 15
  • CC로 예측한 총 샘플 수: 2+3+12 = 17
  • 전체 샘플 수: 20+17+15=5220 + 17 + 15 = 52

이 표에서,

  • 대각선(15, 10, 12)이 모델이 맞춘 개수(TP)
  • 행이 실제 클래스, 열이 예측 클래스

2. 클래스별 Precision, Recall, F1 계산

각 클래스(A, B, C)에 대해, Precision, Recall, F1을 구합니다.

2.1 클래스 A에 대한 지표

  • TP(A) = 15
  • 실제 A 수(row A 합) = 20
  • 예측 A 수(column A 합) = 20
PrecisionA=TP(A)예측 A 수=1520=0.75\text{Precision}_A = \frac{\text{TP(A)}}{\text{예측 A 수}} = \frac{15}{20} = 0.75
RecallA=TP(A)실제 A 수=1520=0.75\text{Recall}_A = \frac{\text{TP(A)}}{\text{실제 A 수}} = \frac{15}{20} = 0.75
F1A=2×0.75×0.750.75+0.75=2×0.56251.5=0.75\text{F1}_A = 2 \times \frac{0.75 \times 0.75}{0.75 + 0.75} = 2 \times \frac{0.5625}{1.5} = 0.75

2.2 클래스 B에 대한 지표

  • TP(B) = 10
  • 실제 B 수 = 17
  • 예측 B 수 = 15
PrecisionB=10150.6667\text{Precision}_B = \frac{10}{15} \approx 0.6667
RecallB=10170.5882\text{Recall}_B = \frac{10}{17} \approx 0.5882
F1B=2×0.6667×0.58820.6667+0.58822×0.39211.25490.624  (대략)\text{F1}_B = 2 \times \frac{0.6667 \times 0.5882}{0.6667 + 0.5882} \approx 2 \times \frac{0.3921}{1.2549} \approx 0.624 \;(\text{대략})

2.3 클래스 C에 대한 지표

  • TP(C) = 12
  • 실제 C 수 = 15
  • 예측 C 수 = 17
PrecisionC=12170.7059\text{Precision}_C = \frac{12}{17} \approx 0.7059
RecallC=1215=0.8\text{Recall}_C = \frac{12}{15} = 0.8
F1C=2×0.7059×0.80.7059+0.81.12941.50590.75\text{F1}_C = 2 \times \frac{0.7059 \times 0.8}{0.7059 + 0.8} \approx \frac{1.1294}{1.5059} \approx 0.75

3. Micro-F1 계산

마이크로 평균(Micro-F1)에서의 정밀도와 재현율은, “전체 TP / 전체 예측 양성” 및 “전체 TP / 전체 실제 양성” 관점에서 동일해집니다.

  • 전체에서 맞춘 샘플(TP 총합) = 15 + 10 + 12 = 37
  • 전체 샘플 수 = 52
Micro-Precision=TP 전체 합전체 예측 Positive=37520.7115\text{Micro-Precision} = \frac{\text{TP 전체 합}}{\text{전체 예측 Positive}} = \frac{37}{52} \approx 0.7115
Micro-Recall=TP 전체 합전체 실제 Positive=3752=0.7115\text{Micro-Recall} = \frac{\text{TP 전체 합}}{\text{전체 실제 Positive}} = \frac{37}{52} = 0.7115
Micro-F1=2×Micro-Precision×Micro-RecallMicro-Precision+Micro-Recall=0.7115(Micro-Precision=Micro-Recall이므로)\text{Micro-F1} = 2 \times \frac{\text{Micro-Precision} \times \text{Micro-Recall}}{\text{Micro-Precision} + \text{Micro-Recall}} = 0.7115 \\\quad(\text{Micro-Precision} = \text{Micro-Recall} \text{이므로})

4. Macro-F1 계산

매크로 평균(Macro-F1)은 클래스별 F1의 단순 평균입니다.

Macro-F1=F1A+F1B+F1C3=0.75+0.624+0.753=2.12430.708\text{Macro-F1} = \frac{\text{F1}_A + \text{F1}_B + \text{F1}_C}{3} = \frac{0.75 + 0.624 + 0.75}{3} = \frac{2.124}{3} \approx 0.708

(반올림에 따라 약 0.71 정도)


5. Weighted-F1 계산

가중 평균(Weighted-F1)은 각 클래스별 F1에 해당 클래스의 샘플 비중(실제 라벨 수 / 전체 샘플 수)을 곱해서 더해준 값입니다.

  • 클래스 A 샘플 비중 = 20/520.384620 / 52 \approx 0.3846
  • 클래스 B 샘플 비중 = 17/520.326917 / 52 \approx 0.3269
  • 클래스 C 샘플 비중 = 15/520.288515 / 52 \approx 0.2885
Weighted-F1=wAF1A+wBF1B+wCF1C\text{Weighted-F1} = w_A \cdot \text{F1}_A + w_B \cdot \text{F1}_B + w_C \cdot \text{F1}_C
=0.3846×0.75  +  0.3269×0.624  +  0.2885×0.75= 0.3846 \times 0.75 \;+\; 0.3269 \times 0.624 \;+\; 0.2885 \times 0.75
=0.28845  +  0.2043  +  0.2163750.709= 0.28845 \;+\; 0.2043 \;+\; 0.216375 \approx 0.709

6. 결과 요약

  • Micro-F1 0.7115\approx 0.7115
  • Macro-F1 0.708\approx 0.708
  • Weighted-F1 0.709\approx 0.709

각 지표는 다른 관점을 반영합니다.

  • Micro-F1: 전체 샘플 기준으로 “전반적(Global) 성능” 파악
  • Macro-F1: 클래스별 성능을 “동등 가중”으로 평균 (소수 클래스 성능 반영이 큼)
  • Weighted-F1: 클래스 “샘플 비중”만큼 가중 (불균형 데이터에서 자주 사용)

실무·연구에서는 보통 모든 지표를 함께 참고하여 모델을 해석하는 경우가 많습니다.

profile
상어 인형을 좋아하는 사람

0개의 댓글