회귀 모델 성능 측정
1. RMSE (Root Mean Squared Error)
RMSE는 실제 값과 예측 값의 차이를 제곱하여 평균낸 뒤, 그 제곱근을 취한 값입니다.
이는 예측 오차의 크기를 나타내는 지표로, 값이 작을수록 모델의 예측 정확도가 높음을 의미합니다.
RMSE는 회귀 모델의 성능을 평가할 때 사용되고, 특히 연속적인 수치를 예측하는 문제에서 모델의 예측 오차를 측정하는데 유용합니다.
1.1 RMSE의 특징
큰 오차에 대해 가중치를 더 부여하기 때문에, 모델이 큰 오차를 만드는 경우 이를 잘 포착할 수 있습니다.
RMSE는 오차를 제곱하기 떄문에 작은 오차는 더 작게 만들고, 큰 오차는 더 크게 만듭니다.
1.2 RMSE 사용시 주의점
모든 오차를 동일하게 취급하지 않기 떄문에, 작은 오차가 많은 경우에도 성능이 좋아 보일 수 있습니다.
RMSE가 큰 오차에 더 큰 가중치를 부여한다는 것은 작은 오차에 더 적은 가중치를 부여한다는 의미입니다.
이는 작은 오차가 많이 발생하는 경우, RMSE가 실제 모델의 성능을 과도하게 긍정적으로 평가할 가능성이 있음을 의미합니다.
따라서, RMSE를 사용할 때는 모델의 성능을 종합적으로 평가하기 위해 MAE와 같은 다른 지표와 함께 사용하는 것이 좋습니다.
1.3 RMSE의 중요성
RMSE는 모델의 예측 오차의 표준 편차를 나타내므로, 모델의 예측이 얼마나 일관되게 떨어져 있는지를 파악할 수 있습니다.
표준 편차는 데이터 포인트들이 평균으로부터 얼마나 멀리 떨어져 있는지를 나타내는 측정치입니다.
마찬가지로 RMSE는 실제 값과 모델의 예측 값 사이의 오차들이 얼마나 퍼져있는지, 즉 오차들의 평균거리를 나타냅니다.
따라서 RMSE를 통해 모델의 예측이 얼마나 일관되게 떨어져 있는지, 즉 모델의 예측이 전반적으로 실제 값과 얼마나 근접하게 유지되는지를 파악할 수 있습니다.
모델이 일관된 오차를 보인다면, 이는 모델이 안정적이고 예측가능하다는 신호일 수 있습니다.
반대로 크게 변동하는 오차를 보인다면, 모델이 특정 조건이나 상황에서 성능이 저하될 수 있음을 나타냅니다.
2. MAE(Mean Absolute Error)
MAE는 실제 값과 예측 값의 차이의 절대값을 평균한 것입니다.
이 지표는 모델의 예측이 실제 값에서 평균적으로 얼마나 떨어져 있는지를 나타내며, 값이 작을수록 예측의 정확도가 높다는 것을 의미합니다.
MAE는 회귀 문제에서 모델의 성능을 평가할 때 사용됩니다.
특히, 이상치로 인한 큰 오차를 특별히 더 중요하게 다루지 않을 때 유용합니다.
2.1 MAE의 특징
- 동등한 오차 처리: MAE는 모든 오차를 동등하게 취급합니다. 오차의 크기에 관계없이 모든 오차를 같은 비중으로 다루므로, 작은오차든 큰 오차든 모두 모델 평가에 동일하게 기여합니다.
- 이상치에 대한 민감도 낮음: MAE는 이상치에 덜 민감합니다. MAE는 오차를 제곱하지 않기 때문에, 큰 오차가 전체 오차 평균에 미치는 영향이 상대적으로 제한됩니다.
- 직관적인 해석: MAE는 모델의 평균적인 오차를 직관적으로 이해할 수 있는 방법입니다. 즉, 모델이 평균적으로 실제 값과 얼마나 차이가 나는지를 쉽게 파악할 수 있습니다.
2.2 MAE 사용시 주의점
MAE는 모든 오차를 동일하게 취급하므로, 큰 오차를 갖는 데이터 포인트의 중요성을 간과할 수 있습니다.
따라서, 모델의 성능을 종합적으로 이해하기 위해서는 다른 지표들도 함게 고려하는 것이 좋습니다.
3. 사용예시
3.1 데이터 불러오기
from sklearn.datasets import load_diabetes
diabetes = load_diabetes()
3.2 독립 변수(X)와 종속 변수(y)를 훈련 세트(train)와 검증 세트(valid)로 분할
from sklearn.model_selection import train_test_split
X = diabetes['data']
y = diabetes['target']
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)
3.3 선형 회귀 모델 훈련 및 예측
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_valid)
y_pred
array([139.5475584 , 179.51720835, 134.03875572, 291.41702925,
123.78965872, 92.1723465 , 258.23238899, 181.33732057,
90.22411311, 108.63375858, 94.13865744, 168.43486358,
53.5047888 , 206.63081659, 100.12925869, 130.66657085,
219.53071499, 250.7803234 , 196.3688346 , 218.57511815,
207.35050182, 88.48340941, 70.43285917, 188.95914235,
154.8868162 , 159.36170122, 188.31263363, 180.39094033,
47.99046561, 108.97453871, 174.77897633, 86.36406656,
132.95761215, 184.53819483, 173.83220911, 190.35858492,
124.4156176 , 119.65110656, 147.95168682, 59.05405241,
71.62331856, 107.68284704, 165.45365458, 155.00975931,
171.04799096, 61.45761356, 71.66672581, 114.96732206,
51.57975523, 167.57599528, 152.52291955, 62.95568515,
103.49741722, 109.20751489, 175.64118426, 154.60296242,
94.41704366, 210.74209145, 120.2566205 , 77.61585399,
187.93203995, 206.49337474, 140.63167076, 105.59678023,
130.70432536, 202.18534537, 171.13039501, 164.91423047,
124.72472569, 144.81030894, 181.99635452, 199.41369642,
234.21436188, 145.95665512, 79.86703276, 157.36941275,
192.74412541, 208.89814032, 158.58722555, 206.02195855,
107.47971675, 140.93598906, 54.82129332, 55.92573195,
115.01180018, 78.95584188, 81.56087285, 54.37997256,
166.2543518 ])
3.4 모델 평가를 위한 평균 절대 오차(MAE) 및 평균 제곱근 오차(RMSE) 계산
(일반적으로, MAE와 RMSE의 값이 낮을수록 모델의 성능이 더 좋다고 해석할 수 있습니다.)
from sklearn.metrics import mean_absolute_error, mean_squared_error
import numpy as np
mae = mean_absolute_error(y_valid, y_pred)
rmse = np.sqrt(mean_squared_error(y_valid, y_pred))
print(f'mae의 값은', mae, f'입니다')
print(f'rmse의 값은', rmse, f'입니다')
mae의 값은 42.79409467959994 입니다
rmse의 값은 53.85344583676593 입니다