Skip to main content

혼동 행렬

예측

import numpy as np #임포트
y_test = ch.has_churned #실제
prob = m.predict(ch) #확률 예측
y_pred = np.where(prob > 0.5, 1, 0) #문턱값보다 크면 1, 아니면 0으로 예측

혼동 행렬

from sklearn.metrics import *
confusion_matrix(y_test, y_pred) # 혼동 행렬

정확도 accuracy

  • 전체 중에 예측이 맞은 비율
TP+TN전체\frac{TP+TN}{전체}
  • 특별히 음성/양성 구분에 관심이 없는 경우 사용
  • 그러나 대부분은 양성에 더 관심이 있음
accuracy_score(y_test, y_pred) # 정확도

정밀도 precision

  • 양성 예측 중에 맞은 비율
TPTP+FP\frac{TP}{TP+FP}
  • 양성 예측이 중요한 경우 (예: 채용)
  • 대체로 문턱값을 높이면(보수적 예측) 정밀도가 높아진다
precision_score(y_test, y_pred) # 정밀도

재현도 recall

  • 실제 양성 중 찾아낸 비율
TPTP+FN\frac{TP}{TP+FN}
  • 양성을 찾아 내는 것이 중요한 경우 (예: 방역)
  • 의학 등에서는 민감도(specificity)라고도 함
  • TPR(True Positive Ratio)라고도 함
  • 대체로 문턱값을 낮추면(적극적 예측) 재현도가 높아진다
recall_score(y_test, y_pred) # 재현도

특이도 specificity

  • 실제 음성 중 찾아낸 비율
TNTN+FP\frac{TN}{TN+FP}
  • 음성을 찾아 내는 것이 중요한 경우 (예: 방역)
  • 대체로 양성 예측을 보수적으로 하면 특이도가 높아진다
  • TN 대신 FP를 분자에 사용하면 FPR (FPTN+FP)=1(\frac{FP}{TN+FP})=1 1-특이도

F1

  • 정밀도(p)와 재현도(r)의 조화 평균
  • 조화평균: 역수의 평균의 역수
11p+1r2=2prp+r\frac{1}{\frac{\frac{1}{p}+\frac{1}{r}}{2}}=\frac{2pr}{p+r}
  • 비율, 속도 등을 평균낼 때는 산술평균 대신 조화평균을 사용
f1_score(y_test, y_pred) # F1

퀴즈

hi = pd.read_excel('hiring.xlsx')  # 데이터 불러오기
hi['y'] = hi.hire.map({'P': 1, 'F': 0}) # P는 1, F는 0으로 변환
m = logit('y ~ gpa + test + major', hi).fit() # 분석