본문 바로가기

Data Science/Machine Learning

[ML] Regression metric 과 Elastic net regression

반응형

이번 포스팅에서는 회귀(Regression) 모델의 성능을 평가하기 위한 메트릭에 대한 종류들을 비교해보면서 어떠한 용도로 쓰이는지 파악을 하는 내용에 대해 알아보자. 또한 회귀 모델 중 정규화(Regularization) 항을 추가한 2가지 모델 Lasso 회귀(L1 norm 적용)와 Ridge 회귀(L2 norm 적용)의 결합 버전인 Elastic net 회귀 모델에 대해서도 알아보자. 

 

회귀 모델을 측정하는 방법들 간에 어떤 차이가 있을까?

 

앞으로 소개할 목차는 다음과 같다.

1. MAE vs RMSE 

2. MAPE

3. MASE

4. Elastic net regression

1. MAE vs RMSE

MAE(Mean Absolute Error)와 RMSE(Root Mean Squared Error)는 아마 회귀 모델 성능을 평가하는 척도로 가장 자주 사용되는 대표적인 메트릭들이 아닐까 한다. 그럼 MAE와 RMSE의 차이점은 무엇일까? 결론부터 말하면 이 Error가 현실적이고 직관적인 에러인가 아니면 크기에 의존적인 에러(Scaled-dependent Error라고도 함)인가의 차이이다. 자세히 들여다보기 전에 우선 각 메트릭의 수식부터 살펴보자.

 

MAE vs RMSE 

 

두 메트릭이 의미하는 바는 위 수식과 같다. 하지만 수식으로 차이가 있을 뿐 의미적으로 어떤 차이가 있는지는 감이 잘 오지 않는다. 의미의 차이를 이해하기 위해 한 가지 쉬운 예시를 들어보자. 다음은 어떤 모델이 예측한 결과값과 정답에 대한 데이터이다.

 

어떤 모델이 예측한 예측값과 정답(Label)

 

그런데 갑자기 다음 데이터가 하나 들어왔는데 밑의 그림과 같이 매우 틀리게(에러가 큰) 예측했다고 가정해보자. 그래서 모델이 모든 데이터에 대한 예측값과 실제값에 대한 데이터는 다음과 같아진다.

 

매우 오분류한 데이터가 하나 추가로 들어왔다.

 

이제 빨간색 네모칸이 의미하는 '매우 큰 에러로 오분류 된 데이터'가 들어오기 전(before), 후(after)에 따라 MAE와 RMSE값이 어떻게 변화했는지 살펴보자.

 

각 메트릭이 어떻게 변했는지 살펴보자.

 

위 표를 보면 before일 때는 MAE와 RMSE값의 별다른 차이가 없었다. 하지만 매우 큰 에러로 오분류된 데이터가 들어온 후인 after 일 때 MAE와 RMSE값을 살펴보자. MAE 값은 약 18,333 이었다가 103,750으로 에러값이 증가했다. 그리고 RMSE는 18,484 이었다가 180,710으로 MAE가 증가한 폭에 비해 더 크게 에러값이 증가했다. 결국 오분류 데이터로 인해 에러값의 변동량이 RMSE가 더 크다는 것이다.

 

이는 결국 RMSE가 '매우 큰 에러로 오분류 된 데이터'에 큰 패널티를 부여했기 때문이다. 그렇다면 왜 패널티를 부여하는 것일까? 이유는 바로 예측 모델이 데이터를 학습할 때 에러가 큰 데이터(특이값)에 민감하지 않고 잘 학습하기 위함이다. 즉 에러에 Robust한 메트릭인 셈이다. 이렇게 RMSE와 같은 메트릭을 크기 의존적 에러, Scaled-dependent error 라고도 부른다.

 

추가적으로 RMSLE(Root Mean Squared Logarithmic Error)도 RMSE처럼 크기 의존적 에러라고 볼 수 있다. RMSLE의 Log를 사용하는 이유가 큰 에러에 패널티를 더 부여함으로써 결국 큰 에러에 민감하지 않게 하고 학습을 잘하도록 하기 위함이다. RMSLE의 수식에 대해서만 간단히 살펴보고 넘어가자.

 

RMSLE 수식

2. MAPE

Mean Absolute Percentage Errors로, 방금 살펴보았던 RMSE와 같은 크기 의존적 에러의 단점을 커버하기 위한 방법이다. 우선 공식부터 살펴보자.

 

MAPE의 수식

 

MAPE 수식의 가장 크게 두드러지는 특징은 노란색 네모칸 2개이다. 우선 오차값을 y값으로 나눈다. 이는 비율 상 같은 기준으로 비교가 가능하게 한다. 그리고 100값을 곱해 퍼센티지 단위로 만들어 준다. 하지만 MAPE는 y값(실제값)이 1보다 작다면 MAPE값이 무한대에 가까운 값이 나오거나 y값이 0이라면 MAPE 계산이 수학적으로 불가한 단점이 존재한다. 그래서 y값이 0에 근사한 값이 자주 나오는 연속적인 실수값을 갖는 데이터셋에는 적합하지 않다.

 

만약 MAPE 값이 3%가 나왔다면 실제값과 예측값 간의 차이가 3%정도 차이난다는 것을 의미한다. 단, 예측값이 실제값 보다 3% 만큼 높게(overestimate) 예측되었는지 낮게(underestimate) 예측되었는지는 알 수 없다. 단순히 비율로만 보여주기 때문이다. 

 

참고로 Scikit-learn 에서 MAPE 메소드를 제공하는데, %단위로 제공하는 것이 아닌 0과 100사이의 값으로 제공하기 때문에 계산해줄 때 100을 곱하는 것을 잊지말자.

3. MASE

Mean Absolute Scaled Errors로 크기가 조정된 에러(Scaled-errors)이다. 수식은 다음과 같다.

 

MASE의 수식

 

MASE의 특징은 예측값과 실제값의 차이인 오차를 평소에 움직이는 변동폭으로 나눈 값이라는 것이다. 즉, 현재값과 이전값과의 차이를 의미하는 변동에 비해 얼마나 오차가 차이가 나는지를 측정하는 기준이다. 주로 변동성이 큰 지표와 변동성이 낮은 지표를 같이 예측할 때 유용하다. MASE 메트릭을 언제 자주 사용되는지 Wikipedia에서 찾아보았는데 보통 계절성, 비계절성 시계열 데이터에서 자주 이용된다고 한다. 단, 데이터의 계절성 여부에 따라 MASE 공식의 분모의 변동폭이 달라진다는 점을 참고하자. 

 

출처: Wikipedia

4. Elastic net regression

Elatic net은 문두에도 언급했다시피 정규화 회귀 모델인 Ridge와 Lasso 모델의 결합 버전이라고 볼 수 있다. 정규화는 주로 모델의 오버피팅 문제를 예방하는 데 사용된다. Ridge는 L2 norm을 사용하며 회귀계수를 0이 아닌 0에 근접한 계수로 만들며 정규화를 적용하고 Lasso는 L1 norm을 사용하며 회귀계수를 0값으로 만들어 정규화를 적용하고 회귀계수를 0으로 만들어 아예 없애버리기 때문에 결과적으로 Feature Selection 효과가 있다. Elastic net은 이 2가지 정규화 항을 적당히 섞어 주어 만들어 주는 것이다. 

 

예시를 Scikit-learn의 ElasticNet 클래스를 가지고 간단히 살펴보자. 

 

import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import ElasticNet

boston = load_boston()
boston_df = pd.DataFrame(boston.data,
                        columns=boston.feature_names)
boston_df['PRICE'] = boston.target

y_target = boston_df['PRICE']
x_feature = boston_df.drop(columns=['PRICE'], inplace=False)

elastic_lr = Elastic(alpha=0.3, l1_ratio=0.7)
elastic_lr.fit(x_feature, y_target)

 

ElasticNet의 Parameter로 2가지 종류가 있는데, 하나씩 어떤 것을 의미하는지 살펴보자.

 

  • alpha : a + b를 의미. 여기서 a란, L1으로 얼마나 정규화시킬지의 값, b란, L2로 얼마나 정규화시킬지의 값을 의미
  • l1_ratio : "L1의 정규화값 / (L1의 정규화값 + L2의 정규화값)"을 의미. 만약 0.8이라면 8/10 이기 때문에 L1은 8만큼, L2는 2만큼 정규화시킴을 의미

# Reference

- data101.oopy.io/mae-vs-rmse

 

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

잔차가 현실적인 값으로 나타나는 MAE 말고, RMSE를 평가 지표로 쓰는 이유를 알고 싶다면

data101.oopy.io

- brunch.co.kr/@chris-song/34

 

Regression 모델 평가 방법

내 예측 모델이 맞춘 값이 얼마나 정확한 거지? | 이번 포스팅에선, 시계열 예측에서 자주 활용하는 Regression 데이터 예측 모델을 평가하는 법에 대해서 설명드리겠습니다. 우리가 예측 모델을 트

brunch.co.kr

 

반응형