from sklearn.metrics import mean_squared_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mse = mean_squared_error(y_true, y_pred)
print(mse) # 출력: 0.375
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(y_true, y_pred)
print(mae) # 출력: 0.5
from sklearn.metrics import r2_score
r2 = r2_score(y_true, y_pred)
print(r2) # 출력: 0.9486
분류 모델의 평가 지표 계산 시, 모델의 예측결과에 대한 '정오분류표(Confusion Matrix)'가 활용됨
| 실제 Positive | 실제 Negative | |
|---|---|---|
| 예측 Positive | True Positive (TP) | False Positive (FP) |
| 예측 Negative | False Negative (FN) | True Negative (TN) |
전체 예측 중에서 맞게 예측한 비율
예시:
from sklearn.metrics import accuracy_score
y_true = [1, 0, 1, 1, 0, 1, 0]
y_pred = [1, 0, 1, 1, 0, 0, 1]
acc = accuracy_score(y_true, y_pred)
print(acc) # 출력: 0.714
Positive로 예측한 것 중 실제로도 Positive인 비율
예시:
from sklearn.metrics import precision_score
prec = precision_score(y_true, y_pred)
print(prec) # 출력: 0.75
실제 Positive인 것 중 알맞게 Positive로 예측한 비율
예시:
from sklearn.metrics import recall_score
rec = recall_score(y_true, y_pred)
print(rec) # 출력: 0.6
정밀도와 재현율의 조화 평균을 나타내며, 불균형 데이터에서 적합함
예시:
from sklearn.metrics import f1_score
f1 = f1_score(y_true, y_pred)
print(f1) # 출력: 0.6667
ROC는 분류기의 임계값 변화에 따른 TPR(재현율)과 FPR(거짓양성률)을 시각화한 곡선을 칭함
AUC는 ROC 아래의 면적을 말하며, 1에 가까울수록 분류 성능이 우수함을 의미 (0.5의 경우 아무 분별력이 없는 랜덤 추측 모델에 해당)
ROC 곡선 그리는 법
이진 분류 문제에서 모델 예측 확률값과 실제 라벨이 다음과 같다고 가정한다면,
| Index | 실제 라벨 | 예측 확률 |
|---|---|---|
| 1 | 1 | 0.9 |
| 2 | 0 | 0.8 |
| 3 | 1 | 0.7 |
| 4 | 0 | 0.6 |
| 5 | 1 | 0.55 |
| 6 | 0 | 0.4 |
각 예측 확률을 임계값으로 하여 TPR과 FPR 계산
| Threshold | TP | FP | TN | FN | TPR | FPR |
|---|---|---|---|---|---|---|
| 1.0 | 0 | 0 | 3 | 3 | 0.00 | 0.00 |
| 0.9 | 1 | 0 | 3 | 2 | 0.33 | 0.00 |
| 0.8 | 1 | 1 | 2 | 2 | 0.33 | 0.33 |
| 0.7 | 2 | 1 | 2 | 1 | 0.67 | 0.33 |
| 0.6 | 2 | 2 | 1 | 1 | 0.67 | 0.67 |
| 0.55 | 3 | 2 | 1 | 0 | 1.00 | 0.67 |
| 0.4 | 3 | 3 | 0 | 0 | 1.00 | 1.00 |
각 임계값에서 계산된 FPR과 TPR의 점을 각각 X좌표, Y좌표에 찍어 연결
예시:
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
# 예시 데이터 생성
y_true = [1, 0, 1, 0, 1, 0] # 정답
y_scores = [0.9, 0.8, 0.7, 0.6, 0.55, 0.4] # 모델 예측결과
# ROC 요소 및 AUC 계산
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
roc_auc = auc(fpr, tpr)
# 시각화
plt.figure()
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--', alpha=0.5)
plt.plot(fpr, tpr, color='red', marker="o", lw=2, label=f'ROC curve (AUC = {roc_auc:.2f})')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()
*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.