ML(모델 평가의 개념)

이동일·2023년 9월 20일
0

Machine Learning

목록 보기
3/12

이진 분류 모델: 모델의 예측 결과와 실제 레이블 간 비교를 통해 계산
1. 정확도(Accuracy)

  • 전체 예측 중 올바르게 예측한 비율
  1. 정밀도(Precision)
  • 정밀도는 양성(Positive)클래스로 예측한 샘플 중 실제 양성 클래스인 샘플의 비율을 나타낸다. (양성을 예측한 결과중 정확한 예측비율)
  1. 재현율(Recall or Sensitivity)
    (Tpr True Positive Ratio)
  • 실제 양성 클래스 샘플 중에서 모델이 양성 클래스로 올바르게 예측한 샘플의 비율을 나타낸다.()
  1. Recall과 Pricision을 잘 구분하기****
    Pricision은 1이 나온데이터중에서(잘못측정된1(즉 원래0인값) ) 포함해서
    1이 나오비율이다.
    Recall은 1인 데이터중에서의 1의 비율
  2. Fall-out (Fpr False Position Ratio)
  • 실제 양성이 아닌데, 양성이라고 잘못 예측한 경우(실제값은0인데 1이라고 예측한경우)

TP,TN,FP,FN
1. True Positives(TP)

  • 모델이 올바르게 양성 클래스로 예측하고 실제로 양성 클래스인 샘플의 수를 나타낸다.
    (1,0 중에서 1인것)
  1. False Positives(FP)
  • 양성 클래스로 잘못 예측했지만 실제로는 음성 클래스인 샘플의수
    (1을 예측했지만 실제로는 0인값)
    3.True Negatives(TN):
  • 올바르게 음성 클래스로 예측 (1,0중에서 0인것)
  1. False Negatives(FN)
  • False Negatives는 모델이 음성 클래스로 예측했지만 실제로 양성 클래스인 샘플의 수를 나타낸다. (0을 예측했지만 실제론 1인값)

Threshold: Trheshold에 따라서 이진 분류 모델의 측정값이 달라진다.

  • Threshold란? 모델 예측 결과를 이진 분류에서 어떻게 결정하는지 조절하는 임계값이다.


ROC

ROC(Receiver Operating Characteristic): 곡선은 이진 분류 모델 성능을 시각화하고 평가하기위한 그래프 ROC 곡선은 임계값(threshold)을 변경하면서 모델의 민감도(재현율)와 특이도 (1- 거짓 영성 비율) 사이의 관계를 나타낸다.

  • 분류가 완벽하면 아래와같이 직각으로 나온다.

  • 적당한 경우

  • 분류 성능이 나쁜경우

AUC(Area Under the Curve)

AUC: ROC 곡선 아래의 면적을 나타내는 지표로 이진 분류 모델 성능 요약하는데 사용
1. 범위

  • AUC 값은 항상 0에서 1사이 값을 가진다. 이떄 0.5는 무작위로 예측하는 모델의AUC값(AUC 값이 0.5보다 크면 모델이 무작위 예측보다 성능이 좋고, 1에 가까울수록 모델 성능이 좋다.)
  1. 성능 평가:
  • AUC는 분류 모델의 예측 능력을 평가하는데 사용된다. 높은 AUC 값은 모델이 양성 클래스와 음성 클래스를 잘 구별하고 있다는 것을 나타낸다.
  1. 클래스 불균형 대응:
  • AUC는 클래스 불균형 문제에서도 유용하게 사용됩니다. 클래스 불균형이 있는 경우, 정확도 등의 평가 지표만 사용하기보다 AUC를 고려하여 모델을 평가하는 것이 더 적절할 수 있습니다.

ROC 커브 그리기

1.   X_test가 1인 확률들만 취득
wine_tree.predict_proba(X_test)[:,1] 

#출력 array([0.38397406, 0.38397406, 0.87802198, ..., 0.87802198, 0.38397406,
 #      0.87802198])
 
 
 2. 곡선 생성
#곡선 생성
import matplotlib.pyplot as plt
pred_prob = wine_tree.predict_proba(X_test)[:,1] #predict_proba 메소드는 입력데이터에 대한 각 클래스에 대한 확률 포함하는 배열 반환
fpr, tpr, thresholds = roc_curve(y_test, pred_prob)



3. fpr(Fall-out  0인값)
#array([0.        , 0.14884696, 0.25366876, 0.31027254, 1.        ])



4. tpr(recall   1인값)
#array([0.        , 0.45078979, 0.65492102, 0.73147023, 1.        ])


5.thresholds
#array([1.87802198, 0.87802198, 0.72692794, 0.67447307, 0.38397406])


6. ROC 곡선
plt.figure(figsize=(10,8))
plt.plot([0,1],[0,1], 'g', ls= 'dashed')   #(0,0) 부터 (1,1)까지 선을 그어준다.
plt.plot(fpr, tpr,'b')
plt.grid()
plt.show()

0개의 댓글

관련 채용 정보