얼마나 많은 범주 or 클래스들이 정확하게 예측되고, 예측되지 않았는지 나열하는 간단한 방법
TP, TN, FP, FN 으로 이루어진 매트릭스
1) TP- 잘 맞춰서 Positive(True,1)를 잡아냈다.
2) TN -잘 맞춰서 Negative(False,0)을 잡아냈다.
3) FP - 잘 못해서 Positive라고 예측 (원래는 Negative)
4) FN - 잘 못해서 Negative라고 예측 (원래는 Positive)
plot_confusion_matrix를 통해 확인 가능 (가로 세로축 확인 필수)
class A와 class B를 구분하는 방법
1) 그리드를 그린다.
2) 세로축은 실제값, 가로축은 예측값을 의미
3) 어떤 class를 긍정적, 부정적으로 판단했는지는 중요하지 않다.
4) 행렬이 각 class에서 얼마나 올바르게 예측되었는지 알려줄 것이기 때문이다.
5) 따라서 Confusion matrix는 실제값 class A가 B로 예측된 횟수를 알려준다. 그 반대도 마찬가지이다.
문제유형에 따라서 적절한 성능측정이 필요하다
분류는 올바르게 분류될 확률, 예측은 올바르게 예측될 확률을 의미한다. (따라서 성능측정방법을 다르게)
분류 성능측정
1) Simple Accuracy
2) F-beta measure
3) Precision
4) ROC
5) recall
회귀 성능측정
1) Sum of Squares Error
2) Mean Absolute Error
3) RMS Error
분류의 경우 카테고리형, 회귀의 경우 수치형에 대해서 예측
Simple Accuracy : 올바르계 예측된 sample의 수 / 총 sample의 수
1) 예측의 성공에만 초점을 맞추기에 이진분류에서 문제점이 생긴다.
2) 옳은 것에 대한 예측을 기대하지만 답이 아닌 것에 초점이 맞춰진 학습에도 정확도가 높게 나타남
Preformance Measure : Precision, recall을 이용하여 Simple Accuracy의 위와 같은 문제를 개선
Precision과 recall이 1일 경우 이상적이라고 본다.
F-beta measure
1) Preformance Measure은 시스템의 성능을 확인하는데 정확하지만 다른 system을 비교하려는 경우 성가실 수 있다.
2) precision이 70% recall이 60% vs precision이 80% recall이 50%
3) 어떤 것이 실제로 더 좋은 성능을 발휘하는 지 알 수 없다.
4) 이와 같은 경우를 위해서 F-beta measure 을 사용한다.
5) F-beta measure식에서 beta를 키우면 recall의 영향을 더 많이 받는다.
6) F-beta measure를 통해서 recall 과 precision의 비율을 조정한 뒤 다른 system을 비교할 수 있다.
암진단 초기단계에서는 암환자를 놓치면 안되기에 precision보다는 recall이 중요
스팸메일의 경우에는 정말 spam인 메일만 보내야하기에 precision이 중요
상황에 따라서 이 비율을 조정해야한다.
암 검진 vs 스팸 분류
1) 암 검진에서 주로 보아야할 지표
암검진 결과가 양성 (1) -> 암에 걸린 것
암검진 결과가 음성 (0) -> 암이 아닌 것
암에 걸렸는데(Positive, 1) 암이 아니라고 (Negative, 0) 오진하면 문제
2) 스팸분류에서는 FP를 보아야한다.
스팸이면 1, 아니면 0으로 분류
나이키신발 예시
1) Precision의 예
분류된 나이키신발 중에서 실제로 나이키신발은 몇 개인가? TP/(TP+FP)
2) recall의 예
실제 나이키신발 중 나이키신발로 분류되는 신발은 몇 개인가? TP/(TP+FN)
3) 10000개의 신발 중 9990개의 신발이 나이키신발이 아니라고 simple accuracy로 분류할 경우
TP =0, FN = 10, FP = 0, TN = 9990이 된다. (답이 아닌 것에 초점이 맞춰진 학습)
Precision은 0/0으로 정의되지 않으며 테스트가 극도로 부정적이었다고 본다.
recall도 0/0+10으로 0이 나온다.
4) 10000개의 신발 중 10개의 신발이 나이키라고 분류할 경우 (답인 것에 초점이 맞춰진 학습)
위와 같이 계산할 경우 Simple Accuracy는 0.1%
Precision은 0.001, Recall은 1.0이다.
정확도 : 전체 범주를 모두 바르게 맞춘 경우
정밀도 : Positive로 예측한 경우중 올바르게 Positive를 맞춘 비율
재현율 : 실제 Positive 중에서 올바르게 Positive를 맞춘 비율
F1 score : 정밀도와 재현율의 조화평균 (둘의 비중을 동일하게 고려)
classificaion_report를 통해서 각 class별로 정밀도, 재현율이 확인 가능하다.
accuracy만으로 평가하면 안되는가
1) 데이터 불균형이 있으면 정확도를 신뢰할 수 없다.
2) 맞았는지 틀렸는지보다는 진짜 문제를 해결하기 위한 예측이 잘 되었는지 안되었는지를 볼 수 있는 지표가 필요하다
정밀도와 재현율
1) 정밀도
1로 예측한 경우 중 모델이 1을 잘 맞춘 것의 비율
스팸 분류를 다룰 때 정밀도를 살펴봄
2) 재현율
진짜 1인 것들 중 모델이 1로 맞춘 것의 비율
암 검진을 할 때 재현율을 살펴본다.
3) 정밀도와 재현율은 트레이트오프 관계
4) 임계값을 낮추면 P로 예측하는 것이 많아지고 N으로 예측하는 것은 줄어든다
Recall은 증가하고 Precision은 낮아진다.
5) f1_score(조화평균)
Recall과 Precision의 조화평균
베타가 1이다는 정밀도와 재현율의 가중치가 같음을 의미
데이터 불균형이 있을 경우 개선할 수 있다.
6) accuracy는 높아지는데 f1은 낮아질 경우?
상황에 따라 다르겠지만 acc < f1의 경향이 많음
예시
1) 무작위로 무료백신을 접종한다
2) 이중에는 자율접종한 사람도 포함될 수 있다
3) 최대한 백신을 맞지 않을 사람을 골라 백신을 맞추기 위해 임계값을 조정해보자
임계값, 예측확률 이용
1) 기본적으로 모델은 임계값을 50%를 기준으로 범주 예측 (예측결과가 나와도 다 같은 예측이 아니다. 51%인 경우는 틀릴확률이 49%, 99%의 경우 틀릴확률이 1%이다.)
2) predict_proba로 각 범주의 확률 값을 알 수 있다.
3) 임계값을 바꾸면 평가지표가 변화한다.
4) 임계값을 낮출시 백신접종을 안하는 사람들 (0인 사람들)을 더 정확하게 구함
5) 예측확률을 이용하여 임계값을 낮춘 경우 집단 면역기준에 다다른다.
6) 예측확률을 사용하지 않고 임계값 0.5이하에서 무작위로 접종한 경우 집단 면역기준에 다다르지 못한다.
7) 예측확률과 임계값을 잘 활용하여 정밀도와 재현율이 조정, 최소한의 백신접종으로 최대한의 결과를 얻을 수 있다.
ROC와 AUC를 이용하여 최적의 임계값을 찾을 수 있다.
재현율과 위양성률은 trade-off 관계에 있다.
1) 재현율을 높이기위해 positive로 판단하는 임계값을 낮추면 positive로 예측
2) 하지만 이 경우 negative이지만 positive로 판단하는 위양성률도 높아진다.
재현율을 최대화하고 위양성률은 최소화하는 임계값이 최적의 임계값
AUC는 ROC curve의 아래면적을 의미
1) 학습이 잘 될수록 면적이 1에 가깝다.
2) 잘 안될수록 0.5에 가깝다.
ROC curve로 재현율(TPR)과 위양성률(FPR)을 임계값에 따라 구해준다.
ROC curve 그래프로 학습이 되었는지에 대해 판단이 가능하다.
재현율에서 위양성률을 뺀 값이 최대가 된 지점을 threshold로 지정
roc_auc_score를 통해 AUC점수 계산가능 (높을수록 좋다)
ROC curve는 기본적으로 이진분류문제에서 이용
다중분류문제에서는 각 클래스를 이진클래스 분류문제로 변환하면 가능
1) 3-class(A, B, C) 문제
2) A vs (B,C), B vs (A,C), C vs (A,B) 로 나누어 수행
ROC Curve
1) 임계값에 따른 재현율(Recall)과 위양성률(Recall에서 F와 N을 반대로 계산)을 의미
2) 재현율은 최대화 위양성률은 최소화 하는것이 목적
3) ROC Curve가 좌상단에 밀접할 수록 좋은 모델
f-beta-score와 threshold의 차이점
1) beta : 모델 성능을 평가 (train)
2) threshold : 분류할 때 확률의 기준 (연구자가 직접 선택)
1) Making sense of the confusion matrix
https://youtu.be/8Oog7TXHvFY
2) Machine Learning tips and tricks cheatsheet
https://stanford.edu/~shervine/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks
3) Understanding AUC - ROC Curve
https://towardsdatascience.com/understanding-auc-roc-curve-68b2303cc9c5#:~:text=for%20multiclass%20model%3F-,What%20is%20AUC%20%2D%20ROC%20Curve%3F,capable%20of%20distinguishing%20between%20classes.
4) ROC curves and Area Under the Curve explained
https://www.dataschool.io/roc-curves-and-auc-explained/
5) 3.3.2.14. Receiver operating characteristic (ROC)
https://scikit-learn.org/stable/modules/model_evaluation.html#receiver-operating-characteristic-roc
6) sklearn.metrics.roc_curve
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html
7) sklearn.metrics.roc_auc_score
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html