5.3 회귀 모델 평가

관측된 \(y\) 값과 해당하는 적합값 \(\hat{y}\) 사이의 차이값은 \(t=1,\dots,T\)에 대해 다음과 같이 학습-모음 오차 또는 “잔차(residual)”로 정의합니다. \[\begin{align*} e_t &= y_t - \hat{y}_t \\ &= y_t - \hat\beta_{0} - \hat\beta_{1} x_{1,t} - \hat\beta_{2} x_{2,t} - \cdots - \hat\beta_{k} x_{k,t} \end{align*}\] 각 잔차(residual)는 관련된 관측값의 예측할 수 없는 성분입니다.

잔차(residual)에는 다음 두 가지를 포함하여 몇 가지 유용한 성질이 있습니다: \[ \sum_{t=1}^{T}{e_t}=0 \quad\text{and}\quad \sum_{t=1}^{T}{x_{k,t}e_t}=0\qquad\text{for all $k$}. \] 이러한 성질의 결과로, 잔차(residual)의 평균이 0이고 잔차(residual)와 예측변수(predictor variable)에 대한 관측값 사이의 상관관계(correlation)도 0이라는 것이 분명합니다. (Y절편이 모델에서 생략될 때, 이것이 반드시 참은 아닙니다.)

회귀 변수를 고르고 회귀 모델을 맞춘 후에, 모델의 가정이 만족되는지 확인하기 위해 잔차를 그려보는 것이 필요합니다. 적합 모델(fitted model)과 기본 가정의 서로 다른 측면을 확인하기 위해 그려야 할 여러 가지 그래프가 있습니다. 각각을 하나씩 살펴보겠습니다.

잔차의 ACF 그래프

시계열 데이터에서, 현재 시점에 관측한 변수의 값은 이전 기간의 값과 비슷하거나 그보다 이전 기간의 값과 비슷할 것입니다. 따라서 회귀 모델로 시계열 데이터를 맞출 때, 보통은 잔차의 자기상관(autocorrelation)을 찾는 작업을 합니다. 이 경우에, 추정된 모델 오차에서 자기상관관계(autocorrelation)가 없다는 가정을 위배하여 예측이 비효율적일 수 있습니다. 이것은 더 나은 예측을 위해 모델에서 고려해야 할 정보가 더 있다는 것을 의미합니다. 자기상관(autocorrelation)을 가지는 오차가 있는 모델로 낸 예측치는 여전히 편향되어있지는 않아서 “잘못된” 것은 아니지만, 보통 필요한 것보다 더 큰 예측구간(prediction interval)을 가질 것입니다. 따라서 항상 잔차의 ACF (AutoCorrelation Function) 그래프를 살펴봐야 합니다.

회귀 모델을 고려하여 설계한 잔차(residual)의 자기상관(autocorrelation)을 확인하는 유용한 또 다른 방법은 브로이쉬-갓프레이(Breusch-Godfrey) 검정입니다. 이 방법은 계열 상관(serial correlation)에 대한 LM (Lagrange Multiplier) 검정이라고도 합니다. 이것은 어떤 특정한 순서까지 잔차에 자기상관(autocorrelation)이 없다는 결합 가설(joint hypothesis)을 검증하는데 사용합니다. 작은 p-값은 잔차(residual)에 중요한 자기상관(autocorrelation)이 남아 있다는 것을 나타냅니다.

브로이쉬-갓프레이(Breusch-Godfrey) 검정은 융-박스(Ljung-Box) 검정과 비슷합니다만, 회귀 모델을 위해 설계되었다는 점이 구체적인 차이입니다.

잔차의 히스토그램

잔차가 정규 분포를 따르는지 항상 확인하는 것은 좋은 접근 방식입니다. 이전에 설명한 것처럼, 이러한 작업은 예측 작업에서 필수적인 것은 아닙니다만, 이를 통해 예측 구간(prediction interval)을 훨씬 쉽게 계산할 수 있게 됩니다.

예제

3.3 절에서 소개한 checkresiduals() 함수를 이용하여 위에서 언급한 유용한 잔차 진단 결과를 얻을 수 있습니다.

checkresiduals(fit.consMR)
미국 분기별 소비에 대한 회귀 모델로부터 얻은 잔차를 분석하기.

Figure 5.8: 미국 분기별 소비에 대한 회귀 모델로부터 얻은 잔차를 분석하기.

#> 
#> 	Breusch-Godfrey test for serial correlation of
#> 	order up to 8
#> 
#> data:  Residuals from Linear regression model
#> LM test = 15, df = 8, p-value = 0.06

그림 5.8은 시간 그래프(time plot), ACF와, 미국 분기별 소비 데이터에 맞춘 다중 회귀 모델로 얻은 잔차의 히스토그램과, 그리고 8차 자기 상관까지 확인하기 위한 브로이쉬-갓프레이(Breusch-Godfrey) 검정 결과를 나타냅니다. checkresiduals() 함수는 회귀 모델에 대해서는 브로이쉬-갓프레이(Breusch-Godfrey) 검정을 사용하고 다른 경우에는 융-박스(Ljung-Box) 검정을 사용할 것입니다.

시간 그래프(time plot)에서 몇몇 부분은 시간에 따라 변하지만 나머지는 상대적으로 두드러지진 않습니다. 이러한 이분산성(heteroskedasticity)이 예측 구간 범위를 정확하지 않게 만들 수도 있습니다.

히스토그램은 잔차가 살짝 치우친 것 같다는 것을 보여줍니다. 이것은 예측 구간의 범위 확률에 영향을 줄 수도 있습니다.

자기상관(autocorrelation) 그래프에서는 시차 7에서 유의미하게 튀는 점이 나타나지만 브로이쉬-갓프레이(Breusch-Godfrey) 검정에서 5% 수준에 도달할만큼 유의미하지는 않습니다. 어쨌든, 자기상관(autocorrelation)이 그렇게 크지 않고, 시차 7에서 나타나는 것이 예측값이나 예측구간(prediction interval)에 영향을 주진 않을 같습니다. 9 장에서는 잔차에 남아있는 정보를 더 잘 잡아내기 위해 사용하는 동적 회귀 모델(dynamic regression model)을 다룹니다.

예측변수에 대한 잔차 그래프

잔차가 체계적인 패턴을 보이지 않고 무작위로 흩뿌려진 형태로 나타날 것 같습니다. 이것을 확인하는 단순하고 빠른 방식은 각 예측변수(predictor variable)에 대한 잔차(residual)의 산점도(scatterplot)를 살펴보는 것입니다. 이러한 산점도(scatterplot)에 패턴이 나타나면, 관계가 비선형적일 수 있어서 그에 따라 모델을 수정해야합니다. 비선형 회귀를 다루는 5.8 절을 보시길 바랍니다.

모델에 없는 모든 예측변수(predictor variable)에 대해 잔차(residual)를 그리는 것도 필요합니다. 이 중 어떤 것에서 패턴이 나타난다면 (아마도 비선형 형태의 패턴), 관련된 예측변수(predictor variable)를 모델에 넣어야 할 것입니다.

예제

그림 5.9에서 각 예측변수(predictor variable)에 대해 나타낸, 미국 소비 예측에 대한 다중 회귀 모델에서 얻은 잔차는 무작위적으로 흩뿌려진 것처럼 보입니다. 따라서 이 경우에 만족할만한 결과를 얻었습니다.

df <- as.data.frame(uschange)
df[,"Residuals"]  <- as.numeric(residuals(fit.consMR))
p1 <- ggplot(df, aes(x=Income, y=Residuals)) +
  geom_point() + xlab("소득") + ylab("잔차")
p2 <- ggplot(df, aes(x=Production, y=Residuals)) +
  geom_point() + xlab("생산") + ylab("잔차")
p3 <- ggplot(df, aes(x=Savings, y=Residuals)) +
  geom_point() + xlab("소득") + ylab("잔차")
p4 <- ggplot(df, aes(x=Unemployment, y=Residuals)) +
  geom_point() + xlab("실업률") + ylab("잔차")
gridExtra::grid.arrange(p1, p2, p3, p4, nrow=2)
잔차 대 각 예측변수의 산점도.

Figure 5.9: 잔차 대 각 예측변수의 산점도.

적합값에 대한 잔차 그래프

적합값에 대해 잔차를 그려도 어떠한 패턴도 나타나지 않아야 합니다. 패턴을 보았다면, 오차에 “이분산성(heteroscedasticity)”이 있을 수 있습니다. 이는 잔차의 분산이 일정하지 않을 수도 있다는 것을 의미합니다. 이러한 문제가 생기면, 목표 예상변수(forecast variable)에 로그나 제곱근 같은 변환을 취해야 할 수도 있습니다. ( @ref(transformations 절을 참조하시길 바랍니다.)

예제

이전 예제의 연장선상에서, 그림 5.10 은 잔차를 적합값에 대해 나타냅니다. 무작위 산점도는 오차에 등분산성(homoscedasity)이 있다는 것을 말해줍니다.

cbind(Fitted = fitted(fit.consMR),
      Residuals = residuals(fit.consMR)) %>%
  as.data.frame() %>%
  ggplot(aes(x=Fitted, y=Residuals)) + geom_point() +
    xlab("적합값") + ylab("잔차")
잔차 대 적합값의 산점도.

Figure 5.10: 잔차 대 적합값의 산점도.

이상값과 영향력 있는 관측값

대다수의 데이터에 비해 극단적인 값을 갖는 관측값을 이상값(outliers)이라고 부릅니다. 회귀 모형의 추정된 계수에 큰 영향을 주는 관측값을 영향력 있는 관측값이라고 부릅니다. 보통, 영향력 있는 관측값은 \(x\) 방향에서 극단적인 값을 갖는 이상값이기도 합니다.

이상값과 영향력 있는 관측값을 찾아내는 형식적인 방법이 있습니다. 이러한 방법은 이 책의 범위를 벗어납니다. 2 장의 처음 부분에서 이야기한 것처럼, 어떠한 분석을 하기 전에 데이터에 익숙해지는 것은 정말 중요합니다. 각 \(x\)에 대해 \(y\)를 산점도로 나타내는 것은 항상 회귀 분석의 좋은 시작점이고, 종종 특이한 관측값을 찾아내는데 도움이 되기도 합니다.

이상값이 나타나는 한 가지 원인은 데이터 입력 실수입니다. 데이터의 간단한 설명 통계로는 분별력이 없는 최소값과 최대값을 찾아낼 수 있습니다. 그러한 관측값을 찾았고, 잘못 입력했다는 것을 알았다면, 표본에서 바로 빼거나 수정해야합니다.

몇몇 관측값이 단순히 다를 때도 이상값이 나타납니다. 이 경우에는, 이러한 관측값을 제거하는 것이 현명하지 않을 수 있습니다. 관측값이 이상값일 수도 있다는 것을 확인하면, 확인한 경우를 조사하고 가능한 이유를 분석하는 것이 중요합니다. 이러한 관측값을 제거하거나 유지하기로 결정하는 일은 어려울 수 있습니다(특히, 이상값이 영향력 있는 관측값일 때). 이러한 관측값을 제거한 경우와 그렇지 않은 경우 모두 결과를 보고하는 것이 현명합니다.

예제

그림 5.11은 소득에 대한 미국 소비 데이터(5.1 절에서 소개한 예제)에 회귀를 적용했을 때, 하나의 이상값의 효과를 강조합니다. 왼쪽 패널에서 이상값은 소비의 백분율 변화가 -4%로 잘못 기록되어 \(y\) 방향으로 극단적인 값을 나타냅니다. 빨간색 선은 이상값을 포함하는 데이터에 맞춘 회귀 선이고, 검은색 선은 이상값이 없는 데이터에 맞춘 회귀 선입니다. 오른쪽 패널에서 이상값은 6% 소득 증가에 대응되는 4% 소비 감소로 \(x\) 방향으로 극단적인 값을 갖습니다. 이 경우, 빨간색 선이 검은색 선에서 크게 벗어나기 때문에 이상값은 아주 큰 영향력이 있습니다.

회귀에서 이상값과 영향력 있는 관측값의 효과.

Figure 5.11: 회귀에서 이상값과 영향력 있는 관측값의 효과.

허위회귀(Spurious regression)

대부분의 경우에는, 시계열 데이터에 “정상성(stationarity)이 나타나지 않습니다”; 즉, 시계열의 값이 일정한 평균이나 일정한 분산으로 변하지 않습니다. 8 장에서 정상 시계열(stationary time series)을 다룰 것입니다만, 여기에서는 정상성(stationarity)이 나타나지 않는 데이터가 회귀 모델에 어떤 영향을 미칠 수 있는지 설명하겠습니다.

예를 들어, 그림 5.12의 두 변수를 살펴봅시다. 둘 다 같은 방식으로 상향 추세이기 때문에 단순하게 관련 있는 것처럼 보입니다. 하지만, 호주의 승객 수송량은 기니의 쌀 생산량과 관련이 없습니다.

호주 항공객에 대한 기니의 쌀 생산량을 회귀로 분석한 예제에서 볼 수 있는 것처럼, 추세가 있는 시계열 데이터는 관계 있는 것처럼 보일 수 있습니다.

Figure 5.12: 호주 항공객에 대한 기니의 쌀 생산량을 회귀로 분석한 예제에서 볼 수 있는 것처럼, 추세가 있는 시계열 데이터는 관계 있는 것처럼 보일 수 있습니다.

정상성을 나타내지 않는 시계열을 회귀 분석하는 것은 허위회귀(spurious regression)로 이어질 수 있습니다. 기니의 쌀 생산량에 대한 호주 항공객의 회귀 분석 결과는 그림 5.13에 나타낸 것과 같습니다. 높은 \(R^2\)와 높은 잔차(residual) 자기 상관은 허위회귀(spurious regression)라는 것을 나타내는 신호가 될 수 있습니다. 아래 결과의 특징에 주목하시길 바랍니다. 9 장에서 정상성을 나타내지 않는 데이터와 허위회귀와 관련된 문제를 자세히 다루겠습니다.

허위 회귀의 사례는 그럴듯한 단기 예측값을 주는 것처럼 보일 수 있지만, 미래에도 계속 일반적으로 작동하지는 않을 것입니다.

aussies <- window(ausair, end=2011)
fit <- tslm(aussies ~ guinearice)
summary(fit)
#> 
#> Call:
#> tslm(formula = aussies ~ guinearice)
#> 
#> Residuals:
#>    Min     1Q Median     3Q    Max 
#> -5.945 -1.892 -0.327  1.862 10.421 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)    -7.49       1.20   -6.23  2.3e-07 ***
#> guinearice     40.29       1.34   30.13  < 2e-16 ***
#> ---
#> Signif. codes:  
#> 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 3.24 on 40 degrees of freedom
#> Multiple R-squared:  0.958,	Adjusted R-squared:  0.957 
#> F-statistic:  908 on 1 and 40 DF,  p-value: <2e-16
checkresiduals(fit)
허위회귀로부터 얻은 잔차.

Figure 5.13: 허위회귀로부터 얻은 잔차.

#> 
#> 	Breusch-Godfrey test for serial correlation of
#> 	order up to 8
#> 
#> data:  Residuals from Linear regression model
#> LM test = 29, df = 8, p-value = 3e-04