회귀모델을 만들면 이에 대한 평가가 필요한데, 관련 방법으론는 MAE , MSE, RMSE,RMSE, R2, MAPE 등이 있다.
MAE (Mean Absolute Error) 평균 절대 오차
MAE | 모든 절대 오차의 평균 |
언제? | 약간의 이상치가 있을 때 그 이상치의 영향을 적게 받으면서 모델을 만들고자 할 때, MAE를 보며 판단 |
판단 | 값이 낮을수록 좋다. |
단점 | 실제 정답보다 낮게 예측한 것인지 , 높게 예측한지는 알 수 없고 , 스케일에 영향을 받는다. |
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test, y_pred)
MSE (Mean Squared Error) 평균 절대 오차
MSE | (정답값 - 예측값)^2 의 평균 |
언제? | 이상치에 굉장히 민감하기 때문에 , 현실 세계에서 마주하는 데이터에서는 악영향을 끼칠 것이다. 따라서 교과서 같은 데이터에 적용하는 것이 좋다. |
판단 | 값이 낮을수록 좋다. |
단점 | 이상치에 민감하다. 오차에 제곱을 취하기 때문에 오차가 0과 1사이인 경우에 MSE에서 그 오차는 본래보다 더 작게 반영되고, 오차가 1보다 클 때는 본래보다 더 크게 반영된다. |
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test, y_pred)
RMSE (Root Mean Squared Error) 평균 절대 오차
RMSE | 루트 (MSE) , 에러를 제곱한 왜곡을 줄임 |
언제? | - 에러에 따른 손실이 기하급수적으로 올라가는 상황 - 그 모델이 이 그룹을 얼마나 잘 커버하고 있는지를 파악하는 지표 |
판단 | 값이 낮을수록 좋다. |
단점 | - MSE의 단점을 어느정도 보완했지만 실제 정답보다 낮게 예측했는지, 높게 했는지를 파악할 수 없음 - 스케일 의존적 |
from sklearn.metrics import mean_squared_error
MSE = mean_squared_error(y_test, y_pred)
np.sqrt(MSE)
R2 (R-Squared) 결정 계수
R-Squared | 회귀 모델에서 독립변수가 종속변수를 얼마만큼 설명해 주는지를 가리키는 지표 |
언제? | - 종속변수를 예측할 때 쓰면 좋다. (이때만 써야한다는 것이 아니라 특히 좋은 경우!) *사회과학 모형은 시계열, 패널 데이터가 아닌 이상 결정계수가 낮을 가능성이 큰데, 모형을 잘 설정하고 적절한 추정방법을 사용했다면 R2가 작더라도 낙담할 필요없다. (나무위키) |
판단 | 높을수록 좋다. 0.3이면 독립변수가 종속변수의 30%정도를 설명한다고 이야기할 수 있다. (몇 퍼센트를 넘어야 한다는 기준 같은 것은 없음) |
단점 | 실제 정답보다 낮게 예측한 것인지 , 높게 예측한지는 알 수 없고 , 스케일에 영향을 받는다. |
from sklearn.metrics import r2_score
r2_score(y_test, y_pred)
MAPE (Mean Absolute Percentage Error)
MAPE | - MAE를 퍼센트로 변환 - RMSE와 같은 크기 의존적 에러의 단점을 커버하기 위한 방법 |
판단 | 만약 MAPE 값이 3%가 나왔다면 실제값과 예측값 간의 차이가 3%정도 차이난다는 것을 의미한다. 단, 예측값이 실제값 보다 3% 만큼 높게(overestimate) 예측되었는지 낮게(underestimate) 예측되었는지는 알 수 없다. 단순히 비율로만 보여주기 때문이다. ( https://techblog-history-younghunjo1.tistory.com/143) |
단점 | MAE와 동일 |
def MAPE(y_test, y_pred):
return np.mean(np.abs((y_test - y_pred) / y_test)) * 100
MAPE(y_test, y_pred)
MPE (Mean Percentage Error)
MPE | MAPE에서 절대값을 제외한 지표 |
언제? | 모델이 (-)performance인지 (+)performance인지 판단 |
def MPE(y_test, y_pred):
return np.mean((y_test, y_pred) / y_test) * 100
MPE(y_test, y_pred)
'통계 > 머신러닝 MachineLearning' 카테고리의 다른 글
[ML] 주성분 분석 PCA와 차원의 저주 (1) | 2023.11.20 |
---|---|
[ML] ChatGPT로 알아보는 LightGBM (0) | 2023.05.12 |
[ML] Target Leakage / Data Leakage (데이터 누수) (0) | 2023.03.03 |
[ML] 지도학습, 비지도학습, 강화학습 (1) | 2022.11.28 |
댓글