🏘️

왜 직관적인 MAE 말고 RMSE를 쓰시나요

🌀
잔차가 현실적인 값으로 나타나는 MAE 말고, RMSE를 평가 지표로 쓰는 이유를 알고 싶다면
회귀 예측을 공부하다 보면 평가 지표에 대한 고민을 하게 됩니다.
이미 다양한 평가 지표들이 고안되어 있지만, 대표적으로 사용되는 것은 다음과 같습니다.
평가 지표들 보기 👀
그런데 처음 공부를 하다보면 왜 이렇게 많은 공식이 필요한지 잘 이해가 되지 않습니다.
이해를 돕기 위해 다음과 같은 예시 상황에서 머신러닝을 돌린다고 생각해봅시다.
제공 데이터 : 주택의 건설 연도 + 지하철 역과의 거리 + 주택 방의 개수 + 주택의 평수 🏠
회귀 예측 대상 : 주택의 거래가격 (집값) 💵
이러한 상황이라면, 회귀 예측값이 집값이므로 200,000($), 470,000($) 등으로 현실적인 값을 갖게 됩니다.
이때 "이 모델을 쓰면 집값 계산에 있어서 200$ 달러 정도 틀리는군. 예산에 ± 200달러 정도는 각오 해야겠어"
라는 직관적인 판단을 할 수 있는 평가 지표를 쓰면 좋지 않을까요?
이럴 땐 MAE
평가지표 MAE 는 Mean (평균) Absolute (절대값) Error (잔차) 라는 의미로
잔차값 (예측값과 실제값 간의 차이. 즉, 모델이 예측을 얼마나 틀렸는가) 을 절대값 취하고 평균 낸 것입니다.
차이에는 +도 - 도 존재할 수 있어서 절대값을 씌웁니다.
위 표를 통해서라면 이 모델이 평균 25,200$ 씩 틀리는 모델이라는 걸 알 수 있습니다.
그러나 다른 대표적인 평가 지표 중 하나인 RMSE를 쓰면 잔차 계산이 조금씩 난해해집니다.
RMSE 공식은 아래와 같으며, 파이썬 코드는 sklearn 패키지를 통해 구성할 수 있습니다.
RMSE=1Ni=1N(yiy^i)2RMSE = \sqrt{ \frac{1}{N}\sum_{i=1}^{N} (y_i - \hat{y}_i)^2}
from sklearn.metrics import mean_squared_error # sklearn은 mse만 지원하기 때문에 rmse와 rmsle는 직접 만들어야 합니다. # y_preds는 예측값들이 담긴 데이터, y_test는 실제값 데이터들입니다. rmse = np.sqrt(mean_squared_error(y_test, y_preds)) # MAE 는 다음과 같이 코딩합니다. from sklearn.metrics import mean_absolute_error mae = mean_absolute_error(y_test, y_preds)
Python
RMSE의 계산식을 뜯어보면, MAE와 비슷하면서도 다릅니다.
잔차를 제곱하고 루트를 씌우면 어차피 절대값 잔차와 결과가 같으니까요.
단, 다른 점이라면
1.
잔차를 제곱하고 다 더한 뒤 루트를 씌웠다는 점
→ 한번에 이해가 잘 안 가시죠? 특징에 대해서는 후술합니다.
2.
평균을 낼 때 1n1 \over n 처리를 하는 게 아니라 1n1 \over \sqrt{n} 처리를 한다는 것
→ 분모에 nn보다 더 작은 n\sqrt{n} 을 썼고, 분모가 작아지니 총 결과는 일반적인 평균(MAE)보다 커집니다.
그 결과 다음과 같은 차이가 발생합니다.
25,200에서 27,228로 약 2,000정도 커짐.
RMSE로 구한 에러값 27228을 통해 "이 모델은 27,228$ 만큼 틀리는 모델이다"라고 표현할 수 없습니다.
이미 실생활에서 쓰는 계산법을 벗어났기 때문입니다.
그렇다면 왜 직관적이고 좋은 MAE가 아닌 RMSE를 쓰는 것일까요? 🤔
결론부터 말하자면, RMSE는 "큰 오류값 차이에 대해서 크게 패널티를 주는" 이점이 있기 때문입니다.
위 집값 맞추기 예시에서 한 가지 케이스를 추가해보면 이해가 빠릅니다.
4번째 집값 데이터 추가되었습니다. 다른 데이터와는 달리 깡패 수준의 스케일을 갖고 있다고 가정해봅시다.
가격부터 약 40배를 훌쩍 넘는 그런 데이터입니다. (현실에서도 이런 사례는 종종 발생하지요)
모델은 나름 최선을 다해서 가격을 예측했으나, 잔차(차이)는 4백만$ 수준이 나와버렸습니다.
이런 현상을 "큰 오류값이 났을 때" 라고 볼 수 있겠습니다.
이때 집값을 3개만 예측했을 때와 큰 오류값이 추가됐을 때 MAE와 RMSE의 비율을 비교해봅시다.
MAE가 약 2%의 비율을 가질 때 RMSE는 절반 수준인 1.11%를 갖게 됩니다.
큰 오류가 나타났어도, RMSE는 제법 방어를 잘 해냈다고 이해하면 됩니다.
이는 RMSE가 MAE 와의 차이 중 첫번째였던, "잔차를 제곱하고 다 더한 뒤 루트를 씌웠다는 점" 을 통해 큰 오류값에 패널티를 크게 주었기 때문에 가능하죠.
머신러닝의 '학습'에 있어서는 이러한 특이값에 휘둘리지 않는 게 굉장히 중요한 덕목입니다.
RMSE는 MAE에 비해 직관성은 떨어지지만, 로버스트한 성격(=극단적이지 않은)에서 강점을 보인다고 정리할 수 있습니다.
이러한 맥락에서 볼 때, RMSLE 가 왜 사용되는지 역시 이해할 수 있습니다.
RMSLE란 RMSE 계산에 Log 를 취하는 절차를 더 해서
큰 값이 계산 전체에 지나친 영향을 미치지 못하게 제어하는 것입니다.
집값이 2,700$인 데이터와 2,700,000$인 데이터가 섞이면 그 차이는 10배나 되지만,
로그를 씌운 값(y축) 은 그렇게 큰 차이가 나지 않는다는 걸 알 수 있습니다.
*자주 쓰이는 머신러닝 전처리 기법 중 하나인 로그변환 역시 이러한 맥락에서 사용되는 것입니다.
🙋‍♂️ 김문과의 데이터
직접 공부한 데이터 분석 · 활용법을 기록합니다.
포스팅에 대한 Q&A 및 다양한 논의를 기다립니다.
contact : 우하단 메신저 버튼 or e-mail
Today