그로스 마케팅
[ 멋쟁이사자처럼부트캠프 그로스마케팅 부트캠프 ] 분류 모델 평가
rootedgrowth
2025. 3. 12. 01:56
1. 개요
- 머신러닝 프로세스는 데이터 가공 → 모델 학습 → 모델 평가로 이루어짐
- 성능 평가 지표는 회귀 or 분류에 따라 달라지는데 회귀 평가 지표는 이전 글에서 이미 설명
- 이 글에서는 분류 모델의 평가 지표를 설명
- 정확도(Accuracy)
- 오차행렬(Confusion Matrix)
- 정밀도(Precision)
- 재현율(Recall)
- F1 스코어
- ROC AUC
2. 정확도(Accuracy)
- 예측 데이터와 실제 데이터가 얼마나 같은지 판단하는 지표
$$\textbf{정확도}(Accuracy) = \frac{\textbf{예측 결과가 동일한 데이터 건수}}{ \textbf{ 전체 예측 데이터 건수}}$$
- 정확도는 직관적인 모델 성능 지표이나 이진분류의 경우 정확도 하나로 판단한다면 성능이 왜곡될 수 있음
- 예) 소비자 행동 분석을 통해 재구매 여부를 예측(재구매O: 1, 재구매X: 0)
- 재구매 고객(1)의 비율이 전체의 5%라면 적절한 예측 없이 모두 0으로 예측해도 정확도 95% 달성 가능
- 따라서 레이블 값이 이진 값이고 값 분포가 불균형할 경우 정확도는 적합한 평가지표가 아님
2. 혼동행렬(Confusion Matrix)
- 분류 모델이 얼마나 헷갈리고 있는지 보여주는 지표임
- 이진분류의 예측 오류가 얼마인지, 어떤 유형의 예측 오류가 발생하고 있는지 함께 나타냄
- Confusion Matrix 구성
- TN: 실제 클래스 Negative를 예측도 Negative로 한 경우
- FP: 실제 클래스 Negative를 예측은 Positive로 한 경우
- FN: 실제 클래스 Positive를 예측은 Negative로 한 경우
- TP: 실제 클래스 Positive를 예측도 Positive로 한 경우
- 예시: 농작물 병해충 감지모델(질병있음: 1, 건강함: 0)
!pip install koreanize-matplotlib
import numpy as np
import matplotlib.pyplot as plt
import koreanize_matplotlib
import seaborn as sns
from sklearn.metrics import confusion_matrix, classification_report
# 1️⃣ 실제 값 (y_true)과 모델 예측 값 (y_pred) 설정
# 1: 질병 있음 (Positive), 0: 건강함 (Negative)
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0] # 실제 값
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0] # 모델 예측 값
# 2️⃣ Confusion Matrix 계산
cm = confusion_matrix(y_true, y_pred)
# 3️⃣ Confusion Matrix 시각화
plt.figure(figsize=(5, 4))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=["건강함 (Negative)", "질병 있음 (Positive)"],
yticklabels=["건강함 (Negative)", "질병 있음 (Positive)"])
plt.xlabel("예측값")
plt.ylabel("실제값")
plt.title("Confusion Matrix - 작물 질병 감지 모델")
plt.show()
- 결과 설명
- TN(건강함, 예측 성공): 4건
- FP(건강함, 예측 실패): 0건
- FN(질병있음, 예측 실패): 1건
- FP(질병있음, 예측 성공): 5건
- 농작물 예측 모델의 경우 질병에 걸린 작물을 건강한 작물로 오판할 시 피해가 상대적으로 큼
- 따라서 FN 항목의 수를 줄이는 방향으로 모델 학습 필요
- TP, TN, FP, FN 값을 조합해 정확도(Accuracy), 정밀도(Precision), 재현율(Recall)과 같은 Classifier의 여러 성능 지표 값을 알 수 있음
- 정확도를 오차행렬에서 재정의한다면 아래와 같음
$$\textbf{정확도}(Accuracy) = \frac{\textbf{예측 결과가 동일한 데이터 건수}}{ \textbf{ 전체 예측 데이터 건수}}= \frac{\textbf{TN + TP}}{ \textbf{TN + TP + FN + FP}} $$
- 정확도는 매우 직관적인 평가지표이나 레이블이 비대칭한 데이터세트에서는 선호되지 않고 정밀도(Precision)와 재현율(Recall)이 더 선호됨
3. 정밀도와 재현율
- 정밀도는 예측을 Positive로 한 대상 중 예측에 성공한(실제값도 Positive인) 비율
- Positive 예측 성능을 더욱 정밀하게 측정하기 위한 평가지표로 양성 예측도라고 불림
$$\textbf{정밀도}(Precision) = \frac{\textbf{TP}}{\textbf{FP + TP}} $$
- 재현율은 실제값이 Positive인 대상 중 예측에 성공한(예측값도 Positive) 비율
- 민감도(Sensitivity) 또는 TPR(True Positive Rate)라고도 불림
$$\textbf{재현율}(Recall) = \frac{\textbf{TP}}{\textbf{FN + TP}} $$
- 모델의 목적에 따라 특정 지표가 더 중요하게 취급될 수 있음
- 예를 들어 예시된 병해충 감지모델의 경우 건강한 작물을 병해충 작물로 오인하는 경우(FP)보다 병해충 작물을 건강한 작물로 오인하는 경우(FN)가 더 치명적인 피해를 불러 일으킬 수 있음
- 따라서 위 예시 모델에서는 정밀도보다 재현율이 더 중요하게 취급됨
- 분류 알고리즘은 예측 데이터가 특정 레이블(결정 클래스 값)에 속하는 지 결정하기 위해 먼저 레이블 별 결정 확률을 구함
- 레코드 1에 대하여 레이블 0에 속할 확률과 레이블 1에 속할 확률을 구하고 확률이 큰 레이블로 결정함
- 즉 레이블 0일 확률 25%, 1일 확률 75%면 1로 결정
- 일반적으로 이진분류에서는 임곗값(Threshold)을 0.5로 정하고 이 기준 값보다 크면 1, 아니면 0으로 결정
- Positive 예측확률이 증가하면 Positive를 Negative로 예측하는 경우가 많이 줄어들기 때문에 상대적으로 재현율이 높아짐
- 다만 재현율과 정밀도는 상호보완적인 측면이 있어 재현율이 높아지면 정밀도는 상대적으로 하락함
- 정밀도는 Positive 예측 중 실제 Positive의 비율인데, Positive 예측량이 많아지면 틀릴 확률도 증가하기 때문
- 정밀도와 재현율은 음의 상관관계를 나타내는 것을 볼 수 있음
- 정밀도를 높이려면 임계값을 1에 가깝게 올려 단 한 레코드에 대해 Positive라 예측하면 100% 정밀도 달성
- 재현율을 높이려면 임계값을 0에 가깝게 내려 모든 레코드에 대해 Positive라 예측하면 100% 재현율 달성
- 그러나 이러한 방식은 예측 성능 향상에 의미를 가질 수 없음
- 따라서 정밀도와 재현율 중 하나에 중요도를 부여할 수는 있으나 두 개의 지표 모두 함께 고려해야 함
- 정밀도와 재현율이 조합되어 종합적인 성능 평가를 할 수 있는 지표가 필요
4. F1 스코어
- F1 스코어는 정밀도와 재현율을 결합한 지표임
- 어느 한 쪽으로 치우치지 않을 수록 높은 값을 가짐
$${F1} = \frac{{2}}{ \frac{1}{ recall} + \frac{1}{precision} } = 2*\frac{precision*recall}{precision+recall}$$
- 임곗값 0.63부근에서 최댓값을 가짐을 알 수 있음
5. ROC 곡선과 AUC
- ROC 곡선과 이에 기반한 AUC 스코어는 이진분류 성능 평가에서 중요하게 사용되는 지표임
- ROC 곡선은 FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate)이 어떻게 변하는 지 나타내는 곡선임
- FPR = FP / (FP + TN) 즉 실젯값 Negative 중 Positive로 예측된 값의 비율
- TPR = TP / (FN + TP) 즉 실젯값 Positive 중 Positive로 예측된 값의 비율 aka 재현율(Recall)
- 일반적인 ROC 곡선은 아래와 같음
- 임계값이 1에서 0으로 이동하여 FPR이 증가하면 TPR도 동일하게 증가하는 양상
- 임계값보다 큰 값을 Positive라 예측하기 때문에 임계값이 0에 가까울수록 Negative를 Positive로 예측할 확률(FPR)과 Positive를 Positive로 예측할 확률(TPR)이 증가하기 때문
- 곡선이 1에 붙어있을 수록 레코드에 대한 예측을 잘하고 또한 각 레이블마다 확실히 구분된다는 의미
- AUC(Area Under Curve) Score는 ROC 곡선 아래 면적 값으로 일반적으로 1에 가까울수록 좋음