지도 학습 모델의 성능을 재는 평가 지표는 크게 이진 분류의 평가 지표와 다중 분류의 평가 지표로 나뉩니다.
이진 분류에는 양성 클래스와 음성 클래스가 있습니다.
- 에러의 종류
1. 거짓 양성 : 음성인데 양성으로 잘못 분류
2. 거짓 음성 : 양성인데 음성으로 잘못 분류
불균형 데이터셋 : 한 클래스가 다른 것보다 훨씬 많은 데이터셋!
오차행렬은 이진 분류 평가 결과를 나타낼 때 가장 널리 사용하는 방법 중 하나입니다.

-- '9 아님'을 양성 클래스라고 했을 때 --
위 그림에서 9가 아니라고 예측했는데 실제로는 9가 아니었던 샘플이 401개입니다. (진짜 양성)
또 실제로 9였던 샘플이 8개 입니다. (거짓 양성)
양성 클래스를 올바르게 분류한 샘플을 진짜 양성(TP)
양성 클래스를 잘못 분류한 샘플을 거짓 양성(FP)
음성 클래스를 올바르게 분류한 샘플을 진짜 음성(TN)
음성 클래스를 잘못 분류한 샘플을 거짓 음성(FN)
오차 행렬의 결과를 요약하는 방법 중 하나는 정확도로 표현하는 것입니다.
정확도뿐만 아니라 정밀도, 재현율, f-점수로도 오차 행렬의 결과를 요약할 수 있습니다.
정밀도(양성 예측도) = 𝑇𝑃/(𝑇𝑃+𝐹𝑃)
양성으로 예측된 것 중에 얼마나 많은 샘플이 진짜 양성인지 측정
재현율(민감도, 적중률, 진짜 양성 비율) = 𝑇𝑃/(𝑇𝑃+𝐹𝑁)
전체 양성 샘플 중 진짜 양성으로 올바르게 분류된 샘플의 비율.
f-점수는 정밀도와 재현율을 다시 하나로 요약해줍니다.
양성 확률이 임계 값보다 크거나 같으면 샘플은 양성(TP, NP)로 분류
-> 임계값 낮으면 양성 클래스 비율 높아짐
-> 임계값 높으면 음성 클래스 비율 높아짐

모든 임계값을 조사해보거나, 한 번에 정밀도나 재현율의 모든 장단점을 살펴봄
from sklearn.metrics import precision_recall_curve

전체 곡선에 담긴 정보를 요약하기 위해 곡선의 아랫부분 면적을 계산하여 평균 정밀도를 구할 수 있습니다.
ROC곡선은 여러 임계값에서 분류기의 특성을 분석하는 데 널리 사용하는 도구입니다.
정밀도-재현율 곡선처럼 분류기의 모든 임계값을 고려하지만, 정밀도와 재현율 대신 진짜 양성 비율(재현율)에 대한 거짓 양성 비율을 나타냅니다.
from sklearn.metrics import roc_curve

ROC에서도 마찬가지로 곡선 아래의 면적값을 이용해서 ROC곡선을 요약할 수 있습니다.
이 면적을 보통 AUC라고 합니다.
from sklearn.metrics import roc_auc_curve

서로 다른 gamma에 대한 SVM의 ROC 곡선입니다.
(지금까지의 곡선은 모두 SVM으로 그린 곡선입니다.)
※ 세가지 감마값에 대한 정확도는 모두 0.9입니다.
gamma=1 일 때 AUC=0.5
gamma=0.1 일 때 AUC=0.94
gamma=1 일 때 AUC=1
그래서 불균형 데이터셋에는 AUC를 사용하는 게 좋습니다.
다중 분류의 평가 지표는 기본적으로 방금까지 살펴본 이진 분류 평가 지표에서 유도되었지만, 모든 클래스에 대해서 평균을 낸 것입니다.
다중 분류의 정확도 또한 전체 샘플분의 정확히 분류된 샘플의 비율로 계산합니다.
다중 분류에서 불균형 데이터셋을 위해 가장 널리 사용하는 평가 지표는 다중 분류 버전의 f1- 점수입니다.
다중 클래스용 f1-점수는 한 클래스를 양성, 나머지를 음성으로 간주하여 클래스마다 f1-점수를 계산하고 클래스별 점수를 평균을 냅니다.
평균을 내는 방법은 여러가지입니다.
macro 평균 : 클래스별 f1-score에 가중치를 주지 않음. 합의 평균
weighted 평균 : 클래스별 샘플 수로 가중치를 두어 f1-score 점수의 평균을 계산
micro 평균 : 모든 클래스의 FP, FN, TP의 총 수로 정밀도, 재현율, f1-score를 계산
회귀의 평가 지표는 R^2으로 충분합니다.