TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 머신 | 딥러닝 & AI>

[파이썬] 성능 평가 지표 - 1 (정확도, 정밀도, 재현율, 오차 행렬)

by 기록자_Recordian 2024. 6. 9.
728x90
반응형
시작에 앞서
해당 내용은 '<파이썬 머신러닝 완벽 가이드> 권철민 지음. 위키북스' 를 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적에 상세히 나와있으니 서적을 참고해 주시기 바랍니다.

 평가

 
머신러닝은 데이터 가공/변환, 모델 학습/예측, 평가의 프로세스로 구성된다.
머신러닝 모델은 여러 가지 방법으로 예측 성능을 평가할 수 있다.
 
[성능 평가 지표(Evaluation Metric)]
- 회귀: 실제값과 예측값의 오차 평균값에 기반. 예측 오차를 가지고 정규화 수준을 재가공하는 방법
- 분류: 일반적으로는 실제 결과 데이터와 예측 결과 데이터가 얼마나 정확하고 오류가 적게 발생하는가에 기반하나, 단순히 이러한 정확도만 가지고 판단하면 잘못된 평가 결과에 빠질 수 있다.
 
또한, 분류는 이진 분류와 멀티 분류로 나뉠 수 있다.
- 이진 분류: 결정 클래스 값 종류의 유형에 따라 긍정/부정과 같은 2개의 결괏값만을 가짐
- 멀티 분류: 여러 개의 결정 클래스 값을 가짐
 
[분류의 성능 평가 지표]

  • 정확도(Accuracy)
  • 오차행렬(Confusion Matrix)
  • 정밀도(Precision)
  • 재현율(Recall)
  • F1-Score
  • ROC AUC

※ 위의 성능 지표는 이진/멀티 분류 모두에 적용되는 지표이나, 특히 이진 분류에서 더욱 중요하게 강조된다.


정확도(Accuracy)

 
정확도는 실제 데이터에서 예측 데이터가 얼마나 같은지를 판단하는 지표이며, 직관적으로 모델 예측 성능을 나타내는 평가 지표이다. 하지만 이진 분류의 경우 데이터의 구성에 따라 ML 모델의 성능을 왜곡할 수 있기 때문에 정확도 수치 하나만 가지고 성능을 평가하지 않는다.
 
[사이킷런의 BaseEstimator 클래스]
사이킷런의 BaseEstimator 클래스를 상속받아 아무런 학습을 하지 않고, 성별에 따라 생존자를 예측하는 단순한 Classifier를 생성.
사이킷런은 BaseEstimator를 상속받으면 Customized 형태의 Estimator를 개발자가 생성할 수 있다.
생성할 MyDummyClassifier 클래스는 학습을 수행하는 fit() 메서드는 아무것도 수행하지 않으며 예측을 수행하는 predict( ) 메서드는 단순히 Sex 피처가 1이면 0, 그렇지 않으면 1로 예측하는 매우 단순한 Classifier 이다.

[생성된 MyDummyClassifier를 이용해 타이타닉 생존자 예측 수행]
타이타닉 csv 파일을 불러오고 데이터를 가공한 뒤 Classifier를 이용해 학습/예측/평가 적용

데이터 가공 코드
Classifier 를 이용한 학습/예측/평가

 
단순한 알고리즘으로 예측을 하더라도 데이터의 구성에 따라 높은 정확도가 나올 수 있기 때문에 정확도를 평가 지표로 사용할 때는 매우 신중해야 한다. 특히 정확도는 불균형한 레이블 값 분포에서 ML 모델의 성능을 판단할 경우, 적합한 평가 지표가 아니다. 
 
[MINST 데이터 세트를 통한 문제 확인]
MINST 데이터 세트를 변환해 불균형한 데이터 세트로 만든 뒤에 정확도 지표 적용 시 어떤 문제가 발생할 수 있는 지 확인
 
※ MINST 데이터 세트는 0부터 9까지의 숫자 이미지의 픽셀 정보를 가지고 있으며, 이를 기반으로 숫자 Digit를 예측하는 데 사용된다. (사이킷런은 load_digit( ) API를 통해 MINST 데이터 세트 제공)
 
전체 데이터의 10%만 True, 나머지 90%는 False인 불균형한 데이터 세트로 변형하고,
불균형한 데이터 세트에 모든 데이터를 False(0)으로 예측하는 Classifier 를 이용해 정확도를 측정하면 약 90%에 가까운 예측 정확도를 나타낸다.
 
1. 불균형한 데이터 세트와 Dummy Classifier 생성

 
2. 불균형한 데이터로 생성한 y_test의 데이터 분포도 확인 및 MyFakeClassifier를 통한 예측/평가 수행

▶ predict( )의 결과를 np.zeros( )로 모두 0값으로 반환함에도 불구하고 450개 테스트 데이터 세트에 수행한 예측 정확도는 90%이다.
 
이처럼 정확도 평가 지표는 불균형한 레이블 데이터 세트에서는 성능 수치로 사용해서는 안 된다.


오차 행렬(Confusion Matrix)

 
오차 행렬(혼동 행렬)은 학습된 분류 모델이 예측을 수행하면서 얼마나 헷갈리고 있는지도 함께 보여주는 지표이다.
▶ 이진 분류의 예측 오류가 얼마인지 + 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표
 

사이킷런은 오차 행렬을 구하기 위해 confusion_matrix( ) API 제공
 
[MyFakeClassifier의 예측 성능 지표를 오차 행렬로 표현]

출력된 오차 행렬은 ndarray 형태

▶ TN(array[0, 0]): 405 / FP([0,1]): 0 / FN([1,0]): 45 / TN([1,1]): 0

 예측 클래스
NegativePositive
실제 클래스 Negative TN
예측: Negative
실제: Negative

405개
FP
예측: Positive
실제: Negative

0개
Positive FN
예측: Negative
실제: Positive

45개
TP
예측: Positive
실제: Positive

0개

 
※ TP, TN, FP, FN 값을 조합해 Classifier의 성능을 측정할 수 있는 주요 지표인 정확도(Accuracy), 정밀도(Precision), 재현율(민감도, Recall) 값을 알 수 있다.
 
불균형한 이진 분류 데이터 세트에서는 Positive 데이터 건수가 매우 적기 때문에 데이터에 기반한 ML 알고리즘은 Positive 보다는 Negative 로 예측 정확도가 높아지는 경향이 발생한다.
결과적으로 정확도 지표는 비대칭한 데이터 세트에서 Positive 에 대한 예측 정확도를 판단하지 못한 채 Negative 에 대한 예측 정확도만으로도 분류의 정확도가 매우 높게 나타나는 수치적인 판단 오류를 일으키게 된다.


정밀도와 재현율

 
정확도는 분류 모델의 성능을 측정할 수 있는 한 가지 요소일 뿐이고, 정확도만으로는 모델 신뢰도가 떨어질 수 있어 정밀도(Precision)과 재현율(Recall)이 더 선호된다.
 

  • 정밀도 = TP / (FP + TP) : 예측을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율
  • 재현율 = TP / (FN + TP) : 실제 값이 Positive 인 대상 중에 예측값과 실제 값이 Positive 로 일치한 데이터의 비율

※ 재현율은 민감도(Sensitivity) 또는 TPR(True Positive Rate)라고도 불린다.
 
[재현율이 중요한 경우]
실제 Positive 인 양성 데이터를 Negative로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우
예. 실제 Positive 인 암환자를 양성이 아닌 음성으로 잘못 판단 / 금융 사기 적발 모델
 
[정밀도가 중요한 경우]
실제 Negative 음성 데이터 예측을 Positive 양성으로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우
예. 스팸 메일 여부 판단 모델의 경우 실제 Positive 인 스팸 메일을 Negative인 일반 메일로 분류 - 사용자가 불편함을 느끼는 정도이나, 반대의 경우에는 메일을 받지 못하여 업무에 차질이 생길 수 있다.
 
[오차 행렬 및 정밀도, 재현율을 모두 구해 예측 성능 평가]
사이킷런에서의 정밀도와 재현율의 API

  • 정밀도 계산: precision_score( )
  • 재현율 계산: recall_score( )

1. confusion_matrix, accuracy, precision, recall 등의 평가를 한 번에 호출하는 함수를 만든다

 
2. 로지스틱 회귀 기반으로 타이타닉 생존자 예측, 평가 수행(혼동 행렬, 정확도, 정밀도, 재현율)


다음글

[파이썬] 성능 평가 지표 - 2 (정밀도, 재현율)

728x90
반응형