정밀도/재현율 트레이드오프(Trade-off), F1_score, ROC_curve and AUC
지금까지 오차행렬의 값을 이용해 정확도, 재현율, 정밀도 등을 살펴보았는데, 재현율 또는 정밀도가 특별히 강조돼야하는 경우가 있다는 것을 예시를 통해 알 수 있었습니다.
이런 경우 분류의 결정 임곗값(Threshold)를 조정해 두 지표를 조정할 수 있는데, 둘은 상호보완적인 관계이기 때문에
어느 한 쪽을 강제로 높이면 다른 하나의 수치는 떨어지기 쉽습니다. 이를 정밀도/재현율 Trade-off라고 부릅니다.
1. 정밀도/재현율 트레이드오프(Trade-off)
Scikit-learn의 분류 알고리즘은 예측 데이터가 어느 레이블에 속하는지 계산하기 위해 개별 레이블별로 결정 확률을 구합니다. 일반적으로 이진 분류에서 임곗값을 50%로 정하고 이 값보다 확률이 크면 Positive, 작으면 Negative로 정합니다.
학습이 완료된 사이킷런 Classifier 객체에서 predict() 메소드를 실행하면 예측 결과 클래스값이 반환합니다. 사실 이 predict() 메소드는 predict_proba()메소드에 기반해 생성된 API입니다. predict_proba()메소드는 각 예측 데이터별 레이블별 예측확률을 반환합니다. 이진분류를 예를 들면 데이터가 각 행 별로 위치하고, 칼럼에 0, 1 레이블이 들어가 각 레이블별 예측확률을 ndarray로 반환합니다.
1) predict_proba() 메소드 실행
다음은 피마원주민 당뇨병 예제에서 LogisticRegeression객체에서 predict_proba()를 수행한 값입니다.
첫 번째 행의 경우 0컬럼의 값이 약 0.98로 첫 번째 예측 데이터를 0 즉 Negative로 예측했다고 알 수 있습니다.
임곗값을 내리면 그만큼 Positive로의 예측이 늘어납니다. Positive 예측을 많이 하다보니 실제 FN의 값이 감소하고 FP가 증가한다는 것을 알 수 있습니다. 따라서 임곗값을 내리면 재현율이 증가하고 정밀도가 감소하게 됩니다.
2) 임곗값 조정에 따른 재현율과 정밀도 변화
임곗값 조정은 Binarizer 모듈을 통해 이와 같이 조정할 수 있습니다.
임곗값을 0.5에서 0.4로 조정함에 따라 재현율이 증가하고 정밀도가 감소한 것을 알 수 있습니다.
임곗값의 변화에 따른 정밀도와 재현율을 좀 더 직관적으로 보고 싶다면 precision_recall_curve() 메소드를 사용하면 됩니다.
3) precision_recall_curve() 메소드를 사용한 임곗값 별 정밀도와 재현율 시각화
precision_recall_curve(y_test, pred_proba)를 실행하면 순서대로 정밀도, 재현율, 임곗값을 각각의 배열로
반환할 수 있고, 이를 통해 만든 함수로 시각화를 한 것입니다.
내 생각
특정 성능지표만 강조하는 상황이 돼서는 안된다고 알게되었는데, 그럼 여러 성능지표들을
어떻게 합리적으로 받아들일 수 생각해보았고 본 책에 나와있는지 궁금해졌다.
#본 글은 위키북스의 "파이썬 머신러닝 완벽 가이드"를 베이스로 저의 학습을 정리한 글로,
제가 어떻게 이해했느냐에 따라 책의 내용과 달라질 수 있습니다.
'AI_basic > ML' 카테고리의 다른 글
[ML] GridSearchCV - 교차 검증과 최적 하이퍼 파라미터 튜닝을 같이 (0) | 2021.07.21 |
---|---|
[ML] 지도학습/분류 결정트리 Decision Tree (0) | 2021.07.13 |
[ML] 분류모델의 성능 평가 지표 Part3. F1_score, ROC_curve and AUC (0) | 2021.07.07 |
[ML] 분류모델의 성능 평가 지표 Part.1 오차행렬과 정확도,정밀도,재현율 (0) | 2021.07.06 |
[ML] 사이킷런(Scikit-learn)으로 머신러닝 맛보기(붓꽃 품종 예측) (0) | 2021.07.06 |