떼닝로그

평가 지표 - F1 Score (Micro, Macro, Weighted) 본문

개발로그/기타 이론 정리

평가 지표 - F1 Score (Micro, Macro, Weighted)

떼닝 2025. 7. 8. 23:26

 

일단은 데이콘에 있는 경진대회들만 대상으로 보고 있는데,

리더보드 평가 산식의 종류는 크게 F1-Score(Macro, Weighted), ROC-AUC, Accuracy, LogLoss인 것 같다.

그 중에서도 가장 많이 사용되고 있는 건 Macro F1-Score인 것 같고...

아리까리했던 개념을 오늘 한번 정리해보는 걸로~

 

F1-Score in Machine Learning

- F1 Score은 기계학습에서 사용하는 평가 지표이다.

- 한 쪽으로 치우쳐진 데이터셋에서 분류 모델이 얼마나 좋은 성능을 가지고 있는가에 대해 평가한다.

- 여기서 나오는 개념은 Accuracy(정확도), Precision(정밀도), Recall(재현율)이다.

 

Confusion Matrix

https://www.geeksforgeeks.org/machine-learning/confusion-matrix-machine-learning/

- confusion matrix는 accuracy(정확도), precision(정밀도), recall(재현율)을 계산하기 위해 필요한 matrix

- True Positive(TP) : 정답이 Positive일 때 모델이 정답을 맞힌 경우

- True Negative(TN) : 정답이 Negative일 때, 모델이 정답을 맞힌 경우

- False Positive(FP) : 정답이 Negative일 때, 모델이 정답을 맞히지 못한 경우

- False Negative(FN) : 정답이 Positive일 때, 모델이 정답을 맞히지 못한 경우

- 정리하자면, True/False는 모델의 정답 여부를, Positive/Negative는 실제 정답이라고 생각하면 될 것 같다.

Accuracy (정확도)

- 정확도는 모델이 예측한 결과 중 실제 정답의 비율을 보여준다.

- 특정 클래스를 올바르게 예측하는 모델은 높은 정확도를 가질 수 있지만, 다른 클래스에 대한 세부 정보를 포착하지 못할 수 있다.

- 이처럼, 한 클래스가 다른 클래스보다 더 우세할 때 원하는 결과가 나오지 않을 수 있다.

- Accuracy = (TP+TN) / (TP+TN+FP+FN)

Precision (정밀도)

- 모델의 Positive인 예측의 품질에 중점을 두어, 실제로 얼마나 많은 'positive' 예측이 정확했는지 파악한다.

- 스팸 이메일 탐지 등 오탐을 최소화하는 상황에서 사용된다.

- Precision = TP / (TP+FP)

Recall (재현율)

- 정답이 Positive인 것들 중 모델이 실제 Positive를 얼마나 잘 예측하는지를 파악한다.

- 의료 검사 등에서는 높은 recall를 필수로 한다.

- Recall = TP / (TP+FN)

 

F1-Score by combining Precision and Recall

- f1-score는 정밀도와 재현율을 하나의 지표로 결합함으로써 불균형한 데이터셋에서 모델의 전반적인 성능을 파악할 수 있게 한다.

- F1-Score = 2 * (Precision*Recall) / (Precision+Recall)

 

Various types of F1-Score

- Micro F1-Score은 클래스 간 샘플 수의 불균형을 고려하여 전체 모델의 성능을 평가한다.

- Macro F1-Score은 클래스 간 중요도를 동일하게 고려함으로써 각 클래스의 F1-Score 평균을 계산한다.

- Weighted F1-Score는 각 클래스 간 샘플 수의 불균형을 고려하여 가중치를 줌으로써 각 클래스의 영향력을 조정한다.

 

from sklearn.metrics import f1_score

y_true = [0, 1, 2, 2, 2, 2, 1, 0, 2, 1, 0]
y_pred = [0, 0, 2, 2, 1, 2, 1, 0, 1, 2, 1]

f1_per_class = f1_score(y_true, y_pred, average=None)
f1_micro = f1_score(y_true, y_pred, average='micro')
f1_macro = f1_score(y_true, y_pred, average='macro')
f1_weighted = f1_score(y_true, y_pred, average='weighted')

# f1 score per class : [0.66666667 0.28571429 0.66666667]
# micro-average f1 score : 0.5454545454545454
# macro-average f1 score : 0.5396825396825397
# weighted-average f1 score : 0.5627705627705627

 

 

 

참고 : https://www.geeksforgeeks.org/machine-learning/f1-score-in-machine-learning/

https://www.geeksforgeeks.org/machine-learning/confusion-matrix-machine-learning/

 

Comments