머신러닝 분류 모델의 정확도, 재현율 그리고 F1-Score
April 5, 2022, 11:30 p.m.
분류 모델의 성능을 평가하는 지표는 다양합니다. 이번 포스트에서는 분류 모델의 성능을 평가하는 지표 몇가지를 알아보도록 하겠습니다.
1. 정확도
제일 보편적이고 간단한 지표는 바로 정확도 입니다. 모델이 예측한 레이블중에서 옳은 예측의 비율이 정확도 입니다.
그런데 정확도는 사실 좋은 지표가 아닙니다. 예측 데이터의 클래스 비율이 모두 동일하지 않기 때문입니다. 예를들어 어떤 테스트 데이터는 클래스 1이 100개, 2가 5개, 3이 5개입니다. 만약 모델이 테스트 데이터에 상관없이 무조건 예측 클래스를 1로 반환한다면 어떻게 될까요?
그래도 모델은 의 정확도를 얻게 됩니다. 아무 예측을 하지 않고 무조건 1만 반환하는 모델이지만 위와 같은 클래스 비율을 가진 테스트 데이터로는 높은 정확도를 가지는 것처럼 보이죠.
이럴때는 재현율을 사용하는 것이 적절합니다.
2. 재현율
재현율이란 다시 말해 진짜 양성 비율입니다. 즉, 모델이 어떤 클래스로 예측 했을 때 실제 데이터가 그 클래스일 확률을 말합니다. 실생활에 적용해보면 어떤 머신러닝 모델이 엑스레이 사진을 보고 암이라고 판단했을 때 실제로 그 환자가 암환자일 확률을 말하는 것입니다.
3. F1-Score
실전에서 제일 많이 사용하는 F1-Score입니다. 정확도와 재현율을 조합한 형태입니다. 정확도를 PRE라고 하고 재현율을 REC라고 했을 때 F1-Score는 아래와 같습니다.
4. 사이킷런으로 성능 지표 사용하기
이러한 성능지표들은 sklearn.metircs에 모두 구현이 되어있습니다.
from sklearn.metrics import precision_score, recall_score, f1_score
y_pred = best_model.predict(X_test)
y_true = y_test
acc = precision_score(y_true=y_true, y_pred=y_pred, average='macro')
rec = recall_score(y_true=y_true, y_pred=y_pred, average='macro')
f1 = f1_score(y_true=y_true, y_pred=y_pred, average='macro')
print(acc, rec, f1)
0.6329885203271143 0.6197292590198604 0.6136049206015193
분류 모델이 다중 클래스 분류 모델이기 때문에 성능 지표의 average 매개변수가 필요하고 이를 'macro'로 지정해 주었습니다.
사이킷런 scikit-learn metrics