일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 인코등
- Folium
- 오류
- geopandas설치
- 공공데이터포털
- covid
- OSMnx
- Python
- 라이엇api
- kepler
- 파이썬
- 시각화
- covid19
- 오픈API
- 라이엇
- 마커클러스터
- 에러
- API
- r
- geopandas에러
- kepler.gl
- 코로나
- QGIS라벨링
- matplotlib
- map
- riotapi
- geopnadas
- 막대그래프
- 지도
- pipwin
- Today
- Total
Nerdy
분류 모델 성능 측정 지표 : 오차행렬, 정확도, 정밀도, 재현율, F-스코어 본문
앞전에는 회귀분석을 통한 예측 모델을 생성한 후 모델 성능을 측청하는 MAE, MSE, MAPE 등 지표들을 알아봤으면 이번 포스팅에서는 분류 모델의 성능 측정하는 방법을 알아볼려고 한다.
# 사용 모듈
- 혼동행렬(오차행렬) : confusion matrix
- 정확도(accuracy) : accuracy_score
- 정밀도(precision) : precision_score
- 재현율(recall) : recall_score
- F1 score : f1_score
- F beta score : fbeta_score
먼저 실제값과 예측값을 기반으로 confusion matrix를 생성한다.
from sklearn.metrics import confusion_matrix
y_true = [0, 1, 0, 1, 1, 0, 1, 1, 0, 1] # 실제값
y_pred = [0, 1, 0, 0, 1, 0, 1, 0, 0, 1] # 예측값
confusion_matrix(y_true, y_pred)
# array([[4, 0],
# [2, 4]], dtype=int64)
혼동행렬은 이진분류 모델의 성능 지표로 많이 활용되며 실제 클래스와 예측 클래스의 값이 긍정인지(positive) 부정인지(negative) 값의 유형을 나타내는 지표라고 볼 수 있다.
아래 그림을 통해 어떤 유형을 가지고 있는지 확인해보자
- T(True) : 예측값과 실제값이 같은가 / F(False) : 예측값과 실제값이 다른가
- Positive : 긍정(1) / Negative : 부정(0)
- True Positive(TP) : 실제 True인 정답을 True라고 예측 (정답)
- True Negative(TN) : 실제 False인 정답을 False라고 예측 (정답)
- False Positive(FP) : 실제 False인 정답을 True라고 예측 (오답)
- False Negative(FN) : 실제 True인 정답을 False라고 예측 (오답)
간단한 예시를 통해 이 표를 쉽게 이해하면 좋을거다.
비가 올지 안 올지 몰라서 우산을 챙겨야 하는지 마는지 정해야 하는 상황을 예로 들면 다음과 같이 정리를 한다.
- 비가 온다 : True
- 비가 안 온다 : False
- 우산을 챙긴다 : Positive
- 우산을 안 챙긴다 : Negative
비 유무는 실제 클래스, 우산을 챙기는지 안 챙기는지는 예측 클래스로 분류를 하면 되고 다시 표로 정리하면 다음과 같다.
실제 / 예측 | 우산을 안 챙긴다 Negative (0) |
우산을 챙긴다. Positive (1) |
비가 안 온다 (False) |
True Negative (TN) | False Positive (FP) |
비가 온다 (True) |
False Negative (FN) | True Positive (TP) |
TN과 TP 값이 높을수록 이상적인 결과라고 볼 수 있으며 TP(True Positive) 비율이 높다는 건 예측을 잘 했다는 걸로 간주할 수 있다.
앞에서 만든 오차행렬을 헷갈리지 않게 분류를 해준다.
- TN : 4
- FP : 0
- FN : 2
- TP : 4
- Total : 10
1. 정확도(accuracy)
정확도는 실제 데이터 중 예측 데이터가 얼마나 같은지를 판단하는 지표다.
하지만 이진분류 모델의 데이터 구성에 따라 성능을 왜곡할 수 있기에 단순히 정확도 결과 하나만을 가지고 성능을 평가하지 않는다.
· Accuracy = (TN + TP) / Total
from sklearn.metrics import accuracy_score
acc = accuracy_score(y_true, y_pred)
acc # 0.8
2. 정밀도(Precision)
Positive로 예측한 값들 중에 실제로 Positive한 값의 비율이다.(예측값이 얼마나 정확한가)
EX) 암인지 아닌지 예측할 때
· Precision = TP / (TP + FP)
from sklearn.metrics import precision_score
pre = precision_score(y_true, y_pred)
pre # 1.0
3. 재현율(Recall)
실제 값이 Positive인 값들 중에 예측을 Positive로 한 값의 비율이다.(실제 정답을 얼마나 맞췄느냐)
EX) 스팸메일 여부 판단
· Recall = TP / (TP + FN)
from sklearn.metrics import recall_score
recall = recall_score(y_true, y_pred)
recall # 0.6666666666666666
4. F-스코어
F 스코어는 정밀도(Precision)과 재현율(Recall)의 가중조화평균(weight harmonic average)이라고 한다.
정밀도와 재현율 둘 다 모델의 성능을 확인하는데 중요한 지표라고 볼 수 있으며 두개의 지표를 평균값을 통해 하나의 값으로 나타내는 방법이다.
해당 값이 높을 수록 좋은 모델이라고 볼 수 있다.
· Fβ = (1+β²)(precision × recall) / ((β² · precision) + recall)
가중치, 즉 beta = 1를 넣어주면 F1 스코어 값을 구할 수 있다.
· F1 = 2⋅precision⋅recall / (precision+recall)
from sklearn.metrics import f1_score # f1 스코어
f1 = f1_score(y_true, y_pred)
f1 # 0.8
from sklearn.metrics import fbeta_score # fbeta 스코어
fb = fbeta_score(y_true, y_pred, beta = 2)
fb # 0.7142857142857142
■ Reference
https://gaussian37.github.io/ml-concept-ml-evaluation/#f1-score-1
'Python > [Scikit-learn]' 카테고리의 다른 글
[Scikit-learn] 회귀 모델 성능 측정 지표 : MAE, MSE, RMSE, MAPE, MPE (0) | 2022.06.29 |
---|