머신 러닝에서 다중 클래스 분류를 수행할 때, 정밀도(Precision), 재현율(Recall), 그리고 이를 조화평균한 F1 스코어(F1-score)를 여러 방식으로 요약해볼 수 있습니다. 대표적으로 micro, macro, weighted avg 방식을 사용해 F1 스코어를 계산할 수 있는데요. 아래에서 각각의 공식(수식)과 특징을 상세히 정리해보겠습니다.
1. 먼저, F1 스코어 기본 정의
이진 분류에서 F1 스코어는 다음과 같이 정의됩니다.
F1=2×Precision+RecallPrecision×Recall
- Precision=TP+FPTP
- Recall=TP+FNTP
다중 클래스의 경우에는 클래스별로 TP, FP, FN을 정의하고, 이를 어떻게 합치거나 평균낼지에 따라 micro-F1, macro-F1, weighted-F1로 나뉩니다.
2. Micro-averaged F1
2.1 정의
- 마이크로 평균은 다중 클래스 분류에서 모든 클래스의 TP, FP, FN을 전부 합산한 뒤,
그 합산 값( ∑k=1KTPk, ∑k=1KFPk, ∑k=1KFNk )을 가지고 정밀도와 재현율을 한 번에 계산하는 방식입니다.
Precisionmicro=∑k=1K(TPk+FPk)∑k=1KTPk,Recallmicro=∑k=1K(TPk+FNk)∑k=1KTPk.
- 이를 이용해 F1 스코어를 구하면 Micro-F1이 됩니다.
F1micro=2×Precisionmicro+RecallmicroPrecisionmicro×Recallmicro.
2.2 특징
- Micro-Precision = Micro-Recall
∑kTPk이 분자에 공통으로 들어가므로, 수학적으로 보면 micro-precision과 micro-recall은 동일한 값이 됩니다.
따라서 Micro-F1=Micro-Precision=Micro-Recall.
- “샘플” 단위로 계산
- 클래스별로 나누지 않고, 전체 샘플 단위에서 이진 분류처럼 묶어서 보는 개념입니다.
- 클래스가 여러 개라도, 전체적으로 맞춘 샘플(TP) / 전체 예측(또는 전체 실제)로 보는 것이므로, 데이터가 많이 몰린(샘플 수가 큰) 클래스가 더 큰 영향력을 가집니다.
- 실전 활용
- 전체적인 분류 성능을 빨리 파악하기에 유리.
- 클래스 불균형이 있어도, “모든 샘플 중 얼마나 맞췄는가”라는 관점에서 직관적 성능 지표를 얻을 수 있음.
3. Macro-averaged F1
3.1 정의
- 매크로 평균은 각 클래스별로 Precision, Recall, F1을 구한 뒤, 이를 단순 평균(가중 없이) 내는 방식입니다.
1) 먼저 각 클래스 k에 대해,
Precisionk=TPk+FPkTPk,Recallk=TPk+FNkTPk,F1k=2×Precisionk+RecallkPrecisionk×Recallk.
2) 그리고 F1k를 평균 (클래스가 K개라면 K1∑k=1KF1k):
F1macro=K1k=1∑KF1k.
3.2 특징
- 클래스별 성능을 동일한 중요도로 반영
- 클래스 빈도(샘플 수)와 무관하게, 각 클래스의 F1 점수를 “똑같은 비중”으로 평균하기 때문에, 소수 클래스에 대한 성능이 매우 낮으면 매크로 평균이 크게 떨어짐.
- 소수(희귀) 클래스 중요
- 데이터 불균형이 심한 상황에서, 대부분 샘플이 차지하는 클래스 하나만 잘 맞춰도 micro-F1은 높을 수 있지만, 소수 클래스에서 성능이 나쁘면 macro-F1은 크게 감소.
- 소수 클래스의 성능을 높이고자 할 때 macro-F1을 참고하면 좋습니다.
4. Weighted-averaged F1
4.1 정의
- 가중 평균(weighted average)은, 각 클래스별로 F1 점수를 구한 뒤, 해당 클래스의 샘플 수 비중(wk)으로 가중하여 평균내는 방식입니다.
F1weighted=k=1∑Kwk×F1k,wherewk=전체 샘플 수클래스 k의 샘플 수.
4.2 특징
- 클래스 분포(샘플 수)에 비례
- 샘플 수가 많을수록 해당 클래스 F1이 결과에 크게 기여.
- 따라서, 클래스가 불균형하더라도 각 클래스별 성능(F1)을 계산하되, 많이 등장하는 클래스를 더 강조하고 싶을 때 쓰기 좋다.
- Macro-F1 대비
- 매크로와 달리, 샘플 수가 많은 클래스가 더 큰 가중을 받음.
- 한편, 소수 클래스를 완전히 무시하는 것은 아니며, 소수 클래스의 F1도 반영되기는 하되 가중치가 작아서, 기여도는 작아질 수 있음.
- 실전 활용
- 클래스 불균형이 있지만, 그래도 모든 클래스 성능 지표를 계산한 뒤 “최종 한 숫자로 요약”할 때 자주 사용됨.
- 특히, 다중 클래스 분류 리포트(예: scikit-learn의 classification_report)에 기본적으로 macro avg, weighted avg가 함께 제공되는 경우가 많다.
5. 어느 것을 중요하게 볼까?
-
불균형이 심하고, 다수 클래스 위주로 성능이 중요한 경우
- Micro-F1이나 Weighted-F1을 특히 많이 참고
- 예: 실제 업무량이 대부분 특정 1~2개 클래스에서 발생하고, 이를 잘 맞추는 것이 비즈니스적으로 매우 중요하다면, Micro-F1 기준이 더 실용적일 수 있음
-
소수 클래스까지 모두 중요하거나, 각 클래스가 동일하게 중요한 경우
- Macro-F1을 우선시하여 “각 클래스 성능”을 고르게 확인
- 예: 질병 분류에서 3~4가지 질병 유형이 있고, 어느 한 유형도 놓쳐서는 안 되는 경우. 샘플 수는 다를 수 있지만, 매크로 F1 기준으로 보는 것이 유리
-
클래스 간 중요도가 비례하되, 극단적 불균형이 있을 때
- Weighted-F1으로 “샘플 수 많은 클래스”에 조금 더 무게를 두되, 그래도 “소수 클래스” 성능이 어떤지 가중 평균으로 파악
- 예: 10개 클래스 중 하나만 샘플 수가 극도로 적은데, 그래도 완전히 무시할 수는 없을 때
6. 결론 & 추천
- 문제 도메인에서 각 클래스의 중요도가 동일하다면, Macro-F1을 좀 더 주의 깊게 보는 것을 권장합니다.
- 전체 샘플 기준으로 글로벌 성능을 확인하고 싶다면, Micro-F1이 적합합니다.
- 클래스 불균형을 일부 반영하면서도, “클래스별 성능”을 구해보고 싶다면, Weighted-F1이 유용합니다.
현업 실무나 연구에서도, 하나의 지표만 보지 않고, Micro-F1, Macro-F1, Weighted-F1을 함께 보면서 “모델이 어떤 클래스를 잘/못 맞추는지”를 종합적으로 파악하는 경우가 많습니다. 각각의 의의를 비교하며 여러 각도에서 모델을 평가해보시는 것이 가장 바람직합니다.
7. 실제 계산 해보기
1. 예시 데이터
예시로, 실제 클래스(행)와 예측 클래스(열)가 다음과 같다고 가정해 봅시다:
실제\예측ABC(예측 라벨 별 합)A154120B310215C231217(실제 라벨 별 합)20171552
- A로 예측한 총 샘플 수: 15+4+1 = 20
- B로 예측한 총 샘플 수: 3+10+2 = 15
- C로 예측한 총 샘플 수: 2+3+12 = 17
- 전체 샘플 수: 20+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=예측 A 수TP(A)=2015=0.75
RecallA=실제 A 수TP(A)=2015=0.75
F1A=2×0.75+0.750.75×0.75=2×1.50.5625=0.75
2.2 클래스 B에 대한 지표
- TP(B) = 10
- 실제 B 수 = 17
- 예측 B 수 = 15
PrecisionB=1510≈0.6667
RecallB=1710≈0.5882
F1B=2×0.6667+0.58820.6667×0.5882≈2×1.25490.3921≈0.624(대략)
2.3 클래스 C에 대한 지표
- TP(C) = 12
- 실제 C 수 = 15
- 예측 C 수 = 17
PrecisionC=1712≈0.7059
RecallC=1512=0.8
F1C=2×0.7059+0.80.7059×0.8≈1.50591.1294≈0.75
3. Micro-F1 계산
마이크로 평균(Micro-F1)에서의 정밀도와 재현율은, “전체 TP / 전체 예측 양성” 및 “전체 TP / 전체 실제 양성” 관점에서 동일해집니다.
- 전체에서 맞춘 샘플(TP 총합) = 15 + 10 + 12 = 37
- 전체 샘플 수 = 52
Micro-Precision=전체 예측 PositiveTP 전체 합=5237≈0.7115
Micro-Recall=전체 실제 PositiveTP 전체 합=5237=0.7115
Micro-F1=2×Micro-Precision+Micro-RecallMicro-Precision×Micro-Recall=0.7115(Micro-Precision=Micro-Recall이므로)
4. Macro-F1 계산
매크로 평균(Macro-F1)은 클래스별 F1의 단순 평균입니다.
Macro-F1=3F1A+F1B+F1C=30.75+0.624+0.75=32.124≈0.708
(반올림에 따라 약 0.71 정도)
5. Weighted-F1 계산
가중 평균(Weighted-F1)은 각 클래스별 F1에 해당 클래스의 샘플 비중(실제 라벨 수 / 전체 샘플 수)을 곱해서 더해준 값입니다.
- 클래스 A 샘플 비중 = 20/52≈0.3846
- 클래스 B 샘플 비중 = 17/52≈0.3269
- 클래스 C 샘플 비중 = 15/52≈0.2885
Weighted-F1=wA⋅F1A+wB⋅F1B+wC⋅F1C
=0.3846×0.75+0.3269×0.624+0.2885×0.75
=0.28845+0.2043+0.216375≈0.709
6. 결과 요약
- Micro-F1 ≈0.7115
- Macro-F1 ≈0.708
- Weighted-F1 ≈0.709
각 지표는 다른 관점을 반영합니다.
- Micro-F1: 전체 샘플 기준으로 “전반적(Global) 성능” 파악
- Macro-F1: 클래스별 성능을 “동등 가중”으로 평균 (소수 클래스 성능 반영이 큼)
- Weighted-F1: 클래스 “샘플 비중”만큼 가중 (불균형 데이터에서 자주 사용)
실무·연구에서는 보통 모든 지표를 함께 참고하여 모델을 해석하는 경우가 많습니다.