아래의 내용을 읽어보기 전에 이전 포스트([인사이드 머신러닝] 단순회귀모델: 회귀계수의 추정)를 먼저 보는 것이 전체적인 흐름을 이해하는데 도움이 됩니다.

이전 포스트에서 살펴본 방식대로 단순회귀모델에서 회귀직선을 추정한 후에는 그 결과가 얼마나 타당한지 검토하여야 한다. 산점도(scatter plot)을 통해 시각적으로 확인하는 방법도 가능하겠으나 추정한 모델의 적합도를 정량적으로 평가하기 위한 지표가 필요하다. 다음의 세 가지 지표들이 회귀직선의 적합도를 측정하는데 널리 사용된다.

  • FF-검정 (FF-test)
  • 결정계수 (R2R^2, coefficient of determination)
  • Residual standard error

위 지표들을 계산하는데 있어 선행되어야 하는 것이 신호의 변동을 분석하는 것이다. 이러한 분석 과정을 분산분석(analysis of variance: ANOVA)이라 부르며, 본 포스트에서는 ANOVA부터 살펴보기로 한다.


분산분석 (ANOVA)

하나의 관찰값 yiy_i와 평균 yˉ\bar{y}의 차이를 다음과 같이 쓸 수 있다.

yiyˉtotal deviation=(yiy^i)unexplained deviation+(y^iyˉ)explained deviation(1)\tag{1} \underbrace{y_i - \bar{y}}_{\text{total deviation}} = \underbrace{(y_i-\hat{y}_i)}_{\text{unexplained deviation}} + \underbrace{(\hat{y}_i-\bar{y})}_{\text{explained deviation}}

즉, 총 편차(total deviation)는 회귀직선에 의해 설명되는 편차(explained deviation)과 회귀직선에 의해 설명되지 않는 편차(unexplained deviaion), 즉 residual로 나타낼 수 있다. 식 (1)을 시각적으로 나타내면 [그림 1]과 같다.

[그림 1] 회귀직선에 대한 총 편차의 구분

식 (1)의 양변을 제곱하고 모든 ii에 대한 합을 구하면

i(yiyˉ)2=i(yiy^i)2+i(y^iyˉ)2+2i(yiy^i)(y^iyˉ)(2)\tag{2} \sum_i (y_i - \bar{y})^2 = \sum_i (y_i - \hat{y}_i)^2 + \sum_i (\hat{y}_i - \bar{y})^2 + 2\sum_i (y_i - \hat{y}_i)(\hat{y}_i - \bar{y})

와 같이 되는데, 마지막 항은

i(yiy^i)(y^iyˉ)=iei(y^iyˉ)=ieiy^iyˉiei=0(3)\tag{3} \begin{aligned} \sum_i (y_i - \hat{y}_i)(\hat{y}_i - \bar{y}) &= \sum_i e_i (\hat{y}_i - \bar{y}) \\&= \sum_i e_i\hat{y}_i - \bar{y}\sum_i e_i \\ &= 0 \end{aligned}

이 되어, 식 (2)의 총 편차의 제곱의 합은 다음과 같이 두 변동의 합으로 분해가 된다. (만약, 식(3)이 0이 되는 것이 자연스럽게 받아들여지지 않는다면 이전 포스트를 참조)

i(yiyˉ)2SST=i(yiy^i)2SSE+i(y^iyˉ)2SSR(4)\tag{4} \underbrace{\sum_i (y_i - \bar{y})^2}_{SST} = \underbrace{\sum_i (y_i - \hat{y}_i)^2}_{SSE} + \underbrace{\sum_i (\hat{y}_i - \bar{y})^2}_{SSR}

식 (4)에서 SSTSST, SSRSSR, SSESSE는 아래의 약어이다.

  • SSTSST: total sum of squares (총제곱합), 또는 total variation (총 변동)이라고도 부름.
  • SSRSSR: sum of squares due to regression (회귀에 의한 제곱합, 회귀직선에 의해 설명되는 변동)
  • SSESSE: sum of squares due to residual errors (오차에 의한 제곱합, 회귀직선에 의해 설명되지 않는 변동)

우리는 단순회귀모델을 고려하고 있으므로 절편계수를 제외하면 회귀계수는 하나이다. 회귀직선에 의해 설명되는 변동 SSRSSR은 자유도 1을 갖는다. 총 NN개의 샘플이 주어졌을 경우, SSTSST의 자유도는 N1N-1인 것이 자명하므로 SSESSE의 자유도는 N2N-2가 된다.

SSTSST, SSESSE, SSRSSR을 계산할 때 식 (4)의 정의대로 계산하기보다는 아래와 같이 계산하는 것이 더 편리하다.

SST=i(yiyˉ)2=iyi2Nyˉ2SSR=i(y^iyˉ)2=i(yˉ+β^1(xixˉ)yˉ)2=β^12i(xixˉ)2=(SxySxx)2Sxx=Sxy2SxxSSE=SSTSSR(5)\tag{5} \begin{aligned} SST &= \sum_i (y_i - \bar{y})^2 = \sum_i y_i^2 - N\bar{y}^2 \\ SSR &= \sum_i (\hat{y}_i - \bar{y})^2 \\ &= \sum_i \left( \cancel{\bar{y}}+\hat{\beta}_1(x_i-\bar{x})- \cancel{{\bar{y}}} \right)^2 \\ &= \hat{\beta}_1^2\sum_i \left(x_i-\bar{x} \right)^2 \\ &= \left(\frac{S_{xy}}{S_{xx}}\right)^2S_{xx} \\ &= \frac{S_{xy}^2}{S_{xx}} \\ SSE &= SST - SSR \end{aligned}

위 식에서 SSRSSR의 표현식을 유도하기 위해 아래와 같이 이전 포스트에서 유도되었던 결과들을 사용하였다.

  • y^i=yˉ+β^1(xixˉ)\hat{y}_i=\bar{y} + \hat{\beta}_1(x_i-\bar{x}) (이전 포스트의 식 (15))
  • β^1=Sxy/Sxx\hat{\beta}_1 = S_{xy}/S_{xx} (이전 포스트의 식 (8))
  • SxxS_{xx}, SxyS_{xy}, SyyS_{yy}는 이전 포스트의 식 (7) 참고

위와 같은 일련의 과정을 통해 우리는 총 변동을 회귀직선에 의한 변동과 오차에 의한 변동을 정량적으로 분해할 수 있었다. 앞에서 구한 세 가지 제곱합 SSTSST, SSRSSR, SSESSE를 각각 자유도로 나누면 일종의 분산이 된다. 예를 들어, SST/(N1)SST/(N-1)은 표본분산이 되고, SSE/(N2)SSE/(N-2)는 오차의 분산인 σ2\sigma^2의 불편추정량(unbiased estimator)1가 된다. 그리고 SSR의 자유도는 1이기 때문에 값이 변하지 않는다. SSESSESSRSSR을 각각의 자유도로 나눈 값을 우리는 각각 MSEMSE(mean square error), MSRMSR(mean square due to regression)이라고 부른다. 앞에서의 분석 결과를 이용하여 아래와 같이 분산분석표를 만들어 회귀직선의 유의성을 판단하는데 활용한다.

source of
variation
Degrees of FreedomSum of SquaresMean SquaresF0F_0
Regression11SSR=i(y^iyˉ)2SSR=\sum_i (\hat{y}_i - \bar{y})^2MSR=SSR1MSR=\frac{SSR}{1}F0=MSRMSEF_0=\frac{MSR}{MSE}
Residual ErrorN2N-2SSE=i(yiy^i)2SSE=\sum_i (y_i - \hat{y}_i)^2MSE=SSEN2MSE=\frac{SSE}{N-2}
TotalN1N-1SST=i(yiyˉ)2SST=\sum_i (y_i - \bar{y})^2

FF-검정(FF-Test)

회귀직선이 유의한가 하는 것은 분산분석을 통해 구한 MSRMSRMSEMSE에 비해 얼마나 큰지 비교함으로써 판단할 수 있다. 만약, 회귀직선이 유효하다면 대부분의 변동이 회귀직선에 의해 설명될 것이므로 MSRMSRMSEMSE보다 훨씬 클 것이다.

MSRMSRMSEMSE는 수학적으로 분산이다. 즉, 각각 회귀직선에 의해 설명되는 변동의 분산과 오차에 의한 변동의 분산을 나타낸다. 통계학에서 두 모집단의 분산을 비교하는 경우에는 분산의 차이를 비교하지 않고 분산의 비율을 계산한다. 두 분산의 비율을 이용하는 이유는 오로지 표본분산비에 대한 확률분포함수를 수학적으로 찾아내기 용이하기 때문이다. 그리고 이때 사용하는 것이 바로 FF 분포이다.

FF-Distribution: Review

표본분산과 카이제곱분포

정규분포를 따르는 모집단에서 NN개의 표본을 추출하여 표본분산을 다음과 같이 구할 수 있다.

S2=1N1i=1N(XiXˉ)2S^2=\frac{1}{N-1} \sum_{i=1}^N (X_i - \bar{X})^2

그리고

(n1)S2χN12(n-1)S^2 \sim \chi_{N-1}^2

즉, (n1)S2(n-1)S^2은 자유도가 N1N-1인 카이제곱분포(chi-squared distribution)을 따른다.

카이제곱 랜덤변수의 비율과 FF분포

서로 독립이면서 자유도가 각각 k1k_1k2k_2이고 카이제곱분포를 따르는 두 확률변수 V1V_1V2V_2가 있다고 할 때, 다음과 같이 정의되는 확률변수 FF는 자유도가 (k1,k2k_1, k_2)인 FF 분포를 따른다고 한다.

F=V1/k1V2/k2F(k1,k2)F = \frac{V_1/k_1}{V_2/k_2} \sim F(k_1, k_2)

[그림 2] 자유도에 따른 F-분포 그래프 (source: [5])

Hypothesis Test

앞의 분산분석에서 MSRMSRMSEMSE는 각각 SSRSSRSSESSE를 자유도로 나누어 구하였다. 그리고 SSRSSRSSESSE는 정의에 의해 각각 자유도 11N2N-2의 카이제곱 분포를 따른다. 그러므로 MSRMSRMSEMSE의 비율을 검정통계량으로 사용할 수 있다. 즉,

F0=MSRMSE(6)\tag{6} F_0 = \frac{MSR}{MSE}

회귀직선의 기울기(β1\beta_1)가 0이 아니고 이를 정확도 높게 추정하였다면 회귀직선에 의해 많은 변동이 설명될 것이다. 반면, 회귀직선의 기울기가 0이고 절편(β0\beta_0)항만 존재한다면 y^i=yˉ=β0\hat{y}_i=\bar{y}=\beta_0가 될 것이다2. 즉, β1=0\beta_1=0인 경우에는 대부분의 변동이 SSESSE로 설명될 것이다. 즉, F0F_0가 클수록 β10\beta_1 \neq 0일 확률이 높다는 결론에 도달할 수 있다. 따라서 다음과 같은 가설을 세울 수 있다.

H0:β1=0H1:β10(7)\tag{7} \begin{aligned} H_0 : \beta_1 &= 0 \\ H_1: \beta_1 &\neq 0 \end{aligned}

즉, (7)의 가설을 검증하기 위해 (6)의 통계량을 사용한다. 식 (7)의 가설에서 대립가설 (H1H_1: alternative hypothesis)이 채택되면 회귀직선이 유의하다고 볼 수 있다. 이때, 대립가설을 선택하기 위해 F0F_0의 값이 어느 정도 커야 하는가는 유의수준(level of significance) α\alpha와 자유도 (1,N21, N-2)를 사용하여 임계값(critical value) F(1,N2;α)F_{(1, N-2; \alpha)}를 구하고 만약 F0>F(1,N2;α)F_0 > F_{(1, N-2; \alpha)}이면 귀무가설(H0H_0: null hypothesis)을 기각(reject)하고 회귀직선이 유의하다고 판단한다.

[그림 3] F 검정의 의미 (source: [6])


결정계수 (R2R^2, coefficient of determination)

모든 관측값들이 회귀직선 위에 있다면 추정된 회귀식이 모든 표본의 변동을 완전히 설명할 것이고, SSESSE는 0이 될 것이다3. 따라서 SSTSST에서 SSESSE가 차지하는 부분이 작거나 반대로 SSTSST에서 SSRSSR이 차지하는 부분이 크면, 추정된 회귀모형의 적합도가 높다고 할 수 있다.

결정계수는 총 변동 SSTSST에서 설명된 변동 SSRSSR이 차지하는 비로 정의된다. 결정계수는 일반적으로 R2R^2로 나타내며 R-squared라고도 부른다. 수학적으로는 다음과 같이 정의된다.

R2=SSRSST=explained variationtotalvariation=1SSESST=1unexplained variationtotalvariation(8)\tag{8} \begin{aligned} R^2 &= \frac{SSR}{SST} = \frac{\text{explained variation}}{total variation} \\ &=1-\frac{SSE}{SST} =1- \frac{\text{unexplained variation}}{total variation} \end{aligned}

R2R^2의 범위는 0R210 \leq R^2 \leq 1이며, 1에 가까울수록 표본들이 회귀직선 주위에 밀집되어 있음을 뜻하므로 추정된 회귀식이 관측값들을 잘 설명하고 있다는 것을 뜻하는데, 이는 곧 xxyy의 상관관계(correlation)가 클수록 R2R^2의 값이 11에 가까워짐을 의미한다. 그러나 결정계수는 xxyy의 관계가 양의 상관관계인지 음의 상관관계인지는 구별하지 못하는 한계가 있다. 이런 단점을 보완하기 위해 두 변수 간의 상호관계를 측정하는 측도로서 상관계수(rr)가 흔히 사용된다. 상관계수와 결정계수의 관계는 다음과 같다.

r=i=1N(xixˉ)(yiyˉ)i=1N(xixˉ)2i=1N(yiyˉ)2=sxysxxsyy=±R2(9)\tag{9} \begin{aligned} r &= \frac{\sum_{i=1}^N(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^N(x_i-\bar{x})^2} \sqrt{\sum_{i=1}^N(y_i-\bar{y})^2}} \\ &= \frac{s_{xy}}{\sqrt{s_{xx}}\sqrt{s_{yy}}} \\ &= \pm \sqrt{R^2} \end{aligned}

식 (9)로부터 결정계수를 R2R^2으로 표기하는 이유(상관관계의 제곱)를 알 수 있다.


Residual standard error

Residual standard error는 root mean square error를 의미한다. 즉, MSEMSE의 제곱근을 의미하는데, 사실 MSEMSE를 이용해서 그냥 해석해도 되고, 수학적 편의성 때문에 그렇게들 많이 한다. 즉, MSEMSE가 작으면 작을수록 회귀선이 관측값들을 잘 설명하고 있다고 해석하는 것이다.

그러나 MSEMSE는 그 값이 작으면 좋은 것은 맞지만 어느 정도의 값이 작은 것인지는 분명하지 않다. MSEMSE의 크기가 관측치의 단위에 의존하기 때문이다. 그래서 수치적으로 적합도를 표현할 때에는 R2R^2와 같은 상대적인 측도를 사용한다.


파이썬 예제

  • sklearn.datasets 패키지의 make_regression() 함수를 이용하여 가상의 선형회귀 데이터를 만들었다.
  • sklearn.linear_model 패키지 아래 LinearRegression 클래스를 lr로 객체화하여 회귀계수를 추정한다.
# 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_)
  • lr.score() 메소드를 이용하여 훈련 데이터와 테스트 데이터의 R2R^2 값을 확인한다. 훈련 데이터와 테스트 데이터 모두 0.96 이상의 결정계수 값을 출력하였다. 결정계수가 1에 근접하므로 훈련이 잘 되었다고 할 수 있다..
  • print(lr.coef_, lr.intercept_)를 이용하여 추정된 휘귀계수도 프린트하여 확인해본다.
0.9691481822147915
0.9661977117689878
[16.80174075] 10.144605141789095
  • sklearn 라이브러리에서는 R에서 제공하는 summary()와 유사한 메소드를 제공하지 않는다. 따라서 F0F_0나 표준오차를 포함한 통계치를 한눈에 확인하기 위해서는 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())
  • 결과는 다음과 같다. R2R^2 값(R-squared)과 추정된 계수 값들(x1, const)이 sklearn을 통해 출력한 값과 거의 동일한 것을 확인할 수 있다.
  • F-statistic는 F0F_0 값을 나타낸다. 굉장히 값이 크기 때문에 회귀직선이 관측치들을 잘 설명한다고 할 수 있다.
                            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차식으로 이루어진 경우만을 다루었다. 대부분의 문제들은 독립변수가 여러 개이고 다항식으로 이루어져 있다. 이 문제들을 어떻게 다루는지는 다음 포스트에서 살펴보자.


Footnotes

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/

profile
연구와 개발의 중간 어디쯤

0개의 댓글