머신러닝을 공부하신 분들이라면 회귀 평가지표 MAE, MSE, RMSE를 한번쯤 다 들어보셨을텐데요
개념은 무수히 많이 들었지만 남들이 물어봤는데 각 지표의 의미가 헷갈린다면
이번에 꼭 한번 정리하고 넘어가시길 바래요! 😉
평가지표를 알아봄에 앞서서, 왜 평가 지표가 필요한지 부터 고민해봅시다.
모델을 만들고 예측값까지 나왔는데 이게 잘된건지, 엉터리 값이 나왔는지 판단할 수 있는 성적표가 있어야겠죠?
그렇다면 예측을 했으니 실제값과 비교해서 얼마나 잘 했는지 ==> (예측값-실제값) = 잔차 = residual 을 중심으로
잘했는지 못했는지 보기 위해서 나온 지표들이 바로 아래의 MSE, RMSE, MAE 지표입니다!!
요약한 영어라서 더 낯설게 느껴질 수도 있는데요
각 단어를 풀어 써서 아래의 식과 대입해서 생각해보면 이해가 쉬워집니다
저는 이 이름을 뒤에서 부터 읽으면 식을 연상하기가 훨씬 쉬웠는데요
- MSE (Mean + Squared + Error)
- RMSE (Root + Mean + Squared + Error)
- MAE (Mean+Absolute+Error)
- MAPE (Mean + Absolute + Percentage(자차가 실제값에서 차지하는 비율) + Error)
예를 들어서 MSE는 Error (잔차)를 Squared(제곱)한 값들을 Mean(평균)을 냈구나 생각하면 됩니다
사실 형태는 조금씩 다르지만 회귀예측이 얼마나 잘 됐는지 볼께! 라는 목적은 같죠
그러면 각 지표가 어떤 차이가 있는지 보겠습니다
MSE, RMSE | - 잔차들을 평균낸다는 개념이 강한만큼 이상치(Outlier)에 대해 더 민감함 - 루트 처리가 된만큼 RMSE가 해석하기는 더 용이함 - RMSE가 보편적으로 사용됨 - MSE 는 분산과 편향이 평가에 반영됨 특징을 지님 * |
MAE | - 전체 잔차들의 중간값을 구한다는 개념이 강해 이상치에 대해 덜 민감함 |
MAPE | - MAE 대비 정규화되어 있음 |
**MSE = 분산 + 편향**2 으로도 표현이 가능한데요. 어떻게 이런 표현이 가능한지 아래 식을 통해 도출가능합니다
개념을 봤으니 이를 실제 어떻게 구현할 수 있는지 알아보겠습니다.
👍 회귀지표 구현 방법
사이킷런에서는 이러한 예측에 대한 평가지표를 활용할 수 있는 방식을 3가지를 제공합니다
1) 각 예측모델에 포함된 score 메서드
2) cross_val_score혹은 GridSearchCV에 사용가능한 scoring 파라미터 설정
3) sklearn.metrics
(자세한 설명은 https://scikit-learn.org/stable/modules/model_evaluation.html 를 참고바랍니다)
1번은 모델을 다 다루기는 어렵기 때문에 3번부터 일단 보겠습니다.
1. MAE 구현방법
sklearn.metrics.mean_absolute_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')
y_true에 타겟값, y_pred에 예측값을 넣습니다
>>> from sklearn.metrics import mean_absolute_error
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> mean_absolute_error(y_true, y_pred)
0.5
2. MSE 구현방법
sklearn.metrics.mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', squared=True)
>>> from sklearn.metrics import mean_squared_error
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> mean_squared_error(y_true, y_pred)
0.375
3. RMSE 구현방법
RMSE는 위의 MSE 를 응용한 버전으로 사용이 가능합니다.
>>> mean_squared_error(y_true, y_pred)**0.5
>>>> np.sqrt(mean_squared_error(y_true, y_pred))
두 방식 중 어느 것을 사용해도 사실 상관 없습니다! 단지 MSE의 값에 루트를 씌워주는거니까요
4. MAPE 구현방법
sklearn.metrics.mean_absolute_percentage_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')
>>> from sklearn.metrics import mean_absolute_percentage_error
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> mean_absolute_percentage_error(y_true, y_pred)
0.3273...
2번째 방식인 교차검증 파라미터 Scoring 을 보겠습니다.
sklearn.model_selection.cross_val_score
sklearn.model_selection.cross_val_score(estimator, X, y=None, *, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', error_score=nan)
cross_val_score 교차검증을 기본으로 한 모델의 적용 결과값을 효과적으로 볼 수 있는 기능인데요
이 파라미터들 중에 scoring에 아래 평가지표별 해당하는 파라미터를 입력하면 됩니다
평가지표 | Scoring 파라미터명 |
MAE | neg_mean_absolute_error |
MSE | neg_mean_squared_error |
RMSE | neg_root_mean_squared_error |
MAPE | neg_mean_absolute_percentage_error |
여기서 파라미터명 앞에 neg 라는 이름이 붙어있는데요, 즉 값이 음수로 반환된다는 애기입니다.
따라서 점수를 볼때 -1을 곱해줘야 우리가 찾는 점수를 볼 수 있습니다.
References:
https://scikit-learn.org/stable/modules/model_evaluation.html
https://www.kaggle.com/discussions/getting-started/52081
'Data Science > Machine Learning' 카테고리의 다른 글
StackingCVRegressor 개념 및 활용방법 정리 (0) | 2022.10.31 |
---|---|
ColumnTransformer 피처 이름 데이터프레임 전달 방법 (0) | 2022.10.28 |
K-Nearest Neighbors 최근접 이웃 알고리즘 정리 A-Z (0) | 2022.10.19 |
Train , Test 데이터 전처리를 위해 병합하는 방법 정리 ! (0) | 2022.10.13 |
카테고리형 데이터가 많을 시 고려사항 😮 (0) | 2022.10.13 |
댓글