머신러닝 모델은 여러 가지 방법으로 예측 성능을 평가할 수 있습니다. 성능 평가 지표(Evaluation Metrics)는 일반적으로 모델이 분류냐 회귀냐에 따라 여러 종류로 나뉩니다.
회귀의 경우 대부분 실제값과 예측값의 오차 평균값에 기반합니다. 예를 들어 오차에 절댓값을 씌운 뒤 평균 오차를 구하거나 오차의 제곱 값에 루트를 씌운 뒤 평균 오차를 구하는 방법과 같이 기본적으로 예측 오차를 가지고 정규화 수준을 재가공하는 방법이 회귀의 성능 평가 지표 유형입니다.
분류의 평가방법도 일반적으로는 실제 결과 데이터와 예측 결과 데이터가 얼마나 정확하고 오류가 적게 발생하는가에 기반하지만, 단순히 이러한 정확도만 가지고 판단했다가는 잘못된 평가 결과에 빠질수 있습니다. 특히 0과 1로 결정값이 한정되는 이진 분류의 성능 평가 지표는 정확도보다는 다른 성능 평가 지표가 더 중요시되는 경우가 많습니다.
분류의 성능 평가 지표로는
- 정확도(Accuracy)
- 오차행렬(ConfusionMatrix)
- 정밀도(Precision)
- 재현율(Recall)
- F1 Score
- ROC AUC
가 있습니다.
정확도 (Accuracy)
정확도는 실제 데이터에서 예측 데이터가 얼마나 같은지를 판단하는 지표입니다.
정확도(Accuracy) = 예측 결과가 동일한 데이터 건수 / 전체 예측 데이터 건수
정확도는 직관적으로 모델 예측 성능을 나타내는 평가 지표입니다. 하지만 이진 분류의 경우 데이터의 구성에 따라 ML모델의 성능을 왜곡할 수 있기 때문에 정확도 수치 하나만 가지고 성능을 평가하지 않습니다.
정확도를 평가 지표로 사용할 때는 매우 신중해야 하는데요. 불균형한(inbalanced) 레이블 값 분포에서 ML모델의 성능을 판단할 경우, 적합한 평가 지표가 아닙니다. 예를 들어 100개의 데이터가 있고 이 중에 90개의 데이터 레이블이 0, 단 10개의 데이터 레이블이 1이라고 한다면 무조건 0으로 예측 결과를 반환하는 ML모델의 경우라도 정확도가 90%가 됩니다.
다시 한번 강조하지만 불균형한 레이블 데이터 세트에서는 성능 수치로 사용돼서는 안 됩니다. 정확도가 가지는 분류 평가 지표로서 이러한 한계점을 극복하기 위해 여러 가지 분류 지표와 함께 저용해야 합니다.
[유사한 내용 추가]
오차 행렬 (Conusion Matrix)
* 추가설명, 매우 명확하게 잘 설명이 되어 있어 옮겨왔습니다. 출처 [이곳]이며 내용을 좀 더 간단하게 정리하였습니다.
항상 헷갈릴 수 있는 Confusion Matrix 부터 AUC, ROC Curve에 대해서 설명해드리고자 합니다.
모델을 예측할 때 예측에 대한 성능을 다양한 척도(Metric)로 평가하고 있으며 아래와 같은 내용들이 있습니다.
Regression
- RMSE / MSE / logloss
Classification
- Accuracy / f1-score
1. Confusion Matrix
먼저 다음의 그림을 보겠습니다.
보시는 그림은 Confusion Matrix라고 불리는 행렬입니다. 간단해보이면서 간단하지 않은 이 혼돈행렬을 통해서 여러 지표들을 검증해볼 것입니다.
표 내부에 있는 단어들을 손쉽게 설명을 드리면..(설명의 편의성을 위해서 환자다 / 환자가 아니다 로 설명드리겠습니다.)
- Actual(Positive) : 실제 환자
- Actual(Negative) : 실제 환자가 아님
- Predict(Positive) : 실제 환자로 예측
- Predict(Negative) : 환자가 아닌 것으로 예측
이번엔 각각의 교차된 지표에 대해서 설명드리겠습니다. 이 부분은 앞의 단어를 성공/실패 뒤의 단어를 긍정예측/부정예측 이라고 생각하시면 생각하시기 쉬울겁니다!
- TP(True Positive) : 긍정예측을 성공 즉, 환자라고 예측해서 실제 환자임을 맞춤
- TN(True Negative) : 부정예측을 성공 즉, 비환자라고 예측하여 실제 비환자임을 맞춤
- FP(False Positive) : 긍정예측을 실패 즉, 환자라고 예측했지만 비환자임
- FN(False Negative) : 부정예측을 실패 즉, 비환자라고 예측했지만 실제 환자임
그럼 다음으로 넘어가 여러 Metric에 대하여 탐색해보겠습니다.
2. Metric
지표의 종류는 위에서 언급한 것처럼 꽤 많으니 지금부터는 잘 따라오셔야 합니다.
2-1. Accuracy
Accuracy는 정확도로 전체 예측한 것 중에 올바른 예측을 얼마나 했는지를 지표로 구하는 것입니다. 따라서 수식으로 나타내면
이와 같이 Accuracy값을 구할 수 있고 Accuracy값이 높을수록 예측 정확도가 높다고 할 수 있습니다.
여기서 좀 더 파생하여 전체 예측중에 잘 예측한 지표를 구했다면 (1 - 잘 예측한 것) = 잘 못 예측한 것 인 것을 알 수 있습니다.
그래서 Error Rate를 도출할 수 있는데요 에러율을 도출하는 공식은 Error Rate = 1 - Accuracy로 나타낼 수 있습니다.
하지만 Accuracy는 편향의 함정에 빠질 수 있습니다.
만일 단일 모델이 실제로 긍정인 것만 예측을 잘하고 부정인 것은 예측을 잘하지 못한다면 좋은 모델이라고 할 수 있을까요?
단편적으로 Accuracy만 봤을 때 좋은 값이 도출될 수 있지만 실제로 부정인 것은 예측을 잘 못하기 때문에 좋은 모델이라고 선언하기는 힘들 것 같습니다. 이러한 결과가 도출되는 것은 데이터가 불균형(imbalanced)하기 때문에 벌어지는 상황인데요.
이렇게 데이터가 불균형하다면 측정할 수 있는 방법은 없을까요?
바로 F1 Score로 측정하는 것인데요. 이따 밑에서 확인해보겠습니다. 여러분들이 기억하실 내용은 Accuracy를 평가 척도로 사용한다면 균형(Balanced) 데이터에서 사용하시길 권유드립니다.
2-2. Sensitivity
Sensitivity는 민감도(Recall)로 True Positive Rate로 실제 Positive를 얼마나 잘 예측했는지를 나타내는 지표입니다. 그리고 보통 행방향으로 Input class에 대하여 분류기가 어떻게 class로 예측했는지를 나타냅니다.
그래서 수식을 살펴보면
실제 환자에 대해서 환자라고 예측하고, 환자가 아니다라고 예측한 것에 대한 실제 환자를 예측한 비율을 나타냅니다.
정확도랑 마찬가지로 실제 환자를 환자로 예측하는 비율로 민감도가 높을수록 좋은 척도라고 할 수 있습니다. 민감도는 후에 AUC를 구할 때 중요한 척도로써 사용되니 꼭 기억해주시길 바랍니다.
2-3. Precision
Precision은 정밀도로 긍정으로 예측한 것 중 실제로 맞춘 비율을 보여줍니다. 즉, 환자가 맞다고 예측하여 실제로 환자인 경우와 환자가 아닌 경우에 대비한 실제로 환자임을 맞춘 것을 나타냅니다. 또한 정밀도는 열방향으로써 예측한 값들 중에서 얼마나 잘 예측했는지를 나타내는 척도입니다.
수식을 살펴보자면
이와 같이 정밀도는 Positive로 예측한 것 중 실제로 Positive가 얼마나 되는지를 보여주는 지표로써 후에 얼마나 정밀한 지표측정인지를 나타낼 수 있습니다.
2-4. Specificity
Specificity는 특이도로 실제 Negative를 얼마나 잘 예측했는지를 나타내는 지표입니다. 즉, 환자가 아닌 사람을 환자가 아니다라고 얼마나 잘 예측하는지 보여주는 척도로써 수식은 다음과 같습니다.
특이도를 통해서 False Positive Rate를 구할 수 있는데 이는 환자가 아닌데 환자라고 예측하는 경우로써 False Positive Rate = 1 - Specificity 로 나타낼 수 있습니다. 1 - 특이도도 또한 AUC를 산출하는 과정에서 중요한 지표로써 작용하니 참고해주시길 바랍니다.
2-5. F1 Score
F1 Score는 보통 불균형 분류문제에서 평가척도로 주로 사용됩니다. 데이터가 불균형한 상태에서 Accuracy로 성능을 평가하기엔 데이터 편향성이 너무 크게 나타나 올바르게 성능을 측정하기 힘들게 됩니다. 그렇기 때문에 F1 Score를 평가척도로 사용합니다.
그렇다면 왜 불균형 데이터 상태에서는 F1 Score를 이용할까요?
위에서 설명한 Sensitivity와 Precision을 이용하여 조화평균을 구하여 평가 척도를 구성했기 때문인데요.
다음의 그림을 보겠습니다.
두개 값의 크기가 서로 다른 형태를 나타내고 있는 불균형 상태이지만 이를 조화평균 함으로써 큰 값의 크기에 대한 가중치를 낮추고 작은 값에 더 맞춰주는 과정을 거쳐서 불균형 데이터일지라도 값의 크기 차이가 어느정도 상쇄되기 때문에 F1 Score는 불균형 데이터에서의 주요 척도로써 사용되고 있습니다.
수식은 다음과 같습니다.(Sensitiviy는 Recall(재현도)와 같습니다.)
따라서 아무리 input class가 Positive에 맞춰져 있어 모델이 긍정에 대한 예측이 강한 분류기로 만들어질지라도 F1 Score로 평가 척도를 구해서 올바르게 분류가 되었는지 성능을 측정할 수 있습니다.
지금까지는 Confusion Matrix(혼돈행렬)에 대해서 살펴보고 데이터의 균형도에 따라서 측정 Metric가 다를 수 있다는 점에 대해서도 배웠습니다.
'Lecture ML' 카테고리의 다른 글
머신러닝 강좌 #11] 분류(Classification)의 개요 (0) | 2021.05.24 |
---|---|
머신러닝 강좌 #10] 피마 인디언 당뇨병 예측 실습과 마무리 (0) | 2021.05.24 |
머신러닝 강좌 #9] 머신러닝 모델 성능 평가 - F1, ROC-AUC (0) | 2021.05.24 |
머신러닝 강좌 #8] 머신러닝 모델 성능 평가 - 정밀도(Precision), 재현율(Recall) (0) | 2021.05.21 |
머신러닝 강좌 #6] 타이타닉 생존자 예측 실습 (0) | 2021.05.19 |
머신러닝 강좌 #5] 피처스케일링 (표준화 / 정규화) / StandardScler, MinMaxScaler (0) | 2021.05.17 |
머신러닝 강좌 #4] 데이터 전처리 - 레이블 인코딩, 원-핫 인코딩 (0) | 2021.05.15 |
머신러닝 강좌 #3] GridSearchCV - 교차 검증과 최적 하이퍼 파라미터 튜닝을 한 번에 (0) | 2021.05.15 |