매일공부

[Machine Learning] 오차행렬 - 모델 평가&분류 확인 본문

IT/ML

[Machine Learning] 오차행렬 - 모델 평가&분류 확인

aram 2022. 11. 20. 23:22

 

* 모델 성능 평가 - 실제값과 모델에 의해 예측된 값을 비교하여 두 값의  오차를 구하는 것

* 모델 평가 목적
 - 과적합을 방지하고 최적의 모델을 찾기 위해
- 오차가 작을수록 좋은 모형

* 모델 성능 평가는 지도학습에서만 사용되며, 분석 방법에 따른 성능 평가 지표는 다르게 사용

 


분류 분석 평가 지표 confusion matrix

- 이진 분류

- confusion matrix  (오차 행렬)
                         예측
               True(P)     False(N)
정  True    TP             FN 
답  False   FP             TN

- 정확률 accuracy : (TP+TN) / (TP+FN+FP+TN)
  > 올바르게 예측한 데이터 수 / 전체 데이터수
  > from sklearn.metrics import accuracy_score  (labels, pred)
  > 불균형한 레이블 값이 분포된 데이터에서 모델의 성능이 좋지 못하더라도 정확도가 높을 수 있다 
  > 정확률은 종속변수의 비율에 영향을 받아서 9:1 비율의 데이터에서 정확률 90%가 넘는 함정이 있음
  > 불균형한 데이터를 다룰 때 모델의 신뢰도가 낮다
  예) 99개의 데이터 라벨이 0, 1개의 데이터 라벨이 1인 경우 0만 예측하는 모델의 정확도는 99%가 되므로...

- 정밀도 precision :  TP / (TP+FP)
  > from sklearn.metrics import precision_score
  > 모델이 Positive로 예측한 것들 중에 실제 Positive이 데이터 비율

  > 양성 예측도
  > 음성 데이터를 양성으로 잘못 판단하면 업무상 영향이 큰 경우 ex) 스팸

- 재현율 recall, 민감도 sentitivity : TP / TP+FN
  > from sklearn.metrics import recall_score
  > 실제 Positive 데이터 중에서 Positive로 예측한 비율   

  > 양성 데이터를 음성 데이터로 잘못 판단하면 업무상 영향이 큰 경우 ex)암진단

- 특이도 specificity TN / FP+TN
  > 실제 Negative데이터 중에서 Negative로 예측한 비율 

>> 정밀도재현률반비례관계
  정밀도와 재현율의 성능 지표를 모두 올리는 것은 한계가 있음(trade off관계)

- predict_proba() : 개별 데이터별로 예측 확률을 반환
- precision_recall_curve() : 정밀도와 재현율의 임계값의 변화에 따라 평가 지표 변화곡선 형태의 그래프로 시각화하는데 이용

https://bkshin.tistory.com/entry/머신러닝 - 12. 편향(Bias)과 분산(Variance) Trade-off

- 저편향/저분산(Low Bias/Low Vaiance)
   : 예측 결과가 실제 결과에 매우 잘 근접, 예측 변동 큼x, 특정 부분에 집중 => 아주 뛰어난 성능
- 저편향/고분산(Low Bias/High Vaiance)
    : 예측 결과가 실제 결과에 비교적 근접, 예측 결과가 실제 결과를 중심으로 꽤 넓은 부분에 분포
- 고편향/저분산(High Bias/Low Vaiance)
    : 정확한 결과에서 벗어남, 예측이 특정 부분에 집중
- 고편향/고분산(High Bias/High Vaiance)
    : 정확한 결과에서 벗어남, 예측이 넓은 부분에 집중

>> 편향과 분산은 트레이드오프(trade-off, tradeoff) 관계

출처 : https://happysteppingstone.tistory.com/58?category=1024437

 

- f1-score :  ((정밀도 * 재현률) / (정밀도 + 재현률)) * 2
  > from sklearn.metrics import f1_score
  > 정밀도와 재현률의 수치를 적절하게 조합하여 사용되는 성능 지표
  > 정밀도와 재현율의 조화 평균

- ROC curve
: FPR (False Positive Rate)이 변할 때 TPR (True Positive Rate) 이 어떻게 변하는지를 나타내는 곡선
: TPR 민감도 = TP / (TP + FN)  재현율과 동일
: FPR = FP / (FP + TN) = 1 - TPR
: from sklearn.metrics import roc_curveroc_auc_score
: 임계값 (Threshold) 1 - 확률이 1일때만 True 라고 예측하기 때문에 FP (실제 False인데 True라고 예측하는 경우) = 0
: 임계값 (Threshold) 0 - 확률이 모두 True 라고 예측하기 때문에 TN (실제 False인데 False 라고 예측하는 경우) = 0
: roc_curve () - ROC 곡선으로 모델의 성능을 확인 .

- AUC score
: ROC 커브의 아래 면적
: 0.5미만은 의미 없는 모형
: 1에 가까울수록 좋은 모형

출처 : https://commons.wikimedia.org/wiki/File:Roc-draft-xkcd-style.svg

>> y의 1에 가까울수록 더 좋은 성능

출처 : https://medium.com/the-owl/evaluation-metrics-part-3-47c315e07222

> 분포가 겹칠수록 직선에 가까워짐

 


분류가 제대로 되었는지 알 수 있는 가장 간단한 지표?  

sklearn.metrics.confusion_matrix(y_origin, y_predict)
=> 히트맵으로 표현 가능

  • 전체 합 = 샘플 수
  • 각 행의 합 = 원본 분류 샘플 수
  • 각 열의 합 = 예측한 분류 샘플 수
  • 주대각선 합 = 참 분류된 샘플 수 
  • 주대각선 제외 합 = 오분류된 샘플 수 

sklearn.metrics.classification_report()

 

 

* 내용참고&출처 : 태그에서 수강한 수업을 복습 목적으로 정리한 내용입니다.

728x90
Comments