zenn.skin 무료버전 배포중!
자세히보기

DataScience

[ML] 회귀모형의 평가지표, MAE, MSE, RMSE, RSE, R^2

koosco! 2022. 8. 23. 04:40

회귀모델을 평가하는 평가지표는 여러 가지가 있습니다.

목차
1.1. MAE(Mean Absolute Error, 평균 절대 오차)
2.2. MSE(Mean Squared Error, 평균제곱오차)
3.3. RMSE(Root Mean Squared Error, 제곱근 평균제곱오차)
4.4. RSE(Residual Standard Error, 잔차 표준오차)
5.5. R^2(결정계수, Coefficient of determination)

1. MAE(Mean Absolute Error, 평균 절대 오차)

  • 데이터의 단위와 동일하기 때문에 해석이 직관적이라는 장점이 있습니다.
  • MSE에 비해 이상치의 영향을 덜 받습니다.
  • 절대값을 취하기 때문에 모델이 underperformance인지, overperformance인지 알 수 없습니다.
    • underperformance: 모델이 실제보다 낮은 값으로 예측
    • overperformance: 모델이 실제보다 높은 값으로 예측
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

lr = LinearRegression()
lr.fit(input, target)
fitted = lr.predict(input)
MAE = mean_absolute_error(target, fitted)
print(f'MAE: {MAE:.0f}')

위와 같이 모델을 학습한 후에, 모델의 예측값과 실제 데이터값을 비교하여 MAE를 계산할 수 있습니다.

2. MSE(Mean Squared Error, 평균제곱오차)

  • MAE와 다르게 모델의 예측값이 실제값 차이의 제곱입니다. 따라서 이상치가 있을 때 MSE의 값이 크게 늘어납니다.
  • MAE에 비해 이상치의 영향을 많이 받습니다.
  • 데이터의 단위와 다르기 때문에 제곱근을 사용한 RMSE를 사용하여 데이터 단위로 변환해주어야 합니다.
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

lr = LinearRegression()
lr.fit(input, target)
fitted = lr.predict(input)
MSE = mean_squared_error(target, fitted) # target 데이터와 단위가 다르기 때문에 제곱근을 취해준 RMSE를 사용해야 한다

3. RMSE(Root Mean Squared Error, 제곱근 평균제곱오차)

  • 회귀모형을 평가할 때 가장 널리 사용되는 측정 지표입니다.
  • 데이터의 단위와 동일하게 변환하여 해석을 직관적으로 할 수 있습니다.
import numpy as np

RMSE = np.sqrt(MSE)
print(f'RMSE: {RMSE:.0f}')

4. RSE(Residual Standard Error, 잔차 표준오차)

  • RMSE와 동일하지만 분모가 데이터 수가 아닌 자유도라는 차이점이 있습니다.
  • 예측 변수가 p개일 때의 자유도는 n - p - 1 입니다.
  • 선형회귀분석을 할 때, RMSE와 RSE의 차이는 아주 작습니다.
  • 빅데이터 분야에서는 둘의 차이가 더욱 작습니다.
import numpy as np

def RSE(y_true: np.ndarray, y_predicted: np.ndarray) -> float:
    RSS = np.sum(np.square(y_true - y_predicted))
    
    rse = np.sqrt(RSS / (len(y_true) - 2))
    return rse

5. R^2(결정계수, Coefficient of determination)

  • 0 ~ 1까지의 값을 가집니다.
  • 값이 1에 가까울수록 데이터의 설명력을 잘 보여줍니다.
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

lr = LinearRegression()
lr.fit(input, target)
fitted = lr.predict(input)

r2 = r2_score(target, fitted)
print(f'r2: {r2:.4f}')

회귀문제에서는 보통 RMSE를 선호하지만, 상황에 맞게 다른 방식을 사용해야 합니다. 이상치가 많은 경우에는 RMSE보다는 MAE를 사용하는 것이 좋습니다.

 

 

참고

https://kimmaadata.tistory.com/32

데이터과학을위한통계학2판, 피터 브루스_앤드루브루스_피터게데크 저, 2021

'DataScience'의 다른글

  • 현재글 [ML] 회귀모형의 평가지표, MAE, MSE, RMSE, RSE, R^2

관련글