파이썬 머신러닝 완벽 가이드

정밀도와 재현율은 Positive 데이터 세트의 예측 성능에 좀 더 초점을 맞춘 평가 지표
정밀도와 재현율은 다음과 같은 공식으로 계산된다.
정밀도 = TP / ( FP + TP)
재현율 = TP / ( FN + TP )
정밀도
예측을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율
즉, Positive 예측 성능을 더욱 정밀하게 측정하기 위한 평가지표로 양성 예측도라고도 불린다.
재현율
정밀도와 재현율 지표 중에 이진 분류 모델의 업무 특성에 따라 특정 평가 지표가 더 중요한 지표로 간주될 수 있다.
재현율이 중요 지표인 경우는 실제 Positive 양성 데이터를 Negative로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우이다.
ex) 암 판단 모델, 보험, 금융 사기 적발 모델
정밀도가 중요 지표인 경우는 실제 Negative 음성인 데이터 예측을 Positive 양성으로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우이다.
ex) 스팸메일 여부 판단 모델
즉 , 재현율과 정밀도 모두 TP를 높이는 데 동일하게 초점을 두지만, 재현율은 FN(실제 Positive, 예측 Negative)를 낮추는 데 초점 , 정밀도는 FP를 낮추는 데 초점을 둔다.
앞의 타이타닉 예제에 오차 행렬 및 정밀도, 재현율을 모두 구해서 예측성능을 평가해보자
사이킷런은 정밀도 계산을 위해 precision_score(), 재현율 계산을 위해 recall_score()를 API로 제공한다.
평가를 간편하게 하기 위해 confusion matrix, accuracy, precision, recall 등의 평가를 한꺼번에 호출하는 get_clf_eval() 함수를 만들어보자
from sklearn.metrics import accuracy_score, precision_score, recall_score, confusion_matrix
def get_clf_eval(y_test, pred):
confusion = confusion_matrix(y_test, pred)
accuracy = accuracy_score(y_test, pred)
precision = precision_score(y_test, pred)
recall = recall_score(y_test, pred)
print('오차 행렬')
print(confusion)
print('정확도: {0:.4f}, 정밀도:{1:.4f}, 재현율:{2:.4f}'.format(accuracy, precision, recall))
이제 로지스틱 회귀 기반으로 타이타닉 생존자를 예측하고 평가 수행
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
#원본 데이터를 재로딩, 데이터 가공, 학습 데이터/테스트 데이터 분할
titanic_df = pd.read_csv('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=11)
Ir_clf = LogisticRegression(solver='liblinear')
Ir_clf.fit(X_train,y_train)
pred = Ir_clf.predict(X_test)
get_clf_eval(y_test,pred)
[output]
오차 행렬
[[108 10]
[ 14 47]]
정확도: 0.8659, 정밀도:0.8246, 재현율:0.7705