회귀 모델 성능 평가 지표

J. Hwang·2024년 8월 12일
0

Previously...

https://velog.io/@kupulau/머신-러닝-성능-평가-지표
https://velog.io/@kupulau/머신-러닝분류의-성능-평가

위와 같이 머신 러닝 성능 평가에 대한 포스팅을 한 적 있지만, 사용하는 모델의 종류에 따라 사용하는 성능 평가 지표가 달라질 수 있다. 크게는 회귀 모델 유형과 분류 모델 유형이 있는데, 이번 포스팅에서는 특히 회귀 모델의 성능 평가 지표에 대해서 알아보자.


MAE (Mean Absolute Error)

MAE (평균 절대 오차) 는 실제 값과 예측 값 차이의 절대값의 평균이다.

MAE=i=0NytrueymodelNMAE = \displaystyle\frac{\sum_{i=0}^{N} |y_{true} - y_{model}|}{N}


MSE (Mean Squared Error)

MSE (평균 제곱근 오차) 는 실제 값과 예측 값의 차를 제곱한 값의 평균이다.

MSE=i=0N(ytrueymodel)2NMSE = \displaystyle\frac{\sum_{i=0}^{N} (y_{true} - y_{model})^{2}}{N}

scikit-learn에서 MSE를 계산하는 기능을 제공한다.

from sklearn.metrics import mean_squared_error

# y_true = 실제 값
# y_model = 예측 값
mse = mean_squared_error(y_true, y_model, squared=True)

RMSE (Root Mean Squared Error)

RMSE (평균 제곱근 편차) 는 MSE에 \sqrt{}를 씌운 것이다. MSE가 값을 제곱하기 때문에, 실제 오류 평균보다 값이 커지므로 이를 줄이기 위한 것이다.

RMSE=i=0N(ytrueymodel)2NRMSE = \sqrt{\displaystyle\frac{\sum_{i=0}^{N} (y_{true} - y_{model})^{2}}{N}}

scikit-learn에서 RMSE를 계산하는 기능을 제공한다. 함수는 MSE의 경우와 같고, squared 옵션을 False로 바꾸면 된다.

rmse = mean_squared_error(y_true, y_model, squared=False)

RMSLE (Root Mean Squared Log Error)

RMSLE (평균 제곱근 대수 오차) 는 RMSE에 자연 로그를 취한 형태이다.

RMSLE=i=0N(ln(ytrue+1)ln(ymodel+1))2NRMSLE = \sqrt{\displaystyle\frac{\sum_{i=0}^{N} (ln(y_{true}+1) - ln(y_{model}+1))^{2}}{N}}

scikit-learn에서 RMSLE를 계산하는 기능을 제공한다. 다만 아래 함수 자체는 mean squared log error를 계산하는 것이므로, 별도로 square root를 씌워줘야 한다.

from sklearn.metrics import mean_squared_log_error
import numpy as np

rmsle = np.sqrt(mean_squared_log_error(y_true, y_model))

RMSE vs RMSLE

  • RMSE는 RMSLE에 비해 데이터의 outlier의 영향을 크게 받는다.
  • RMSLE는 상대적인 에러를 계산한다.
  • RMSLE는 underestimate 되었을 때 (= 예측값 < 실제값) 더 큰 페널티를 부여한다.

결정 계수 R2R^2

결정 계수(Coefficient of determination)는 모델이 종속 변수의 변동성을 얼마나 잘 설명하는지를 나타내는 지표이다. 0 ~ 1 사이의 값을 가지며, 1에 가까울 수록 모델이 데이터를 잘 설명한다고 할 수 있다. 여러 모델의 성능을 비교할 때 유용하다. (여기서 ymeany_{mean} 은 true의 평균)

R2=1i=1n(yi,trueyi,model)2i=1n(yi,trueyi,mean)2R^2 = 1 - \frac{\sum_{i=1}^{n} (y_{i, true} - y_{i, model})^2}{\sum_{i=1}^{n} (y_{i, true} - y_{i, mean})^2}

분자는 오차 제곱합 (Sum of Squared Errors)으로, 모델이 실제 데이터를 얼마나 잘 맞췄는지를 나타내고 분모는 총 변동 (Total Sum of Squares)으로 데이터가 평균으로부터 얼마나 흩어져있는지를 나타내는 것이다.

결정 계수는 이상치(outlier)에 민감하고, 비선형 관계를 잘 설명하지 못한다는 한계가 있다.


References

https://www.kaggle.com/code/carlolepelaars/understanding-the-metric-rmsle
https://ahnjg.tistory.com/90

profile
Let it code

0개의 댓글