예측과 실제 값 사이의 관계를 행렬 형태로 표현한 것을 Confusion Matrix(혼돈 행렬 or 오차 행렬) 이라고 한다.
이런 오차행렬에서 머신러닝 모델의 성능을 평가하는 여러 지표를 도출할 수 있다
Accuracy = TP + TN / TP + TN + FP + FN
전체 문제 중에서 정답을 맞춘 비율
주의 사항 1
이진 분류의 경우 데이터의 구성에 따라 ML(Machine Learning) 모델의 성능을 왜곡할 수 있기 때문에 정확도 수치 하나만 가지고 성능을 평가하지 않음
주의 사항 2
정확도 평가 지표는 불균형한 레이블 데이터 세트에서는 성능 수치로 사용돼서는 안됨
scikit-learn에서 확인하는 방법
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_predict)
Precision = TP(True Positive) / (TP(True Positive) + FP(False positive))
정밀도는 True라고 분류한 것들 중에서 실제로 True인 것의 비율이다.
PPV(Positive Predictive Value) 즉 Positive 정답률이라고도 불린다.
현실 사례
Precision이 낮다 : True가 아닌데 True라고 한 것이 많다
Precision이 (과도하게) 높다 : 아주 확실한 경우에만 참으로 예측했다
scikit-learn에서 확인하는 방법
from sklearn.metrics import precision_score
x_true = [1, 0, 0, 1, 1, 1, 0, 1, 1, 1]
x_guesses = [0, 1, 1, 1, 1, 0, 1, 0, 1, 0]
precision_score(x_true, x_guesses)
Recall = TP(True Positive) / (TP(True Positive) + FN(False Negative))
재현율은 실제 True인 것 중에서 True라고 예측한 것의 비율이다.
Sensitivity 혹은 Hit rate라고도 불린다
현실 사례
from sklearn.metrics import recall_score
x_true = [1, 0, 0, 1, 1, 1, 0, 1, 1, 1]
x_guesses = [0, 1, 1, 1, 1, 0, 1, 0, 1, 0]
recall_score(x_true, x_guesses)
Presicion이나 Recall은 모두 True라고 예측한 것과 관련이 있으나, 관점이 다르다고 볼 수 있다.
Precision과 Recall은 상호보완적이기 때문에, Recall을 올리면 Precision이 내려가고, Precision을 올리면 Recall이 내려갈 수 밖에 없다.
이를 보완하기 위해 생겨난 것이 Recall과 Precision의 조화평균인 F1 score이다.
※ 조화평균이란?
조화평균은 '역수의 산술평균의 역수'이다. 역수의 차원에서 평균을 구하고, 다시 역수를 취해 원래 차원의 값으로 돌아오는 것이라고 한다..
Precision과 Recall의 조화평균으로 0.0~ 1.0 사이의 값을 가진다.
값이 1에 가까울수록 좋은 모델이다.
scikit-learn에서 확인하는 방법
from sklearn.metrics import f1_score
pred = pipe.predict(X_test)
f1_score(y_test, pred)
이미지 출처 :
1. https://sumniya.tistory.com/26
2. https://velog.io/@hajeongjj/Eval-Metrics
3. https://www.appsflyer.com/blog/mobile-fraud/click-flooding-detection-false-positive-challenge/