본문 바로가기
ADP로ML정리

3. 머신러닝 평가지표

by hits_gold 2024. 2. 15.
반응형

회귀분석

 

1. MAE(Mean Absolute Error)

  • 실제값과 예측값의 차이의 절대값의 평균
  • 에러의 크기가 그대로 반영됨
  • 이상치에 영향을 받음

2. MSE(Mean Squared Error)

  • 실제값과 예측값의 차이를 제곱한 평균
  • 실제값과 예측값 차이의 면적 합을 의미
  • 특이값이 존재하면 수치가 증가

 

3.RMSE(Root Mean Squared Error)

  • 실제값과 예측값의 차이를 제곱해 평균한 것의 제곱근
  • 에러에 제곱을 하면 에러가 클수록 그에 따른 가중치가 높이 반영
  • 이때 손실이 기하급수적으로 증가하는 사오항에서 실제 오류평균보다 값이 더 커지지 않도록 상쇄하기 위해 사용

4. MSLE(Mean Squared Log Error)

  • 실제값과 예측값의 차이를 제곱해 평균한 것에 로그 적용
  • RMSE와 같이 손실이 기하급수적으로 증가하는 상황에서 실제 오류평균보다 값이 더 커지지 않도록 상쇄하기 위해 사용

5. MAPE(Mean Absolute Percentage Error)

  • MAE를 퍼센트로 변환한 것
  • 실제 정답보다 낮게 예측했는지 높게 예측했는지 파악하기 힘듦
  • 실제 정답이 1보다 작을 경우 무한대의 값으로 수렴함

from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_squared_log_error
import numpy as np

test = np.random.rand(100)
pred = np.random.rand(100)

mse = mean_squared_error(test, pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(test, pred)
msle = mean_squared_log_error(test, pred)
mape = np.mean(np.abs((test-pred)/test)) * 100

df = pd.DataFrame(index = ['mse', 'rmse', 'mae', 'msle', 'mape'])
df['metrics'] = [mse, rmse, mae, msle, mape]
df

 

 

분류분석

1. 정확도

  • 실제 데이터에서 예측 데이터가 얼마나 같은지 판단하는 지표
  • 데이터 구성에 따라 모델의 성능을 왜곡할 가능성이 있음(데이터 불균형 등)

2. Confusion Matrix

  • 이진 분류에서 나올 수 있는지 4가지 경우에 대한 지표

  • 여기서 Positive는 해당 task에서 분류해 내려는 레이블이다.
  • 따라서 암 진단을 할 경우, 암이 양성이 경우를 분류해내려는 것이기 때문에 암이 양성이 경우를 Positive로 한다.

3. 정밀도 (Precision)

  • Positive로 예측한 것 중 실제로도 Positive인 것들의 비율
  • '정밀도'라는 단어의 뜻을 생각하면, 예측이 얼마나 정밀한가 -> 에측한 값 중 맞는 것이 얼마나 되는가?
  • Negative를 Positive로 잘못 예측했을 때 부정적인 영향이 크게 발생할 때 주로 사용된다.
  • ex) 일반 메일을 스팸 메일로 분류할 경우

4. 재현율(Recall)

  • 실제 Positive인 것들 중 Positive로 예측한 것들의 비율
  • '재현율'이라는 단어의 뜻을 생각하면, 실제를 얼마나 재현했는가 -> 실제값들 중 예측해낸 값이 얼마나 되는가?
  • 민감도(Sensitivity) 또는 TPR(True Positive Rate)라고도 불림
  • 실제 Positive인 경우를 Negative로 잘못 예측했을 때 부정적인 영향이 크게 발생할 때 주로 사용된다.
  • ex) 암이 양성인 경우를 음성으로 진단했을 때

5. F1 score

  • 정밀도와 재현율의 조화평균으로, 적절한 조화를 이룰 때 상대적으로 높은 수치를 나타냄

 

 

6. ROC curve & AUC score

  • Roc curve는 FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate)(Recall)이 변하는 것을 나타내는 곡선
  • 여기서 FPR은 1-특이도(Specificity)인데, 특이도는 Negative 관점에서의 Recall. 즉 실제 Negative 중 예측값이 맞는 비율이다.
  • 따라서 FPR은 실제 Negative 중 Positive로 예측한 비율이다.

  • AUC는 Area under Curve로, ROC curve 아래 영역의 면접이다.
  • TPR은 클 수록 좋고, FPR은 작을 수록 좋다.
  • TPR(Recall)이 크다 -> Positive로 예측한 값이 많다 -> 실제 Negative 중 Positive로 예측한 값이 많아졌을 수도?
    • 실제 Negative 중 Positive로 예측한 값 -> FPR!
    • 따라서 TPR이 크면서 FPR이 작으면 좋다!
  • ROC curve 아래의 면적을 구하면, TPR이 커지면서 FPR이 작아지는 정도를 AUC로 측정할 수 있게 된다.
  • AUC는 면적이기 때문에 0 ~ 1의 값을 갖고, 각 범위마다 보통 아래와 같은 평가르 한다.

 

 

from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.metrics import precision_score, recall_score, f1_score, roc_curve, auc
import matplotlib.pyplot as plt

test = np.round(np.random.rand(1000))
pred = np.round(np.random.rand(1000))

acc = accuracy_score(test, pred)
pre = precision_score(test, pred)
rec = recall_score(test, pred)
f1 = f1_score(test, pred)
fpr, tpr, thres = roc_curve(test, pred, pos_label=1)
auc = auc(fpr, tpr)

df = pd.DataFrame(index = ['Accuracy', 'Precision', 'Recall', 'F1', 'AUC'])
df['metrics'] = [acc, pre, rec, f1, auc]
print(df)
print('\n')
print(confusion_matrix(test, pred))

반응형