회귀모델과 예측변수 수의 관계

  • 어떤 회귀분석 문제에서는 많은 변수를 예측변수로 사용할 수 있다.
  • 예를 들어 주택 가치를 예측하기 위해 지하실 크기나 건축 연도와 같은 변수를 추가로 사용할 수 있다.
  • R에서는 회귀식에 다음과 같이 쉽게 변수들을 추가할수 있다.
> house_full <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade + PropertyType + NbrLivingUnits + SqFtFinBasement + YrBuilt + YrRenovated + NewConstruction, data=house, na.action=na.omit)
  • 변수가 많을 수록 더 좋은 회귀모델을 얻는 것은 아니다.
    • 오컴의 면도날: 모든 것이 동일한 조건에서는 복잡한 모델보다는 단순한 모델을 우선 사용해야 한다는 원리
    • 변수를 추가하면 항상 RMSE는 감소하고 \(R^2\)는 증가
    • AIC(Akaike's informarion criteria) 지표: 회귀모델에 항을 추가할 수록 불이익을 주는 지표
      • \(P\): 변수의 개수
      • \(n\): 데이터의 개수
\begin{eqnarray}\mathop{\textrm{AIC}} = 2P + n\log \Bigg(\frac{\mathop{\textrm{RSS}}}{n}\Bigg)\end{eqnarray}
    • AIC의 값이 최소가 되는 모델을 찾아야 한다!
    • \(k\)개의 변수를 추가하면 \(2k\)만큼의 불이익을 받는다


AIC가 최소가 되는 모델 찾는 방법

  • 부분집합회귀(all subset regression): 모든 가능한 모델을 검색하는 방법
    • 변수의 모든 조합으로 구성된 회귀모델을 전부 만들어 비교해야 하므로 계산비용이 많음
    • 데이터와 예측변수가 많은 경우에 적합하지 않음
  • 단계적회귀(stppwise regression): 예측변수를 연속적으로 추가/삭제하면서 AIC가 낮아지는 모델을 찾는 방법
    • R의 MASS 패키지는 단계적 회귀함수 stepAIC를 제공
> install.packages("MASS")
> library("MASS")
> step <- stepAIC(house_full, direction="both")
Start:  AIC=671316
AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + 
    BldgGrade + PropertyType + NbrLivingUnits + SqFtFinBasement + 
    YrBuilt + YrRenovated + NewConstruction

                  Df  Sum of Sq        RSS    AIC
- NbrLivingUnits   1 3.6803e+09 1.6030e+15 671314
- YrRenovated      1 1.2789e+10 1.6030e+15 671314
- SqFtLot          1 2.5471e+10 1.6030e+15 671314
- NewConstruction  1 7.1632e+10 1.6030e+15 671315
<none>                          1.6030e+15 671316
- SqFtFinBasement  1 2.8579e+11 1.6033e+15 671319
- PropertyType     2 7.8637e+12 1.6108e+15 671444
- Bathrooms        1 1.0095e+13 1.6131e+15 671484
- Bedrooms         1 2.9035e+13 1.6320e+15 671800
- SqFtTotLiving    1 1.4207e+14 1.7450e+15 673612
- YrBuilt          1 1.4711e+14 1.7501e+15 673690
- BldgGrade        1 2.3338e+14 1.8364e+15 674993

Step:  AIC=671314.1
AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + 
    BldgGrade + PropertyType + SqFtFinBasement + YrBuilt + YrRenovated + 
    NewConstruction

                  Df  Sum of Sq        RSS    AIC
- YrRenovated      1 1.2524e+10 1.6030e+15 671312
- SqFtLot          1 2.5211e+10 1.6030e+15 671313
- NewConstruction  1 7.2192e+10 1.6031e+15 671313
<none>                          1.6030e+15 671314
+ NbrLivingUnits   1 3.6803e+09 1.6030e+15 671316
- SqFtFinBasement  1 2.8911e+11 1.6033e+15 671317
- PropertyType     2 7.8769e+12 1.6109e+15 671443
- Bathrooms        1 1.0152e+13 1.6131e+15 671483
- Bedrooms         1 2.9229e+13 1.6322e+15 671801
- SqFtTotLiving    1 1.4222e+14 1.7452e+15 673613
- YrBuilt          1 1.4802e+14 1.7510e+15 673702
- BldgGrade        1 2.3544e+14 1.8384e+15 675021

Step:  AIC=671312.3
AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + 
    BldgGrade + PropertyType + SqFtFinBasement + YrBuilt + NewConstruction

                  Df  Sum of Sq        RSS    AIC
- SqFtLot          1 2.5083e+10 1.6030e+15 671311
- NewConstruction  1 7.1293e+10 1.6031e+15 671311
<none>                          1.6030e+15 671312
+ YrRenovated      1 1.2524e+10 1.6030e+15 671314
+ NbrLivingUnits   1 3.4152e+09 1.6030e+15 671314
- SqFtFinBasement  1 2.9330e+11 1.6033e+15 671315
- PropertyType     2 7.8650e+12 1.6109e+15 671441
- Bathrooms        1 1.0238e+13 1.6132e+15 671483
- Bedrooms         1 2.9219e+13 1.6322e+15 671799
- SqFtTotLiving    1 1.4221e+14 1.7452e+15 673611
- YrBuilt          1 1.6196e+14 1.7650e+15 673915
- BldgGrade        1 2.3548e+14 1.8385e+15 675020

Step:  AIC=671310.7
AdjSalePrice ~ SqFtTotLiving + Bathrooms + Bedrooms + BldgGrade + 
    PropertyType + SqFtFinBasement + YrBuilt + NewConstruction

                  Df  Sum of Sq        RSS    AIC
- NewConstruction  1 6.3500e+10 1.6031e+15 671310
<none>                          1.6030e+15 671311
+ SqFtLot          1 2.5083e+10 1.6030e+15 671312
+ YrRenovated      1 1.2396e+10 1.6030e+15 671313
+ NbrLivingUnits   1 3.1669e+09 1.6030e+15 671313
- SqFtFinBasement  1 2.8652e+11 1.6033e+15 671314
- PropertyType     2 7.8468e+12 1.6109e+15 671439
- Bathrooms        1 1.0215e+13 1.6132e+15 671481
- Bedrooms         1 2.9451e+13 1.6325e+15 671801
- SqFtTotLiving    1 1.4593e+14 1.7490e+15 673667
- YrBuilt          1 1.6199e+14 1.7650e+15 673914
- BldgGrade        1 2.3547e+14 1.8385e+15 675018

Step:  AIC=671309.8
AdjSalePrice ~ SqFtTotLiving + Bathrooms + Bedrooms + BldgGrade + 
    PropertyType + SqFtFinBasement + YrBuilt

                  Df  Sum of Sq        RSS    AIC
<none>                          1.6031e+15 671310
+ NewConstruction  1 6.3500e+10 1.6030e+15 671311
+ SqFtLot          1 1.7290e+10 1.6031e+15 671311
+ YrRenovated      1 1.1567e+10 1.6031e+15 671312
+ NbrLivingUnits   1 3.7093e+09 1.6031e+15 671312
- SqFtFinBasement  1 2.6805e+11 1.6033e+15 671312
- PropertyType     2 8.5458e+12 1.6116e+15 671450
- Bathrooms        1 1.0235e+13 1.6133e+15 671480
- Bedrooms         1 2.9483e+13 1.6326e+15 671801
- SqFtTotLiving    1 1.4722e+14 1.7503e+15 673686
- YrBuilt          1 1.7535e+14 1.7784e+15 674117
- BldgGrade        1 2.3572e+14 1.8388e+15 675020
    • 함수 실행 결과 house full에서 'NewConstruction'과 'SqFtlot', 'YrRenovated', 'NbrlivingUnits' 4개 변수가 삭제된 모델이 만들어졌다.
> step

Call:
lm(formula = AdjSalePrice ~ SqFtTotLiving + Bathrooms + Bedrooms + 
    BldgGrade + PropertyType + SqFtFinBasement + YrBuilt, data = house, 
    na.action = na.omit)

Coefficients:
              (Intercept)              SqFtTotLiving                  Bathrooms                   Bedrooms  
               6227632.22                     186.50                   44721.72                  -49807.18  
                BldgGrade  PropertyTypeSingle Family      PropertyTypeTownhouse            SqFtFinBasement  
                139179.23                   23328.69                   92216.25                       9.04  
                  YrBuilt  
                 -3592.47  


  • 전진선택법(forward selection method): 예측변수 없이 시작해서 각 단계에서 \(R^2\)에 가장 큰 기여도를 갖는 예측변수를 하나씩 추가하고 기여도가 통계적으로 더 이상 의미가 없을 때 중지
  • 후진선택법(backward selection method) 또는 후진제거법(backward elimination method): 전체 변수를 다 사용하는 회귀모델에서 모든 예측변수가 통계적으로 의미를 갖는 모델이 될 때까지 통계적으로 의미가 없는 예측변수를 제거


벌점회귀

  • 벌점회귀(penalized rcgression): AIC와 비슷한 개념
    • 모델 회귀식에 많은 변수(파라미터)가 모델에 불이익을 주는제약조건을 추가
    • 단계적, 전진선택, 후진선택처럼 예측변수를 완전히 제거하는 대신, 벌점회귀에서는 계수 값을 작게하거나 경우에 따라 거의 0으로 만들어 벌점을 적용
    • 많이 시용되는 벌점회귀 방법으로는 능선회귀(ridge regression)와 라소회귀(lasso regression)가 있음


과적합

  • 단계적 회귀분석과 모든 부분집합회귀는 모델을 평가하고 조정하는 데 표본 데이터를 사용
  • 만들어진 회귀모델이 과적합(overfitting)되어 표본 데이터에는 잘 맞지만 새 데이터를 적용할 때에는잘 맞지 않을 수 있음
  • 과적합을 방지하기 위해 교차타당성검사를 통해 모델의 유효성을 확인해야 한다
  • 선형회귀분석에서는 회귀분석 모델이 단순한 선형 구조를 갖기 때문에 과적합 문제가 크게 발생하지는 않는다


'Predictive Analytics' 카테고리의 다른 글

회귀를 이용한 예측  (0) 2019.09.26
가중회귀  (0) 2019.09.26
모델 평가  (0) 2019.09.24
최소제곱법  (0) 2019.09.24
단순선형회귀  (0) 2019.09.19

+ Recent posts