본문 바로가기

1. 머신러닝

[머신러닝] 2. 선형회귀분석- 고려해야 할 요소, 잠재적 문제(feat. R Code)

728x90

 

회귀분석의 이론, 구축 방법 보다는 모델 구축에서 주의해야 할 요소, 가정을 위주로 정리했습니다 👩🏻‍💻

 

선형회귀에서 중요한 몇 가지 질문

1. 반응변수와 설명변수 사이에 상관관계가 있는가?

  • p개의 설명변수가 있는 다중회귀에서는 모든 회귀계수들이 0인지, F-통계량을 계산하여 가설검정을 한다.
  • n이 큰 경우에는 F-통계량이 1보다 약간만 크면 귀무가설(모든 회귀계수들이 0)에 반하는 증거가 된다. 반대로 n이 작은 경우 귀무가설을 기각하려면 더 큰 F-통계량이 필요하다.

2. 중요 변수의 결정

모델의 quality를 평가하는 통계

  • 맬로우즈(Mallows) Cp
  • AIC(Akaike information criterion)
  • BIC(베이즈 정보기준, Bayesian information criterion)
  • 수정된 R제곱

변수선택법

전진선택법 절편만 포함하고 설명변수는 없는 영모델(null model)을 가지고 시작하여, 가장 낮은 SSR가 생기는 변수를 모델에 추가한다. 어떤 정치규칙을 만족할 때까지 계속한다.
후진선택법 모든 변수를 가지고 시작하여, 통계적으로 중요도가 가장 낮은 변수(가장 큰 p-값을 가지는 변수)를 제외한다.
혼합선택법 전진선택과 후진선택을 결합한 것이다. 전진선택법에 의해 변수를 추가하면서 새롭게 추가된 변수에 기인해 기존 변수의 중요도가 약화되면 해당변수를 제거한다.
  • 후진선택법은 만약 p>n이면 사용할 수 없지만 전진선택법은 항상 사용할 수 있다.
  • 전진선택법은 그리디(greedy) 방식이다. 그래서 초기에 포함한 변수들이 나중에는 유효하지 않을 수 있다. 이 문제는 혼합선택법으로 해결할 수 있다.

3. 모델 적합

  • 모델 적합의 수치적 측도로 가장 흔히 사용되는 두 가지는 RSE와 R제곱

선형회귀모델 구축으로 발생할 수 있는 잠재적 문제

1. 데이터의 비선형성

  • 선형회귀모델은 설명변수들과 반응변수 사이에 직선 상관관계가 있다고 가정한다. 만약 실제 상관관계가 선형과 거리가 멀면 모든 결론이 의문스럽고 모델의 예측 정확도도 현저히 줄어들 수 있다.
  • 잔차 그래프(Residuals vs Fitted values 그래프)는 비선형성을 식별하는데 유용하다. 이상적이라면 잔차 그래프는 인지할만한 패턴을 보이지 않을 것이다. 패턴이 존재한다면 선형모델에 어떤 문제가 있을 수 있음을 나타낸다.
  • 만약 잔차 그래프가 비선형 상관성이 있다는 것을 나타내면, log, 루트, 제곱변환을 통해 설명변수X들을 비선형적으로 변환하여 회귀모델에 적용하는 것이 간단한 접근법이다.

2. 오차항들의 상관성

  • 선형회귀모델에서 중요한 가정은 오차항들이 서로 상관되어 있지 않다는 것이다.
  • 만약 오차항들 사이에 상관성이 있으면 추정된 표준오차는 실제 표준오차를 과소추정하는 경향이 있을 것이다.
  • 그 결과 실질적인 신뢰구간과 예측구간은 계산된 수치보다 더 좁을 것이다.
  • 이러한 상관성은 이산 시점에 측정된 관측치들로 구성된 시계열 데이터에서 자주 발생된다.

3. 오차항의 상수가 아닌 분산

  • 선형회귀모델에서 중요한 또 다른 가정은 오차항들의 분산이 상수라는 것이다.
  • 오차의 비상수 분산 또는 이분산성은 잔차 그래프에 깔때기 형태가 있는지를 보고 식별할 수 있다.
  • 이런 문제가 발생하면 log, 제곱근과 같은 오목함수를 사용하여 반응변수Y를 변환하는 것이 한 가지 해결책이다.

4. 이상치

  • 이상치는 y가 모델이 예측한 값과 크게 다른 점이다. 이상치는 데이터를 수집할 때 관측치를 잘못 기록하는 것과 같이 다양한 원인에 의해 발생될 수 있다.
  • 이상치는 설명변수 값이 특이한 것이 아니어서 보통 최소제곱적합에 거의 영향을 미치지 못한다. 기울기 변화가 거의 없고 절편은 아주 조금 줄어든다.
  • 하지만 하나의 관측치에 의한 급격한 수치 증가는 적합 해석에 영향을 줄 수 있다. 예를 들어, 이상치가 회귀에 포함될 때의 RSE는 1.09지만 이상치를 제외하면 0.77밖에 되지 않는다. 마찬가지로 이상치를 포함하는 것은 설명계를 0.892에서 0.805로 줄어들게 한다.
  • 잔차 그래프가 이상치를 식별하는 데 사용될 수 있다. 그러나 실제로는 어떤 점이 이상치라고 판단하려면 잔차가 얼마나 커야 하는지 결정하기 쉽지 않을 수 있다.
  • 이 문제를 해결하기 위해 잔차 그래프 대신 스튜던트화 잔차를 그릴 수 있다. 이것은 각 잔차를 추정표준오차로 나누어 계산한다. 스튜던트화 잔차의 절대값이 3보다 큰 관측치가 이상치일 수 있다.

5. 레버리지가 높은 (영향력이 큰) 관측치

레버리지 통계량 계산식

  • 높은 레버리지를 가지는 관측치는 대응하는 x값이 보통 수준과 다른 것을 뜻한다.
  • 레버리지가 높은 관측치를 제외하는 것이 이상치를 제외하는 것보다 최소제곱선에 훨씬 더 큰 영향을 미치기 때문에, 높은 레버리지 관측치를 식별하는 것이 중요하다.
  • 레버리지 통계량은 항상 1/n과 1 사이의 값이고 모든 관측치에 대한 평균 레버리지는 항상 (p+1)/n이다. 이보다 훨씬 큰 레버리지 통계량을 가지면 대응하는 점은 높은 레버리지를 가진다고 의심해 볼 수 있다.

6. 공선성

  • 공선성은 두 개 또는 그 이상의 설명변수들이 서로 밀접하게 상관되어 있는 경우를 말한다.
  • 공선성은 t-통계량을 줄인다. 그 결과 귀무가설(회귀계수는 0이다)을 기각하지 못할 수 있다. 이것이 의미하는 것은 가설검정의 능력(즉 영이 아닌 계수를 정확하게 검출할 확률)이 공선성에 의해 줄어든다는 것이다.
  • 분산팽창인수(VIF, variance inflation factor)를 계산하여 다중공선성을 판단한다. VIF의 가능한 가장 작은 값은 1이며, 공선성이 전혀 없음을 나타낸다. 경험적으로 5 또는 10을 초과하는 VIF값은 문제의 소지가 있을 정도의 공선성을 나타낸다.
  • 공선성 문제가 있을 경우, 회귀에서 문제가 있는 변수들 중 하나를 제외할 수 있다. 공선성이 있다는 것은 제외되는 변수가 반응변수에 대해 제공하는 정보가 다른 변수들과 중복된다는 것을 의미하기 때문이다.
  • 공선성 문제가 있을 경우, 공선성 변수들을 단일 설명변수로 결합하는 것도 하나의 방법이다.

R Code

데이터 준비

library(MASS)
head(Boston)

##     crim zn indus chas   nox    rm  age    dis rad tax ptratio  black lstat medv
##1 0.00632 18  2.31    0 0.538 6.575 65.2 4.0900   1 296    15.3 396.90  4.98 24.0
##2 0.02731  0  7.07    0 0.469 6.421 78.9 4.9671   2 242    17.8 396.90  9.14 21.6
##3 0.02729  0  7.07    0 0.469 7.185 61.1 4.9671   2 242    17.8 392.83  4.03 34.7
##4 0.03237  0  2.18    0 0.458 6.998 45.8 6.0622   3 222    18.7 394.63  2.94 33.4
##5 0.06905  0  2.18    0 0.458 7.147 54.2 6.0622   3 222    18.7 396.90  5.33 36.2
##6 0.02985  0  2.18    0 0.458 6.430 58.7 6.0622   3 222    18.7 394.12  5.21 28.7

 

MASS 라이브러리 안에 있는 Boston 데이터를 사용한다.

다중선형회귀

lm.fit=lm(medv~., data=Boston)
summary(lm.fit)

##Call:
##lm(formula = medv ~ ., data = Boston)

##Residuals:
##    Min      1Q  Median      3Q     Max 
##-15.595  -2.730  -0.518   1.777  26.199 

##Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
##(Intercept)  3.646e+01  5.103e+00   7.144 3.28e-12 ***
##crim        -1.080e-01  3.286e-02  -3.287 0.001087 ** 
##zn           4.642e-02  1.373e-02   3.382 0.000778 ***
##indus        2.056e-02  6.150e-02   0.334 0.738288    
##chas         2.687e+00  8.616e-01   3.118 0.001925 ** 
##nox         -1.777e+01  3.820e+00  -4.651 4.25e-06 ***
##rm           3.810e+00  4.179e-01   9.116  < 2e-16 ***
##age          6.922e-04  1.321e-02   0.052 0.958229    
##dis         -1.476e+00  1.995e-01  -7.398 6.01e-13 ***
##rad          3.060e-01  6.635e-02   4.613 5.07e-06 ***
##tax         -1.233e-02  3.760e-03  -3.280 0.001112 ** 
##ptratio     -9.527e-01  1.308e-01  -7.283 1.31e-12 ***
##black        9.312e-03  2.686e-03   3.467 0.000573 ***
##lstat       -5.248e-01  5.072e-02 -10.347  < 2e-16 ***
##---
##Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

##Residual standard error: 4.745 on 492 degrees of freedom
##Multiple R-squared:  0.7406,    Adjusted R-squared:  0.7338 
##F-statistic: 108.1 on 13 and 492 DF,  p-value: < 2.2e-16

 

이 외에도 summary(lm.fit)$r.sq를 통해 설명계수를 확인하고, summary(lm.fit)$sigma를 통해 RSE를 확인할 수 있다.

다중공선성 확인

library(car)
vif(lm.fit)

##rim       zn    indus     chas      nox       rm      age      dis      rad      tax 
##1.792192 2.298758 3.991596 1.073995 4.393720 1.933744 3.100826 3.955945 7.484496 9.008554 
## ptratio    black    lstat 
##1.799084 1.348521 2.941491 

설명변수의 비선형 변환

lm.fit2=lm(medv~lstat+I(lstat^2), data=Boston)
summary(lm.fit2)

##Call:
##lm(formula = medv ~ lstat + I(lstat^2), data = Boston)

##Residuals:
##     Min       1Q   Median       3Q      Max 
##-15.2834  -3.8313  -0.5295   2.3095  25.4148 

##Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
##(Intercept) 42.862007   0.872084   49.15   <2e-16 ***
##lstat       -2.332821   0.123803  -18.84   <2e-16 ***
##I(lstat^2)   0.043547   0.003745   11.63   <2e-16 ***
##---
##Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

##Residual standard error: 5.524 on 503 degrees of freedom
##Multiple R-squared:  0.6407,    Adjusted R-squared:  0.6393 
##F-statistic: 448.5 on 2 and 503 DF,  p-value: < 2.2e-16

 

주어진 설명변수 X에 대해 I(X^2)를 사용하여 설명변수 X^2를 생성하였다.

 

lm.fit=lm(medv~lstat, data=Boston)
anova(lm.fit, lm.fit2)

##Analysis of Variance Table

##Model 1: medv ~ lstat
##Model 2: medv ~ lstat + I(lstat^2)
##  Res.Df   RSS Df Sum of Sq     F    Pr(>F)    
##1    504 19472                                 
##2    503 15347  1    4125.1 135.2 < 2.2e-16 ***
##---
##Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 

 

anova함수를 이용해 이 두 모델을 비교하는 가설검증을 수행한다다.

귀무가설은 두 모델이 동등하게 데이터를 잘 적합했다는 것이고, 대립가설은 모델2가 더 낫다는 것을 의미한다.

귀무가설을 기각하므로 설명변수 lstat^2까지 포함한 모델이 기존 모델보다 훨씬 낫다는 것을 확인할 수 있다.

 

par(mfrow=c(2, 2))
plot(lm.fit2)

 

 

새로 구축한 모델의 경우 잔차에 구분할 수 있는 패턴이 거의 보이지 않는다는 것을 알 수 있다. 즉 잘 구축된 모델이라는 것 !

 

 

 

728x90