pythonML

[pythonML] ROC곡선과 AUC , F1스코어 - 평가

독립성이 강한 ISFP 2022. 7. 11. 02:22
728x90
반응형

# 평가 지표

-회귀 

  • 평균 오차

-분류 

  • 정확도
  • 오차행렬
  • 정밀도
  • 재현율
  • F1스코어
  • ROC AUC

 

 

4.  F1 스코어

정밀도와 재현율을 결합한 지표. F1 스코어는 정밀도와 재현율이 어느 한쪽으로 치우치지 않는 수치를 나타낼 때 상대적으로 높은 값을 가짐.

 

ex) A : 정밀도0.9 재현율0.1

     B: 정밀도 0.5 재현율 0.5 

이 경우 F1 스코어는 A:0.18 / B: 0.5 로 B가 더 높다.

 

from sklearn.metrics import f1_score 
f1 = f1_score(y_test , pred)
print('F1 스코어: {0:.4f}'.format(f1))
F1 스코어: 0.7805

 

def get_clf_eval(y_test , pred):
    confusion = confusion_matrix( y_test, pred)
    accuracy = accuracy_score(y_test , pred)
    precision = precision_score(y_test , pred)
    recall = recall_score(y_test , pred)
    # F1 스코어 추가
    f1 = f1_score(y_test,pred)
    print('오차 행렬')
    print(confusion)
    # f1 score print 추가
    print('정확도: {0:.4f}, 정밀도: {1:.4f}, 재현율: {2:.4f}, F1:{3:.4f}'.format(accuracy, precision, recall, f1))

thresholds = [0.4 , 0.45 , 0.50 , 0.55 , 0.60]
pred_proba = lr_clf.predict_proba(X_test)
get_eval_by_threshold(y_test, pred_proba[:,1].reshape(-1,1), thresholds)
임곗값: 0.4
오차 행렬
[[99 19]
 [10 51]]
정확도: 0.8380, 정밀도: 0.7286, 재현율: 0.8361, F1:0.7786
임곗값: 0.45
오차 행렬
[[103  15]
 [ 12  49]]
정확도: 0.8492, 정밀도: 0.7656, 재현율: 0.8033, F1:0.7840
임곗값: 0.5
오차 행렬
[[104  14]
 [ 13  48]]
정확도: 0.8492, 정밀도: 0.7742, 재현율: 0.7869, F1:0.7805
임곗값: 0.55
오차 행렬
[[109   9]
 [ 15  46]]
정확도: 0.8659, 정밀도: 0.8364, 재현율: 0.7541, F1:0.7931
임곗값: 0.6
오차 행렬
[[112   6]
 [ 16  45]]
정확도: 0.8771, 정밀도: 0.8824, 재현율: 0.7377, F1:0.8036

=> 임계값이 0.6 일때 F1스코어가 가장 좋은 값을 보여준다.

 

 

5. AUC와 ROC곡선

이진 분류의 예측 성능 측정에서 중요하게 사용되는 지표

  • ROC : 모든 임계값에서 분류 모델의 성능을 보여주는 그래프
  • AUC: ROC 곡선 아래 영역

ROC 곡선은 FPR(1 - 특이성 = X축)이 변할 때 TPR(재현율,민감도 = Y축)이 어떻게 변하는지를 나타내는 곡선이다.

ROC 곡선이 직선에 가까울 때 성능이 떨어지는 것, 멀어질수록 성능이 뛰어난 것.

 

728x90
반응형