회귀모델을 평가하는 평가지표는 여러 가지가 있습니다.
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' 카테고리의 다른 글
[Pandas] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 2: invalid start byte (0) | 2022.08.23 |
---|---|
임의순열검정(random permutation test) (0) | 2022.08.23 |
[ML] 교차 검증(cross validate) (0) | 2022.08.22 |
[ML] train_test_split을 이용한 데이터 분할 (0) | 2022.08.22 |
[ML] K-NeighborsRegressor (K-최근접 이웃 회귀) (0) | 2022.08.04 |