Evaluation of regression model

연속적인 종속변수를 예측하는 regression model(회귀분석)이 독립변수와 종속변수의 관계를 제대로 설명하는지 정량적인 지표를 이용하여 평가하는 방법에 대해서 알아보자. 편의상 학습데이터는 개가 주어져있고 독립변수는 , 종속변수는 1차원 실수 로 두고 를 설명하는 관계식은 로 두겠다.

독립변수 종속변수

1. Mean squared error, MSE: 평균제곱오차

앞에서 소개한 Linear model에서 를 학습하는데 cost function으로 사용한 MSE를 이용하여 모델을 평가할 수 있다. MSE는 모델의 예측값 와 실제값 의 차이인 오차들의 제곱 평균으로 정의한다.

2. Mean absolute error, MAE: 평균절대오차

MSE가 예측값과 실제값의 -norm을 사용한 것과 달리 MAE는 오차의 절댓값 평균인 -norm을 사용한다. 즉, MAE는 다음과 같이 정의한다.

MAE는 오차의 절댓값을 사용해서 모델 예측정도를 측정하기 때문에 outlier(이상값)에 대해서 MSE 보다 덜 민감하게 반응한다. 예를 들어서, 전반적으로 모델의 오차가 작은 값을 갖고 있음에도 불구하고 예측에 실패한 큰 오차값을 같은 항이 존재하는 경우 MSE는 제곱연산에 의해서 오차 정도를 과대평가할 가능성이 있다.

  • MSE, MAE 모두 모델 의 예측값과 실제값의 오차를 측정하는 방법으로 사이의 값을 갖는다. 절대적인 기준은 존재하지 않으며 0에 가까울 수록 regression model이 종속변수 를 잘 설명하고 있다고 할 수 있다.
  • 둘 중에 어떤 것이 더 효과적으로 모델을 평가하는지 결정하기는 어려운 질문이다. 예를 들어서, A, B regression model 중에서 어떤 모델의 예측이 더 좋은지 MSE와 MAE를 이용해서 판단하고자 한다. 만약 A 모델이 B 모델보다 MSE와 MAE값 모두 작은값이 나왔다면 A모델이 더 좋다고 결론 내릴 수 있지만 다음과 같이 두 모델의 MSE와 MAE가 주어졌다면 쉽게 판단하기 어렵다.

MSE값을 비교하면 A 모델이 B 모델보다 잘 예측했다고 할 수 있지만 MAE값을 보면 반대 결과를 보여준다. 어떠한 모델이 효과적인지 결정할 때에는 다양한 방법을 통해서 신중하게 결정해야한다.

3. Coefficient of determination, R-squared: 결정계수

선형회귀분석(linear regression)에서는 모델이 자료와 얼마나 적합하는가 적합성을 평가하는 척도로 결정계수를 사용한다. 는 [0, 1] 범위를 갖고 1에 가까울 수록 선형모델이 독립변수와 종속변수를 잘 설명하고 있다고 결론 내릴 수 있다. 결정계수를 정의하기 전에 SSE, SST, SSR을 정의하자.

Sum of squares due to error, SSE

예측값와 실제값 와의 차이 제곱합을 오차제곱합이라고 부르고 SSE(sum of squares due to error)로 표기한다.

SSE는 선형회귀선 위에 있는 예측값과 실제값의 오차 제곱합을 의미하고 선형 모델이 자료의 특성을 잘 반영(설명)하는지 측정하는 척도이다.

Total sum of squares, SST

독립변수 가 주어지지 않은 경우 종속변수 값을 추정해야된다고 가정해보자. 독립변수의 정보가 없기 때문에 우리는 를 예측하기 위해서 할 수 있는 방법은 표본평균 를 사용할 수 밖에 없다. 여기서 는 단순한 종속변수의 표본평균이다. . 실제값 차이 제곱합을 총제곱합이라고 부르고 SST(total sum of squares)라고 표기한다.

즉, SST는 종속변수를 추정에 를 사용했을 때 나타나는 오차의 척도이다.

Sum of squares due to regression, SSR

예측값 로부터 얼마나 떨어져 있는지를 측정하기 위해 계산되는 값을 회귀제곱합이라고 부르고 SSR(sum of squares due to regression)이라고 표기한다.

SSE, SST, SSR사이에는 다음과 같은 관계식이 성립한다.

위 식에 대한 증명은 다음과 같다. 편의상 독립변수 를 1차원 변수로 두겠다. 그러면 Least squares method(최소제곱법)에 의해서 linear model 의 계수는 다음과 같다.

이고

이다. 여기서 이다.

Linear regression model의 적합도를 측정하는 결정계수 는 다음과 같이 정의한다.

예측값과 실제값의 오차 제곱합인 SSE가 작은 경우 1에 가까운 값을 갖는다.


Python을 이용해서 , MSE 및 MAE 구해보자.

# scikit-learn 라이브러리가 없는 경우
# conda install -c anaconda scikit-learn

from sklearn.datasets import make_regression
from sklearn.metrics import (r2_score, mean_absolute_error,
mean_squared_error)
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

%matplotlib inline


# 선형회귀분석 예시로 사용할 데이터 구성
x, y = make_regression(n_samples=500, n_features=1, \
n_informative=1, noise=25, random_state=10)

# 학습데이터와 테스트데이터 분류 (비율 6:4)
x_train, x_test, y_train, y_test = \
train_test_split(x, y, test_size=.4, random_state=10)

H = LinearRegression().fit(x_train, y_train)

fig, ax = plt.subplots()
ax.scatter(x_test, y_test, alpha=0.7)
ax.plot(x_test, H.predict(x_test), color='red')

y_pred = H.predict(x_test)

# 결정계수, MSE, MAE 계산(r2 경우 y_test와 y_pred 위치 변경하면 안됨)

print ('R2: ', r2_score(y_test, y_pred))
print ('MSE: ', mean_squared_error(y_test, y_pred))
print ('MAE: ', mean_absolute_error(y_test, y_pred))

실행화면

R2:  0.8689245263423226
MSE:  625.63532929074
MAE:  19.902442134935054