통계/머신러닝 MachineLearning

[ML] 회귀 모델 성능 평가 지표 개념과 파이썬 코드 (MAE,MSE,RMSE,R2,MAPE,MPE)

sseozytank 2022. 10. 13.

회귀모델을 만들면 이에 대한 평가가 필요한데, 관련 방법으론는 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)

 

댓글