파이썬 머신러닝 완벽 가이드_ch3 평가_F1 스코어

생계발자·2024년 4월 1일
post-thumbnail

파이썬 머신러닝 완벽 가이드

F1 스코어

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

F1 스코어의 공식

사이킷런은 F1 스코어를 구하기 위해 f1_score() API를 제공

이를 이용해 앞 게시글에서의 예제였던 타이타닉 생존자 모델의 F1 스코어를 구해보자

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


[output]
F1 스코어:0.7966

타이타닉 생존자 예측에서 임곗값을 변화시키면서 F1 스코어를 포함한 평가 지표를 구해보자

이를 위해 앞에서 작성한 get_clf_eval 함수에 F1스코어를 구하는 로직을 추가한다.

그리고 앞에서 작성한 get_eval_threshold() 함수를 이용해 임곗값 0.4~0.6별로 정확도, 정밀도, 재현율, F1스코어를 알아보자

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 = Ir_clf.predict_proba(X_test)
get_eval_by_threshold(y_test, pred_proba[:,1].reshape(-1,1), thresholds)



[output]
임곗값: 0.4
오차 행렬
[[97 21]
 [11 50]]
정확도:0.8212, 정밀도:0.7042, 재현율:0.8197,F1:0.7576
임곗값: 0.45
오차 행렬
[[105  13]
 [ 13  48]]
정확도:0.8547, 정밀도:0.7869, 재현율:0.7869,F1:0.7869
임곗값: 0.5
오차 행렬
[[108  10]
 [ 14  47]]
정확도:0.8659, 정밀도:0.8246, 재현율:0.7705,F1:0.7966
임곗값: 0.55
오차 행렬
[[111   7]
 [ 16  45]]
정확도:0.8715, 정밀도:0.8654, 재현율:0.7377,F1:0.7965
임곗값: 0.6
오차 행렬
[[113   5]
 [ 17  44]]
정확도:0.8771, 정밀도:0.8980, 재현율:0.7213,F1:0.8000

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

profile
생(계를 위한) 개발자

0개의 댓글