머신러닝을 사용하면서 기본 단어 정리

Accuracy

: 전체 데이터 중 맞힌 비율
(TP + TN + FP + FN) / (TP + TN)

Precision

: 참이라고 예측한 것 중에 실제 참의 비율
(TP + FP) / TP

Recall

: 참인 데이터 중에서 참이라고 예측한 것
(TP + FN) / TP

Fall_out

: 실제 참이 아닌데, 잘못 예측한 경우
(FP + TN)/ FP

THRESHOLD

: 0.5를 기준으로 0.5보다 작으면 0, 크면 1이라고 기준

F1-SCORE (조화 평균)

RECALL과 PRECISION을 결합한 지표.
어느 한쪽으로 치우치지 않고 둘 다 높은 값을 가질수록 모델에 대해 높은 값을 가진다.

ROC 곡선

FPR이 변할 떄, TPR의 변화를 그린 그림.
FPR = FALL-OUT
TPR = RECALL
직선에 가까울수록 성능이 감소한다.

예시

import pandas as pd


red_url= 'https://raw.githubusercontent.com/PinkWink/ML_tutorial/master/dataset/winequality-red.csv'
white_url = 'https://raw.githubusercontent.com/PinkWink/ML_tutorial/master/dataset/winequality-white.csv'

red_wine =pd.read_csv(red_url, sep=';')
white_wine =pd.read_csv(white_url, sep=';')

red_wine['color'] =1.
white_wine['color'] =0. 

wine = pd.concat([red_wine, white_wine])

화이트 와인과 레드와인을 ROC곡선으로 그려보자.

  1. 등급이 높을수록 와인 맛과 퀄리티에 대해서 구분하려고 한다.
wine['taste'] = [1. if grade>5 else 0. for grade in wine['quality']]

x= wine.drop(['taste', 'quality'], axis =1)
y= wine['taste']
  1. sklearn을 통해 머신러닝의 기초를 만들어준다.
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.2, random_state=13)

wine_tree = DecisionTreeClassifier(max_depth=2, random_state=13)
wine_tree.fit(x_train, y_train)

y_pred_tr = wine_tree.predict(x_train)
y_pred_test = wine_tree.predict(x_test)

print('Train Acc :', accuracy_score(y_train, y_pred_tr))
print('Test Acc :', accuracy_score(y_test, y_pred_test))

이를 통해 test acc와 train acc값을 얻을 수 있다.
Train Acc : 0.7294593034442948
Test Acc : 0.7161538461538461

  1. 그러면 Accuracy,Recall , Precision , AUC score, F1 score를 각각 알아보자
from sklearn.metrics import accuracy_score, precision_score
from sklearn.metrics import recall_score, f1_score
from sklearn.metrics import roc_auc_score, roc_curve

print('Accuracy :', accuracy_score(y_test, y_pred_test))
print('Recall :', recall_score(y_test, y_pred_test))
print('Precision :', precision_score(y_test, y_pred_test))
print('AUC score:', roc_auc_score(y_test, y_pred_test))
print('F1 score :', f1_score(y_test, y_pred_test))
  1. 얻은 각각의 정보를 바탕으로 ROC곡선 그리기
import matplotlib.pyplot as plt


pred_prob = wine_tree.predict_proba(x_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test,pred_prob)
plt.figure(figsize=(10,8))
plt.plot([0,1],[0,1], 'r', ls='dashed')
plt.plot(fpr,tpr)
plt.grid()
plt.show()

AUC

: ROC곡선 아래면의 면적을 뜻한다.
1에 가까울수록 좋은 수치라고 할 수 있다.

profile
문과생 데이터사이언티스트되기 프로젝트

0개의 댓글