이진 분류 모델: 모델의 예측 결과와 실제 레이블 간 비교를 통해 계산
1. 정확도(Accuracy)
- 전체 예측 중 올바르게 예측한 비율
- 정밀도(Precision)
- 정밀도는 양성(Positive)클래스로 예측한 샘플 중 실제 양성 클래스인 샘플의 비율을 나타낸다. (양성을 예측한 결과중 정확한 예측비율)
- 재현율(Recall or Sensitivity)
(Tpr True Positive Ratio)
- 실제 양성 클래스 샘플 중에서 모델이 양성 클래스로 올바르게 예측한 샘플의 비율을 나타낸다.()
- Recall과 Pricision을 잘 구분하기****
Pricision은 1이 나온데이터중에서(잘못측정된1(즉 원래0인값) ) 포함해서
1이 나오비율이다.
Recall은 1인 데이터중에서의 1의 비율
- Fall-out (Fpr False Position Ratio)
- 실제 양성이 아닌데, 양성이라고 잘못 예측한 경우(실제값은0인데 1이라고 예측한경우)
TP,TN,FP,FN
1. True Positives(TP)
- 모델이 올바르게 양성 클래스로 예측하고 실제로 양성 클래스인 샘플의 수를 나타낸다.
(1,0 중에서 1인것)
- False Positives(FP)
- 양성 클래스로 잘못 예측했지만 실제로는 음성 클래스인 샘플의수
(1을 예측했지만 실제로는 0인값)
3.True Negatives(TN):- 올바르게 음성 클래스로 예측 (1,0중에서 0인것)
- False Negatives(FN)
- False Negatives는 모델이 음성 클래스로 예측했지만 실제로 양성 클래스인 샘플의 수를 나타낸다. (0을 예측했지만 실제론 1인값)
Threshold: Trheshold에 따라서 이진 분류 모델의 측정값이 달라진다.
- Threshold란? 모델 예측 결과를 이진 분류에서 어떻게 결정하는지 조절하는 임계값이다.
ROC(Receiver Operating Characteristic): 곡선은 이진 분류 모델 성능을 시각화하고 평가하기위한 그래프 ROC 곡선은 임계값(threshold)을 변경하면서 모델의 민감도(재현율)와 특이도 (1- 거짓 영성 비율) 사이의 관계를 나타낸다.
분류가 완벽하면 아래와같이 직각으로 나온다.
적당한 경우
분류 성능이 나쁜경우
AUC: ROC 곡선 아래의 면적을 나타내는 지표로 이진 분류 모델 성능 요약하는데 사용
1. 범위
- AUC 값은 항상 0에서 1사이 값을 가진다. 이떄 0.5는 무작위로 예측하는 모델의AUC값(AUC 값이 0.5보다 크면 모델이 무작위 예측보다 성능이 좋고, 1에 가까울수록 모델 성능이 좋다.)
- 성능 평가:
- AUC는 분류 모델의 예측 능력을 평가하는데 사용된다. 높은 AUC 값은 모델이 양성 클래스와 음성 클래스를 잘 구별하고 있다는 것을 나타낸다.
- 클래스 불균형 대응:
- AUC는 클래스 불균형 문제에서도 유용하게 사용됩니다. 클래스 불균형이 있는 경우, 정확도 등의 평가 지표만 사용하기보다 AUC를 고려하여 모델을 평가하는 것이 더 적절할 수 있습니다.
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()