
앞선 2편에서는 오차행렬(Confusion Matrix)을 기반으로 정밀도(Precision)와 재현율(Recall), 그리고 두 지표 간의 트레이드오프 관계를 살펴보았습니다.
이번 3편에서는 정밀도와 재현율의 한계를 보완하는 F1 Score, 그리고 이진 분류 모델의 전반적인 예측 성능을 평가하는 ROC Curve와 ROC-AUC를 중심으로 이진 분류 평가지표를 정리합니다.
1. F1 Score 이해
(정밀도와 재현율의 맹점을 보완하는 지표)
F1 Score는 정밀도와 재현율을 결합한 평가지표입니다.
정밀도 또는 재현율 중 어느 한쪽으로 극단적으로 치우치지 않을 때 상대적으로 높은 값을 가집니다.
만약 다음과 같은 두 개의 예측 모델이 있다고 가정합니다.
- A 예측 모델
- 정밀도: 0.9
- 재현율: 0.1
- B 예측 모델
- 정밀도: 0.5
- 재현율: 0.5
이 경우 F1 Score는 다음과 같습니다.
- A 모델의 F1 Score = 0.18
- B 모델의 F1 Score = 0.5
즉, 정밀도와 재현율 간의 균형이 더 좋은 B 모델이 A 모델보다 훨씬 우수한 F1 Score를 가지게 됩니다.
이처럼 F1 Score는 정밀도와 재현율을 동시에 고려해야 하는 상황에서 매우 유용한 지표입니다.
사이킷런(scikit-learn)에서는 f1_score() 함수를 통해 F1 Score를 간단히 계산할 수 있습니다.
from sklearn.metrics import f1_score
f1 = f1_score(y_test, pred)
print(f"f1 score : {f1}")
2. ROC Curve와 ROC-AUC 이해
ROC Curve와 AUC는 이진 분류 모델의 예측 성능을 평가하는 데 있어 매우 중요한 지표입니다.
의학 분야에서 널리 사용되어 왔으며, 현재는 머신러닝 이진 분류 모델 평가에서도 핵심 지표로 활용됩니다.
2-1. ROC Curve란
ROC Curve는 FPR(False Positive Rate) 이 변할 때
TPR(True Positive Rate, Recall) 이 어떻게 변화하는지를 나타내는 곡선입니다.
- X축: FPR
- Y축: TPR
FPR의 변화에 따른 TPR의 변화를 곡선 형태로 표현하며,
곡선이 좌측 상단에 가까울수록 모델의 분류 성능이 우수함을 의미합니다.
2-2. AUC란
AUC(Area Under Curve)는 ROC 곡선 아래의 면적을 의미합니다.
일반적으로 AUC 값은 1에 가까울수록 좋은 분류 성능을 나타냅니다.
3. ROC Curve 계산과 임계값 변화 확인
from sklearn.metrics import roc_curve
import numpy as np
# 클래스 1에 대한 예측 확률만 추출
pred_proba_class1 = lr_clf.predict_proba(X_test)[:, 1]
# ROC Curve 계산
fprs, tprs, thresholds = roc_curve(y_test, pred_proba_class1)
# 임계값 샘플링
thr_index = np.arange(1, thresholds.shape[0], 5)
print(f"임계값 배열 인덱스 : {thr_index}")
print(f"샘플링된 임계값 : {np.round(thresholds[thr_index], 2)}")
print(f"임계값별 FPR : {np.round(fprs[thr_index], 3)}")
print(f"임계값별 TPR : {np.round(tprs[thr_index], 3)}")
4. ROC Curve 시각화
def roc_curve_plot(y_test, pred_proba_c1):
fprs, tprs, thresholds = roc_curve(y_test, pred_proba_c1)
plt.plot(fprs, tprs, label="ROC Curve")
plt.plot([0, 1], [0, 1], 'k--', label="Random Classifier")
plt.xlabel('FPR (1-Specificity)')
plt.ylabel('TPR (Recall)')
plt.legend()
plt.grid()
plt.show()
roc_curve_plot(y_test, lr_clf.predict_proba(X_test)[:, 1])

5. ROC-AUC 계산
from sklearn.metrics import roc_auc_score
pred_proba = lr_clf.predict_proba(X_test)[:, 1]
roc_score = roc_auc_score(y_test, pred_proba)
print(f'ROC AUC 값 : {roc_score}')
F1 Score는 정밀도와 재현율 간의 균형을 평가하는 지표이며,
ROC-AUC는 임계값 변화에 관계없이 이진 분류 모델의 전반적인 성능을 판단하는 데 유용한 지표입니다.
이진 분류 문제에서는 단일 지표에 의존하기보다,
정밀도·재현율·F1 Score·ROC-AUC를 함께 해석하는 것이 필수적입니다.

'Programming' 카테고리의 다른 글
| 결정트리(Decision Tree) 완전 정리: 개념부터 앙상블, 하이퍼파라미터, 시각화까지 (0) | 2025.12.16 |
|---|---|
| [분류 성능 평가지표 4편] 피마 인디언 당뇨병 예측 실습으로 이해하는 분류 평가의 모든 것 (2) | 2025.12.13 |
| [분류 성능 평가지표 2편] 오차행렬·정밀도·재현율 그리고 트레이드오프 (0) | 2025.12.13 |
| [분류 성능 평가지표 1편] 정확도(Accuracy)는 왜 조심해서 봐야 할까? (0) | 2025.12.13 |
| ChromeDriver 버전 불일치로 발생하는 SessionNotCreatedException 해결 방법(undetected-chromedriver 기준) (0) | 2025.12.10 |