1. 정확도 (Accurancy)
가장 직관적으로 사용할 수 있는 지표다.
다만 문제점은 데이터의 label이 불균형할 경우 성능을 왜곡할 수 있는 문제점을 가지고 있다.
사이킷런에서 import accuracy_score을 입력하면 사용 가능하다.
(아래 예시는 label encoding 및 data preprocessing이 이미 완료된 상태다)
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 원본 데이터를 재로딩, 데이터 가공, 학습데이터/테스트 데이터 분할.
titanic_df = pd.read_csv('/Users/dreamus/Downloads/titanic/train.csv')
y_titanic_df = titanic_df['Survived']
X_titanic_df= titanic_df.drop('Survived', axis=1)
X_titanic_df = transform_features(X_titanic_df)
X_train, X_test, y_train, y_test=train_test_split(X_titanic_df, y_titanic_df, \
test_size=0.2, random_state=0)# 위에서 생성한 Dummy Classifier를 이용하여 학습/예측/평가 수행.
myclf = MyDummyClassifier()
myclf.fit(X_train ,y_train)mypredictions = myclf.predict(X_test)
print('Dummy Classifier의 정확도는: {0:.4f}'.format(accuracy_score(y_test , mypredictions)))
위 코드는 단순 성별로 생존자를 예측했고 정확도는 약 78%나왔다.
이처럼 단순한 알고리즘으로 예측을 하더라도 높은 수치가 나올 수 있기에 정확도를 평가 지표로 사용할 때에는 매우 신중하게 사용해야한다.
2. 오차 행렬 (Confusion Matrix)
이진 분류에서 성능 지표로 잘 활용되는 오차 행렬은 학습된 분류 모델이 예측을 수행하며, 얼마나 헷갈리는지(confused) 함께 보여주는 지표다. 즉, 이진 분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표이다.
여기서 앞 문자 True/False는 예측값과 실제값이 ‘같은지/틀린지'를 의미하며, 뒤 문자 Negative/Positive는 결과 값이 부정(0)인지 긍정(1)인지를 의미한다.
TN : 예측값 N, 실제값 N
FP : 예측값P, 실제값 N
FN : 예측값N, 실제값P
TP : 예측값P, 실제값P
정확도는 오차 행렬상에서 새롭게 정의될 수 있다.
정확도 = (TN + TP) / (TN + FP + FN + TP)
-> 전체에서 예측값이 동일한 개수
마찬가지로 사이킷런에서는 confusion_matrix()를 사용하여 쉽게 오차 행렬을 구할 수 있다
from sklearn.metrics import confusion_matrixconfusion_matrix(y_test,Mypred)
3. 정밀도(Precision)와 재현율(Recall)
정밀도와 재현율은 positive 데이터의 예측 성능에 초점을 맞춘 평가 지표다.
정밀도 = TP / (FP + TP)
재현율 = TP / (FN + TP)
정밀도는 Positive로 예측한 대상들이 실제로 positive인 비율을 나타내며, 양성 예측도라고 불리기도 한다.
재현율은 예측과 실제값이 positive로 일치한 비율을 나타내며, 민감도 또는 TPR(True Positive Rate)로 불린다.
이 지표들은 특정 업무에 따라 중요한 지표가 될 수 있다.
재현율이 상대적으로 더 중요한 지표인 경우 실제 positive 양성인 데이터 예측을 negative로 잘못 판단하게 되면 업무상 큰 영향이 발생할 때
(Ex. 암 환자에게 암이 아니라고 예측 -> 맞는데 아니다.)정밀도가 상대적으로 더 중요한 지표인 경우 실제 Negative 음성인 데이터 예측을 Positive 양성으로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우
(Ex. 금융 사기가 아닌데 맞다고 예측 -> 아닌데 맞다)
from sklearn.metrics import precision_score, recall_scoreprecision = precision_score(y_test, Mypred)
recall = recall_score(y_test, Mypred)
4. F1 스코어(Score)
F1 스코어는 정밀도와 재현율을 결합한 지표이다.
이는 정밀도와 재현율이 어느 한쪽으로 치우치지 않는 수치를 나타낼 때 상대적으로 높은 값을 가진다.
사이킷런은 F1 스코어를 구하기 위해 f1_score 함수를 제공한다.
from sklearn.metrics import f1_score
f1 = f1_score(y_test,Mypred)
5. ROC 곡선과 AUC
ROC 곡선과 이에 기반한 AUC 스코어는 이진 분류의 에측 성능 측정에서 중요하게 사용되는 지표다.
ROC 곡선은 2차대전 때 통신 장비 성능 평가를 위해 고안된 수치라고 하며, 일반적으로 의학 분야에서 많이 사용되지만 머신러닝의 이진 분류 모델의 예측 성능을 측정할 때 사용되는 중요한 지표다.
ROC 곡선은 FPR(X)와 TPR(Y)의 관계를 그린 곡선이다.
FPR : False Positive Rate (FP / (FP + TN) = 1-TNR = 1-특이성
TPR : True Positive Rate (재현율)
그림과 같이 직선에서 거리가 멀어질 수록 성능이 뛰어난 것으로 해석할 수 있고 결론적으로 곡선 아래의 면적인 AUC(Area Under Curve)가 클수록 좋다고 볼 수 있다.
from sklearn.metrics import roc_auc_score
roc_auc = roc_auc_score(y_test,Mypred)