[파이썬 머신러닝] 4. Evaluation

2021. 3. 9. 23:32프로그래밍-AI & 빅데이터/머신러닝

<머신러닝의 일반적인 절차>

 

데이터 가공/변환 -> 모델 학습-> 예측 -> 평가 

 

 

<Classification의 Evaluation>

 

1) Accuracy

 

- 전체 예측 데이터 건수 대비 예측 결과가 동일한 데이터 건수

- 그러나 단순 Accuracy로 판단하는 것은, 데이터의 분포에 따라 왜곡이 커질 수 있다.

 

예컨데 여자는 무조건 살고, 남자는 무조건 죽는 엔진으로 학습해도, 80퍼센트에 가까운 정확도가 나온다

데이터가 이미 편중되어있기 때문이다

(예시 코드에서는 이전 타이타닉 예시에서 만든 total_function함수를 사용했다.

따라서 accuracy는 imbalanced한 데이터에 대한 evaluation지표로는 부적절하다.

예컨데 전체 데이터중 0이 90개 1이 10개라고 하더라도, 무조건 0으로 예측한다면 정확도가 90이 되는것이다.

비슷한 예로 True or False로 예측됨에도 불구하고 한쪽 라벨이 압도적으로 많은 데이터셋은 적절한 accuracy의 활용이라고 할 수 없다.

 

 

2) confusion matrix(오차행렬)

- TP,TN(올바른 output)과 FP,FN(틀린 output)의 분포를 알 수 있다.

 

다음 예시코드도 confusion matrix를 이용한 것

accuracy의 경우 오로지 TN과 TP의 값의 합만 예측이 가능하다.

그러나 오차행렬을 사용하면 이를 TN고 TP로 구분할 수 있다.

 

 

3) Precision과 recall

 

정밀도(Precision)

 

- TP/(FP+TP)

- 실제 negative 데이터를 positivie로 판단하는 경우(스팸메일의 예시) 

- 사이킷런의 precision_score() API 이용

 

재현율(recall)

 

- TP/(FN+TP)

- 실제 positive 데이터를 negative로 판단하면 큰 문제가 생김(암환자의 예시)

- 사이킷런의 recall_score() API 이용

 

confusion matrix, 정확도, 정밀도, 재현율을 모두 추출해보았다.

상대적으로 재현율이 낮다.

정밀도-재현율은 한쪽을 올리면 다른쪽은 떨어지기 쉬운 trade-off관계를 가지고 있다.

이는 Threshold로 조절한다.

 

사이킷런에서는 개별 데이터의 예측 확률을 보여주는 predict_proba 메소드를 제공한다.

default인 threshold는 0.5이므로, 0.5가 넘는 쪽으로 데이터는 classification된다.

임계값을 낮추면 재현율은 올라가고 정밀도가 떨어진다. 

둘은 상황에 따라 적절하게 조화되어야 한다.

 

 

4) F1 스코어

- 정밀도와 재현율을 결합한 지표로, 한쪽으로 치우치지 않을때 높은 값을 가진다.

- 사이킷런에서는 f1_socre 라는 API 제공

- threthold에 따른 정확도, 정밀도, 재현율, F1 수치 잘 보기

 

 

5) ROC곡선

- FPR(False Positive Rate-)이 변할 때 TPR(True Positive Rate-재현율)이 어떻게 변하는지를 나타냄

- 곡선이 직선에 가까울수록 성능이 떨어짐

- 실제로는 threthold를 변화시키면서 최적의 FPR-TPR조합을 찾아낸다

 

- 사이킷런에서는 roc_curve API를 이용하여 threshold를 변경해가며 최적의 fpr-tpr 조합을 찾을 수 있다

- 이 과정에서 AUC를 이용하여 ROC아래 면적을 구해 적절한지 여부를 판단한다. 1에 가까울수록 좋다.