F1 Score: 정밀도와 재현율을 조화평균 하나로 묶는 지표

정밀도와 재현율의 조화평균인 F1 Score의 수식과 특성, F-beta 변형, 다중 클래스 계산 방식(Macro·Weighted·Micro), 한계를 정리한다.

2026-08-13 · 최초 발행 2025-05-23

F1 Score는 분류 문제에서 모델의 성능을 평가하는 지표로, 정밀도(Precision)와 재현율(Recall)이라는 두 가지 상충되는 지표의 조화평균으로 둘 사이의 균형을 하나의 척도로 보여준다. 특히 불균형 데이터셋에서 모델의 성능을 더 정확하게 반영하는 특성이 있다.

정밀도와 재현율이 부딪히는 지점

정밀도(Precision)는 모델이 양성으로 예측한 것 중에서 실제 양성인 비율이다. 공식은 TP / (TP + FP)이며, 높을수록 양성으로 예측했을 때 실제로 양성일 확률이 높다는 뜻이다. 정밀도가 높으면 False Positive(오탐)가 적다.

재현율(Recall)은 실제 양성 중에서 모델이 양성으로 예측한 비율이다. 공식은 TP / (TP + FN)이며, 높을수록 실제 양성인 케이스를 모델이 잘 찾아낸다는 뜻이다. 재현율이 높으면 False Negative(미탐)가 적다.

여기서 TP(True Positive)는 실제 양성을 양성으로 예측한 경우, FP(False Positive)는 실제 음성을 양성으로 예측한 경우, FN(False Negative)는 실제 양성을 음성으로 예측한 경우, TN(True Negative)은 실제 음성을 음성으로 예측한 경우를 가리킨다.

조화평균으로 둘을 하나로 묶는다

F1 Score는 정밀도와 재현율의 조화평균으로 정의된다.

F1 = 2 / ((1/Precision) + (1/Recall)) = 2 * (Precision * Recall) / (Precision + Recall)

조화평균을 쓰는 이유는 두 값 중 하나라도 작으면 결과값이 크게 영향을 받기 때문이다. 정밀도와 재현율 중 어느 하나라도 낮으면 F1 Score도 함께 낮아진다.

True PositiveFalse PositiveFalse NegativePrecision = TP/(TP+FP)Recall = TP/(TP+FN)F1 Score = 2*(P*R)/(P+R)

F1 Score는 0에서 1 사이 값을 가지며 1에 가까울수록 좋은 성능을 뜻한다. 정밀도와 재현율이 균형을 이룰 때 높은 값을 가지며, 어느 한쪽으로 극단적으로 치우친 모델은 낮은 F1 Score를 받는다. 클래스 불균형이 심한 데이터셋에서 특히 유용하다.

암 진단과 스팸 필터, 같은 F1이 다르게 쓰인다

암 진단 시스템에서는 정밀도와 재현율이 모두 중요하다. 높은 정밀도는 암이 아닌 환자를 암으로 진단하는 오류를 줄이고, 높은 재현율은 실제 암 환자를 놓치지 않게 한다. 이 둘의 균형을 판단하는 데 F1 Score를 쓴다.

구체적인 숫자로 보면, 정밀도 0.9(90명의 암 진단 중 81명이 실제 암), 재현율 0.7(100명의 실제 암 환자 중 70명을 발견)일 때 F1 Score는 2 * (0.9 * 0.7) / (0.9 + 0.7) = 1.26 / 1.6 = 0.7875다. 만약 정밀도를 0.95로 높이고 재현율이 0.5로 떨어진다면 F1 Score는 2 * (0.95 * 0.5) / (0.95 + 0.5) = 0.95 / 1.45 = 0.6552로 낮아진다. 이처럼 한쪽이 크게 낮아지면 F1 Score도 함께 감소한다.

스팸 메일 필터에서는 정밀도가 정상 메일을 스팸으로 분류하는 오류를 줄이고, 재현율은 실제 스팸을 잘 잡아낸다. 정밀도와 재현율의 중요도는 시스템 목적에 따라 다를 수 있지만, F1 Score는 균형 잡힌 평가를 제공한다.

가중치를 걸어 한쪽에 힘을 싣는 F-beta

정밀도와 재현율의 중요도가 다른 상황에서는 F-beta 점수를 쓴다.

F_β = (1 + β²) * (precision * recall) / (β² * precision + recall)

β > 1이면 재현율에 더 중점을 두고, β < 1이면 정밀도에 더 중점을 두며, β = 1이면 표준 F1 Score(동일 가중치)가 된다.

재현율이 정밀도보다 두 배 중요한 경우에는 F2 Score를 쓴다.

F2 = 5 * (precision * recall) / (4 * precision + recall)

정밀도가 재현율보다 두 배 중요한 경우에는 F0.5 Score를 쓴다.

F0.5 = 1.25 * (precision * recall) / (0.25 * precision + recall)

다중 클래스에서 F1을 계산하는 방식

다중 클래스 분류 문제에서는 F1 Score를 계산하는 방법이 여럿 있다.

Macro F1은 각 클래스별 F1 Score의 평균이다.

Macro F1 = (F1_class1 + F1_class2 + ... + F1_classN) / N

모든 클래스를 동등하게 취급한다.

Weighted F1은 각 클래스의 샘플 수에 따라 가중치를 부여한 F1 Score다.

Weighted F1 = (w1 * F1_class1 + w2 * F1_class2 + ... + wN * F1_classN) / (w1 + w2 + ... + wN)

여기서 w는 각 클래스의 샘플 수다.

Micro F1은 전체 TP, FP, FN을 계산한 후 F1 Score를 계산한다.

Micro Precision = sum(TP) / (sum(TP) + sum(FP))
Micro Recall = sum(TP) / (sum(TP) + sum(FN))
Micro F1 = 2 * (Micro Precision * Micro Recall) / (Micro Precision + Micro Recall)

F1이 놓치는 것들

F1 Score는 TN(True Negative)를 고려하지 않는다. 데이터셋에서 음성 클래스가 중요한 경우 이는 문제가 될 수 있다. 기본적으로 F1 Score는 단일 임계값에 대한 성능만 측정하므로, 다양한 임계값에서의 성능을 평가하려면 AUC-ROC 같은 다른 지표가 더 적합할 수 있다. 실제 상황에서는 False Positive와 False Negative의 비용이 다를 수 있는데, F1 Score는 이를 명시적으로 고려하지 않는다.

F1을 끌어올리는 전략

실제 응용에서는 모델의 임계값을 조정해 F1 Score를 최적화할 수 있다. 다양한 확률 임계값에서 F1 Score를 계산하고 최적의 임계값을 선택하는 임계값 스윕(Threshold Sweep), 여러 폴드에서 F1 Score를 계산해 모델의 안정성을 평가하는 교차 검증(Cross-Validation), 모델 파라미터를 조정해 F1 Score를 최대화하는 하이퍼파라미터 튜닝이 쓰인다.

F1점수정밀도재현율분류평가머신러닝