반응형
ROC곡선과 AUC
ROC 곡선은 FPR이 변할 때 TPR이 어떻게 변하는지 나타내는 곡선이다.
ROC 곡선은 다양한 threshold에 대한 이진 분류기의 성능을 한 번에 표시한 것이다.
이진 분류의 성능은 True Positive Rate를 y축으로 False Positive Rate를 X 축으로 이용해서 표현하게 된다.
ROC 커브는 좌상단에 붙어있는 커브가 더 좋은 분류기를 의미한다고 생각할 수 있다.
즉 곡선이 100에 가까워질수록 postive에 가까워진다. 곡선이 커진다는 것은 positive라고 예측할 확률이 높아진다.
이 곡선의 면적은 AUC라고 한다. 이것은 ROC 곡선 밑의 면적을 구한것으로서 일반적으로 1에 가까울수록 좋은 것이다.
또한, ROC가 0.5에 가깝다는 건 분류가 제대로 안됐다는 것이다. 이건 분류로서 의미가 없다. 이 곡선이 직선에 가까울수록 성능이 안 좋다.
임계값이 1이면 positive를 예측을 할 수 없게 되고 0에 가까워질수록 positive라고 예측할 확률이 높아진다.
# roc_curve(실제값, 예측 확률 값): FPR, TPR, 임계값
(타이타닉을 이용한 생존자 예측 FPR, TPR, 임계값)
앞단에 타이타닉 데이터를 X_Train, y_train, X_test, y_test를 만드는 작업이 있습니다.
from sklearn.metrics import roc_curve
# 레이블 값이 1일때의 예측확률을 추출
pred_positive_label = lr_model.predict_proba(X_test)[:,1]
fprs, tprs, thresholds = roc_curve(y_test, pred_positive_label)
print("샘플추출")
print()
thr_idx = np.arange(1,thresholds.shape[0],6)
print('thr idx:',thr_idx)
print('thr thresholds value:',thresholds[thr_idx])
print('thr thresholds value:',fprs[thr_idx])
print('thr thresholds value:',tprs[thr_idx])
샘플을 위와 같이 추출한 다음 그 값을 인덱스로 사용함에 따른 FPRS, TPRS를 볼 수 있다.
이 값을 가지고 그래프를 그리면 아래와 같이 생긴다.
pred_positive_label = lr_model.predict_proba(X_test)[:,1]
fprs, tprs, thresholds = roc_curve(y_test, pred_positive_label)
precisions, recalls, thresholds = roc_curve(y_test, pred_positive_label)
plt.figure(figsize=(15,5))
# 대각선
plt.plot([0,1],[0,1],label='STR')
# ROC
plt.plot(fprs,tprs,label='ROC')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.legend()
plt.grid()
plt.show()
AUC 면적 구하기
from sklearn.metrics import roc_auc_score
from sklearn.linear_model import LogisticRegression
# 위 코드 확인 후
# 로지스틱 회귀
lr_model = LogisticRegression()
lr_model.fit(X_train,y_train)
prediction = lr_model.predict(X_test)
print('roc auc value {}'.format(roc_auc_score(y_test,prediction))) # 이 value는 auc에 대한 면적을 나타낸 것이다.
# display_eval(y_test,prediction)
반응형
'Data scientist > Machine Learning' 카테고리의 다른 글
[ML/DL] 앙상블 학습 (Ensemble Learning): bagging,voting,boosting (0) | 2020.11.03 |
---|---|
[ML/DL] DecisionTree 구현 및 hyper parameter 설정 (1) | 2020.11.03 |
[ML/DL] 정밀도와 재현율의 트레이드 오프 정의와 구현 (0) | 2020.11.02 |
[ML/DL] python 을 통한 분류(classification) 성능평가지표 사용법(Accuracy,Precision,Recall,F1 Scroe) (0) | 2020.11.02 |
[ML/DL] python 을 통한 교차검증 ( k -Fold , stratifiedkFold) (0) | 2020.10.28 |