본문 바로가기
R프로그래밍

R프로그래밍 - 회귀분석에서의 성능 지표 MSE, MAE, MAPE

by 미스터탁 2022. 5. 22.

머신러닝에서 y값이 실수 인 경우, 우리는 회귀 모형(linear regression)을 적합시킵니다. 이 때, 우리가 만든 회귀 모형의 성능 지표를 측정할 필요가 있습니다. 그래야, 어떠한 모델이 성능이 더 좋은지 판단하고 의사결정을 내릴 수 있기 때문입니다. 대표적인 회귀 모델의 성능지표로는 mean squared error(MSE)가 있습니다. 수식은 아래와 같습니다. 즉, 실제값에서 예측값을 뺀 오차에 제곱을 해서 평균을 낸 지표입니다. 이 값이 낮으면 낮을 수록 좋은 모델이라는 뜻이겠죠. 그러나 MSE의 경우에는 상대적인 비교만 가능해서 이 값이 얼마나 낮고 높은지 알 수가 없습니다. 예를 들어, A문제를 풀고자 할때 a의 모델이 MSE가 20,000이 나왔다라고 했을때, 이 값이 높은 것인지 낮은 것인지 알 수가 없습니다. 다른 모델은 30,000이상이 나왔을 수도 있습니다. 반면에, B문제를 풀고자 할때 b의 모델이 MSE가 10이 나왔다라고 해서, 이또한 이 값이 낮다고 말할수 없습니다. 다른 c모델은 MSE가 7이 나올수도 있기 때문이죠. 즉, MSE는 같은 문제내에서만 비교가 가능합니다. 

 

이 단점을 보완하기 위해서 나온 지표가 mean absolute error(MAE)와 mean absolute percentage error(MAPE)입니다. 수식은 각각 아래와 같습니다. MAE는 오차들의 평균 절대값이고, MAPE는 오차들을 실제값에 나누어서 백분위값으로 만든 지표입니다. MAE보다도 MAPE가 더 직관적이다라는 것을 알 수 있습니다. MAPE가 10%가 나왔다라고 하면, 실제값에서  +- 10%정도의 오차가 나는 구나 라는 것을 알 수 있습니다.  

 

 

R에서의 코드는 아래와 같습니다. 

observed <- c(13, 15, 15, 15, 14, 22, 25, 25, 23, 20, 22)
predicted <- c(12, 13, 13, 14, 15, 24, 24, 26, 22, 26, 24)

mean((observed-predicted)^2) # MSE
mean(abs(observed-predicted)) # MAE
mean(abs((observed-predicted)/observed)) * 100 # MAPE

 

실행화면은 아래와 같습니다. MAPE는 100을 곱했기 때문에 9%라고 해석하는게 맞습니다. 경우에 따라서 100을 빼고 0.098만 쓰는 경우도 있습니다.

 

수식을 쓰기 싫으신 분들은 패키지를 이용해서 쓸수도 있습니다. Metrics라는 패키지를 설치하고 라이브러리를 호출 해주신 다음 아래와 같이 사용하시면 됩니다. 

 

library(Metrics)
mse(observed,predicted)
mae(observed,predicted)
mape(observed,predicted)

 

결과 값은 아래와 같습니다. MAPE의 경우에는 100을 곱하지 않고 나온것을 알 수 있습니다. 

 

MSE의 단점때문에 MAPE를 많이 사용하기도 하지만, MSE자체도 성능지표로서 많이 사용을 합니다. 그 이유는 회귀모델은 MSE를 minimize하게 끔 학습이 되기 때문에 (즉, loss function 그 자체이기 때문에) 사용됩니다. 보통 실험 설계를 진행 할 때 MSE와 MAPE를 함께 사용하는 것을 권해 드립니다.

반응형

댓글