아래의 내용을 읽어보기 전에 이전 포스트([인사이드 머신러닝] 단순회귀모델: 회귀계수의 추정)를 먼저 보는 것이 전체적인 흐름을 이해하는데 도움이 됩니다.
이전 포스트에서 살펴본 방식대로 단순회귀모델에서 회귀직선을 추정한 후에는 그 결과가 얼마나 타당한지 검토하여야 한다. 산점도(scatter plot)을 통해 시각적으로 확인하는 방법도 가능하겠으나 추정한 모델의 적합도를 정량적으로 평가하기 위한 지표가 필요하다. 다음의 세 가지 지표들이 회귀직선의 적합도를 측정하는데 널리 사용된다.
위 지표들을 계산하는데 있어 선행되어야 하는 것이 신호의 변동을 분석하는 것이다. 이러한 분석 과정을 분산분석(analysis of variance: ANOVA)이라 부르며, 본 포스트에서는 ANOVA부터 살펴보기로 한다.
하나의 관찰값 와 평균 의 차이를 다음과 같이 쓸 수 있다.
즉, 총 편차(total deviation)는 회귀직선에 의해 설명되는 편차(explained deviation)과 회귀직선에 의해 설명되지 않는 편차(unexplained deviaion), 즉 residual로 나타낼 수 있다. 식 (1)을 시각적으로 나타내면 [그림 1]과 같다.
[그림 1] 회귀직선에 대한 총 편차의 구분
식 (1)의 양변을 제곱하고 모든 에 대한 합을 구하면
와 같이 되는데, 마지막 항은
이 되어, 식 (2)의 총 편차의 제곱의 합은 다음과 같이 두 변동의 합으로 분해가 된다. (만약, 식(3)이 0이 되는 것이 자연스럽게 받아들여지지 않는다면 이전 포스트를 참조)
식 (4)에서 , , 는 아래의 약어이다.
우리는 단순회귀모델을 고려하고 있으므로 절편계수를 제외하면 회귀계수는 하나이다. 회귀직선에 의해 설명되는 변동 은 자유도 1을 갖는다. 총 개의 샘플이 주어졌을 경우, 의 자유도는 인 것이 자명하므로 의 자유도는 가 된다.
, , 을 계산할 때 식 (4)의 정의대로 계산하기보다는 아래와 같이 계산하는 것이 더 편리하다.
위 식에서 의 표현식을 유도하기 위해 아래와 같이 이전 포스트에서 유도되었던 결과들을 사용하였다.
위와 같은 일련의 과정을 통해 우리는 총 변동을 회귀직선에 의한 변동과 오차에 의한 변동을 정량적으로 분해할 수 있었다. 앞에서 구한 세 가지 제곱합 , , 를 각각 자유도로 나누면 일종의 분산이 된다. 예를 들어, 은 표본분산이 되고, 는 오차의 분산인 의 불편추정량(unbiased estimator)1가 된다. 그리고 SSR의 자유도는 1이기 때문에 값이 변하지 않는다. 와 을 각각의 자유도로 나눈 값을 우리는 각각 (mean square error), (mean square due to regression)이라고 부른다. 앞에서의 분석 결과를 이용하여 아래와 같이 분산분석표를 만들어 회귀직선의 유의성을 판단하는데 활용한다.
source of variation | Degrees of Freedom | Sum of Squares | Mean Squares | |
---|---|---|---|---|
Regression | ||||
Residual Error | ||||
Total |
회귀직선이 유의한가 하는 것은 분산분석을 통해 구한 이 에 비해 얼마나 큰지 비교함으로써 판단할 수 있다. 만약, 회귀직선이 유효하다면 대부분의 변동이 회귀직선에 의해 설명될 것이므로 이 보다 훨씬 클 것이다.
과 는 수학적으로 분산이다. 즉, 각각 회귀직선에 의해 설명되는 변동의 분산과 오차에 의한 변동의 분산을 나타낸다. 통계학에서 두 모집단의 분산을 비교하는 경우에는 분산의 차이를 비교하지 않고 분산의 비율을 계산한다. 두 분산의 비율을 이용하는 이유는 오로지 표본분산비에 대한 확률분포함수를 수학적으로 찾아내기 용이하기 때문이다. 그리고 이때 사용하는 것이 바로 분포이다.
정규분포를 따르는 모집단에서 개의 표본을 추출하여 표본분산을 다음과 같이 구할 수 있다.
그리고
즉, 은 자유도가 인 카이제곱분포(chi-squared distribution)을 따른다.
서로 독립이면서 자유도가 각각 과 이고 카이제곱분포를 따르는 두 확률변수 과 가 있다고 할 때, 다음과 같이 정의되는 확률변수 는 자유도가 ()인 분포를 따른다고 한다.
[그림 2] 자유도에 따른 F-분포 그래프 (source: [5])
앞의 분산분석에서 과 는 각각 과 를 자유도로 나누어 구하였다. 그리고 과 는 정의에 의해 각각 자유도 과 의 카이제곱 분포를 따른다. 그러므로 과 의 비율을 검정통계량으로 사용할 수 있다. 즉,
회귀직선의 기울기()가 0이 아니고 이를 정확도 높게 추정하였다면 회귀직선에 의해 많은 변동이 설명될 것이다. 반면, 회귀직선의 기울기가 0이고 절편()항만 존재한다면 가 될 것이다2. 즉, 인 경우에는 대부분의 변동이 로 설명될 것이다. 즉, 가 클수록 일 확률이 높다는 결론에 도달할 수 있다. 따라서 다음과 같은 가설을 세울 수 있다.
즉, (7)의 가설을 검증하기 위해 (6)의 통계량을 사용한다. 식 (7)의 가설에서 대립가설 (: alternative hypothesis)이 채택되면 회귀직선이 유의하다고 볼 수 있다. 이때, 대립가설을 선택하기 위해 의 값이 어느 정도 커야 하는가는 유의수준(level of significance) 와 자유도 ()를 사용하여 임계값(critical value) 를 구하고 만약 이면 귀무가설(: null hypothesis)을 기각(reject)하고 회귀직선이 유의하다고 판단한다.
[그림 3] F 검정의 의미 (source: [6])
모든 관측값들이 회귀직선 위에 있다면 추정된 회귀식이 모든 표본의 변동을 완전히 설명할 것이고, 는 0이 될 것이다3. 따라서 에서 가 차지하는 부분이 작거나 반대로 에서 이 차지하는 부분이 크면, 추정된 회귀모형의 적합도가 높다고 할 수 있다.
결정계수는 총 변동 에서 설명된 변동 이 차지하는 비로 정의된다. 결정계수는 일반적으로 로 나타내며 R-squared라고도 부른다. 수학적으로는 다음과 같이 정의된다.
의 범위는 이며, 1에 가까울수록 표본들이 회귀직선 주위에 밀집되어 있음을 뜻하므로 추정된 회귀식이 관측값들을 잘 설명하고 있다는 것을 뜻하는데, 이는 곧 와 의 상관관계(correlation)가 클수록 의 값이 에 가까워짐을 의미한다. 그러나 결정계수는 와 의 관계가 양의 상관관계인지 음의 상관관계인지는 구별하지 못하는 한계가 있다. 이런 단점을 보완하기 위해 두 변수 간의 상호관계를 측정하는 측도로서 상관계수()가 흔히 사용된다. 상관계수와 결정계수의 관계는 다음과 같다.
식 (9)로부터 결정계수를 으로 표기하는 이유(상관관계의 제곱)를 알 수 있다.
Residual standard error는 root mean square error를 의미한다. 즉, 의 제곱근을 의미하는데, 사실 를 이용해서 그냥 해석해도 되고, 수학적 편의성 때문에 그렇게들 많이 한다. 즉, 가 작으면 작을수록 회귀선이 관측값들을 잘 설명하고 있다고 해석하는 것이다.
그러나 는 그 값이 작으면 좋은 것은 맞지만 어느 정도의 값이 작은 것인지는 분명하지 않다. 의 크기가 관측치의 단위에 의존하기 때문이다. 그래서 수치적으로 적합도를 표현할 때에는 와 같은 상대적인 측도를 사용한다.
# generage regression dataset
from sklearn.datasets import make_regression
x, y = make_regression(n_samples=1000, n_features=1, n_targets=1, bias=10, noise=3, random_state=42)
# data split
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.4, random_state=42)
# model training
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(x_train, y_train)
# plot the result
import matplotlib.pyplot as plt
import numpy as np
plt.scatter(x_test, y_test, s=10, marker = 'o', c='blue')
plt.plot([np.min(x_test), np.max(x_test)], [np.min(x_test)*lr.coef_+lr.intercept_, np.max(x_test)*lr.coef_+lr.intercept_], c='red')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
# R-squared value
print(lr.score(x_train, y_train))
print(lr.score(x_test, y_test))
# LS estimates
print(lr.coef_, lr.intercept_)
print(lr.coef_, lr.intercept_)
를 이용하여 추정된 휘귀계수도 프린트하여 확인해본다.0.9691481822147915
0.9661977117689878
[16.80174075] 10.144605141789095
statsmodels
라이브러리를 이용하여야 한다. 아래는 statsmodels
의 활용 예시이다. 참고로 add_constant
를 해주지 않으면 절편 회귀계수를 추정하지 않는다. import statsmodels.api as sm
x = sm.add_constant(x_train)
model = sm.OLS(y_train, x)
results = model.fit()
print(results.summary())
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.969
Model: OLS Adj. R-squared: 0.969
Method: Least Squares F-statistic: 1.878e+04
Date: Fri, 13 Aug 2021 Prob (F-statistic): 0.00
Time: 08:42:40 Log-Likelihood: -1497.0
No. Observations: 600 AIC: 2998.
Df Residuals: 598 BIC: 3007.
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 10.1446 0.120 84.551 0.000 9.909 10.380
x1 16.8017 0.123 137.058 0.000 16.561 17.042
==============================================================================
Omnibus: 0.122 Durbin-Watson: 1.973
Prob(Omnibus): 0.941 Jarque-Bera (JB): 0.209
Skew: 0.017 Prob(JB): 0.901
Kurtosis: 2.915 Cond. No. 1.04
==============================================================================
지금까지는 독립변수가 하나이면서 1차식으로 이루어진 경우만을 다루었다. 대부분의 문제들은 독립변수가 여러 개이고 다항식으로 이루어져 있다. 이 문제들을 어떻게 다루는지는 다음 포스트에서 살펴보자.
1: 일반적인 추정량은 불편성(unbiaseness), 일치성(consistency), 효율성(efficiency) 등의 특성을 가져야 바람직하다고 알려져있다. 이중 불편성이란 통계량 값의 평균이 모수(parameter)와 같은 것을 의미하며, 이러한 성징을 갖는 통계량을 unbiased estimator라고 한다.
2: [그림 1]과 이전 포스트의 "단순회귀모델-모델의 정의" 섹션과 식 (3), 식 (15)를 참고하면 본문에서 말하고자 하는 바가 이해될 것이다.
3: 사실 이 경우는 노이즈가 없는 경우로 실존하지 않는다.
[1] 김성수, 강명욱, 강위창, "회귀모형," 한국방송통신대학교출판문화원, 2019.
[2] 이태림, 이기재, 이긍희, 장영재, "통계학개론," 한국방송통신대학교출판문화원, 2020.
[3] https://en.wikipedia.org/wiki/F-distribution
[4] https://en.wikipedia.org/wiki/Chi-squared_distribution
[5] https://www.vosesoftware.com/riskwiki/Fdistribution.php
[6] https://www.fromthegenesis.com/hypothesis-testingf-test/