[DataScience][Study] 데이터 과학을 위한 통계 4-1

8 분 소요


Chapter4. 회귀와 예측

  • 통계학에서 일반적인 목표 : 변수 X (X~1~ … X~p~) 가 변수 Y와 관련이 있는지? 이를 이용해 Y를 예측할 수 있는지?
  • 통계와 데이터 과학이 강하게 연결되어 있다.
    • 예측변수 값을 기반으로 결과(목표) 변수를 예측분야
    • 이상 검출 영역
  • 회귀 진단은 비정상적인 데이터를 검출하는데 사용

4.1 단순 선형 회귀

  • 단순선형회귀 모델 : 한 변수와 또 다른 변수의 크기 사이에 관계를 보여줌

  • 변수간의 크기 : X↑ → Y↑ , X↑ → Y↓

4.1.1 회귀식

  • 상관관계가 두변수 사이의 전체적인 관련 강도를 측정하는 것이라면, 회귀는 관계 자체를 정량화하는 방법이라는 점에서 차이가 있음.

4.1.1 회귀식

  • 단순선형회귀를 통해 X의 변화량에 따른 Y의 변화량을 추정 가능.

    • 상관계수의 경우 X, Y가 서로 바뀌어도 상관 없음
    • 회귀에서는 선형관계(즉, 직선)을 이용해 변수 X로부터 변수 Y를 예측하고자 함.
  • X : 독립 변수, 예측 변수 (머신러닝에서 피처벡터)

  • Y : 종속 변수, 응답 변수 (머신러닝에서 목표벡터)

  • 사례 : 면진에 대한 노출 연수와 폐활량의 관계

    • R 함수 lm으로 선형회귀 함수 피팅

      > model <- lm(PEFR ~ Exposure, data=lung)
      > model
          
      Call:
      lm(formula = PEFR ~ Exposure, data = lung)
          
      Coefficients:
      (Intercept)     Exposure  
          424.583       -4.185
      
      • lm 함수는 선형 모형을 뜻함. linear model의 줄임말
      • ~ 기호는 Exposure를 통해 PEFR을 예측한다
      • 절편 b~0~ : 424.583
      • 노동자가 노출된 연수가 0일때 예측되는 PEFR이라고 해석 가능
      • 회귀 계수 b~1~ : -4.185
      • 노동자가 면접에 노출되는 연수가 1씩 증가할 때마다 PEFR은 -4.185비율로 줄어듬.

4.1.2 적합값과 잔차

  • 적합값 : 예측값 지칭. 보통 Y 햇으로 나타냄.

  • 잔차 : 원래 값에서 예측한 값을

  • R에서 제공하는 predict와 residuals 함수

    > fitted <- predict(model)
    > resid <- residuals(model)
    > 
    > fitted
           1        2        3        4        5        6        7        8 
    424.5828 424.5828 424.5828 424.5828 420.3982 416.2137 416.2137 416.2137 
           9       10       11       12       13       14       15       16 
    412.0291 412.0291 412.0291 412.0291 412.0291 412.0291 407.8445 407.8445 
    ...........................(생략).................................      
    > 
    > resid
               1            2            3            4            5 
     -34.5828066  -14.5828066    5.4171934   35.4171934   -0.3982301 
               6            7            8            9           10 
    -136.2136536    3.7863464  103.7863464  197.9709229  177.9709229 
              11           12           13           14           15 
      17.9709229   -2.0290771  -52.0290771  -92.0290771 -297.8445006 
    ...........................(생략).................................
    

4.1.3 최소제곱

  • 실무에서 회귀선은 잔차들을 제곱한 값들의 합인 잔차제곱합(RSS : residual sum of squal)을 최소화하는 선
  • 최소 제곱회귀 혹은 보통최소제곱회귀 : 잔차제곱합을 최소화하는 방법

4.1.4 예측 대 설명(프로파일링)

  • 예전
    • 예측변수와 결과변수 사이에 있을것으로 추정되는 선형 관계를 밝히는 것이 회귀분석의 용도
    • 데이터 간의 관계를 이해하고 그것을 설명하는 것을 목표
    • 즉, 기울기 b를 추정하는 것에 초점
    • 사례 : 소비자 지출과 GDP 성장 간의 관계 추측
  • 지금
    • 회귀분석은 새로운 데이터에 대한 개별 결과를 예측하는 모델(예측모델)을 구성하는데 사용
    • 주요 관심대상은 적합값(Y hat)
    • 사례 : 마케팅에서 광고 캠페인의 크기에 따른 수익 변화 예측
  • 데이터를 피팅한 회귀모형은 X의 변화가 Y의 변화를 유도하도록 설정.
    • 하지만 회귀방정식 자체가 인과관계가 되는 것은 아님.

4.2 다중선형회귀

  • 예측 변수가 여러개일때
  • 최소제곱법을 이용한 피팅, 적합값과 잔차의 정의 같은 단순선형회귀에서 다룬 기타 모든 개념은 다중선형회귀에도 그대로 확장되어 적용

4.2.1 킹 카운티 주택 정보 예제

  • 주택 가치 추정은 회귀분석 대표적 사례

  • house라는 변수명을 가진 data.frame 객체에 저장된, 킹 카운티(워싱턴 시애틀 위치)의 주택 가격 데이터 일부

    > head(house[, c("AdjSalePrice", "SqFtTotLiving", "SqFtLot", "Bathrooms",
    +                "Bedrooms", "BldgGrade")])
      AdjSalePrice SqFtTotLiving SqFtLot Bathrooms Bedrooms BldgGrade
    1       300805          2400    9373      3.00        6         7
    2      1076162          3764   20156      3.75        4        10
    3       761805          2060   26036      1.75        4         8
    4       442065          3200    8618      3.75        5         7
    5       297065          1720    8620      1.75        4         7
    6       411781           930    1012      1.50        2         8
    
  • 목표 : 위의 변수들로부터 판매 금액을 예측하는 것.

  • lm 함수의 우변에 더 많은 항을 추가함으로 다중회귀 사례 처리

    > house_lm <- lm(AdjSalePrice ~ SqFtTotLiving+ SqFtLot+ Bathrooms+
    +                Bedrooms+ BldgGrade, data = house, na.action = na.omit)
    > house_lm
      
    Call:
    lm(formula = AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + 
        Bedrooms + BldgGrade, data = house, na.action = na.omit)
      
    Coefficients:
      (Intercept)  SqFtTotLiving        SqFtLot      Bathrooms       Bedrooms  
       -5.287e+05      2.127e+02     -1.430e-02     -1.823e+04     -4.657e+04  
        BldgGrade  
        1.088e+05
    

    na.action = na.omit : 모델을 만들 때 결측값이 있는 레코드를 삭제하는 옵션

4.2.2 모형 평가

  • 제곱근 평균제곱오차(RMSE)

    • 데이터 과학에서 가장 중요한 성능 지표
    • 예측된 Y hat 값들의 평균제곱오차의 제곱근
    • 전반적인 모델의 정확도를 측정하고 다른모데로가 비교하기 위한 기준이 됨.
  • 잔차 표준오차 (RSE)

    • RMSE와 차이점은 분모가 데이터 수가 아닌 자유도
  • 실무에서 RMSERSE의 차이는 아주 작다.

  • R의 summary 함수 : 회귀모형에 대한 RSE뿐 아니라 다른 지표들도 계산

    > summary(house_lm)
      
    Call:
    lm(formula = AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + 
        Bedrooms + BldgGrade, data = house, na.action = na.omit)
      
    Residuals:
         Min       1Q   Median       3Q      Max 
    -1950841  -114032   -21451    83578  9549956 
      
    Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
    (Intercept)   -5.287e+05  1.443e+04 -36.629  < 2e-16 ***
    SqFtTotLiving  2.127e+02  3.401e+00  62.552  < 2e-16 ***
    SqFtLot       -1.430e-02  5.760e-02  -0.248    0.804    
    Bathrooms     -1.823e+04  3.225e+03  -5.654 1.58e-08 ***
    Bedrooms      -4.657e+04  2.329e+03 -19.999  < 2e-16 ***
    BldgGrade      1.088e+05  2.164e+03  50.266  < 2e-16 ***
    ---
    Signif. codes:  0 *** 0.001 ** 0.01 * 0.05 . 0.1   1
      
    Residual standard error: 259400 on 27057 degrees of freedom
    Multiple R-squared:  0.5348,	Adjusted R-squared:  0.5348 
    F-statistic:  6222 on 5 and 27057 DF,  p-value: < 2.2e-16
    
  • 결정계수(R 제곱 통계량, R^2^)

    • 범위는 0~ 1, 모델 데이터의 변동률 측정
    • 모델이 데이터에 얼마나 적합한지 평가할 때 회귀분석을 설명하기 위한 용도로 활용됨.
    • 분모는 Y의 분산에 비례함.
    • R은 추정한 계수들과 함께, 계수의 표준오차(SE)와 t통계량을 함께 출력하여 보여줌.
  • t 통계량, p 값 : 계수가 통계적으로 유의미한 정도를 나타냄.

    • 즉, 예측변수와 목표변수를 랜덤하게 재배치했을 때 우연히 얻을 수 있는 범위를 어느정도 벗어났는지 측정.
    • t 통계량이 높을수록(p 값이 낮을 수록) 예측 변수는 더욱 유의미

4.2.3 교차타당성검사

  • 전형적인 통계적 회귀 측정 지표들은 모두 표본내 지표들(데이터를 똑같이 그대로 사용)

  • 데이터의 다수는 적합한 모델을 찾는데 사용하고, 소수는 모델을 테스트하는데 사용한다.
    • 보통 비율이 70/30으로 잡는다.
  • 교차 타당성검사(cross-validation)
    • 홀드아웃 샘플 아이디어를 여러 개의 연속된 홀드아웃 샘플로 확장한 것
    • 대표적으로 k 다중 교차타당성검사(k-fold cross-validation) 알고리즘이 있다.

4.2.4 모형 선택 및 단계적 회귀

  • 많은 변수를 추사한다고 해서 꼭 더 좋은 모델을 얻는것은 아님

  • 모든 것이 동일한 조건에서는, 복잡한 모델보다는 단순한 모델을 우선 사용해야 함.

  • 변수를 추가하면 항상 RMSE는 감소하고 R^2^ 은 증가.

  • AIC : 모델에 항을 추가할수록 불이익을 주는 측정 기준

  • AIC를 최소화하는 방법

    • 부분집합회귀

      • 모든 가능한 모델을 검색하는 방법
      • 계산비용이 많이 들고, 대용량 데이터와 변수가 많은 문제에 적합하지 않다.
    • 단계적 회귀

      • 예측변수를 연속적으로 추가/삭제하여 AIC를 낮추는 모델

      • R에서는 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에서 sqFtLot, NbrLivingUnits, YrRenovated, NewConstruction 라는 변수들이 삭제된 모델을 선택함.

    • 전진선택, 후진선택

      • 전진선택 : 예측 변수 없이 각 단계에서 R^2^에 가장 큰 기여도를 갖는 예측 변수를 하나씩 추가하고 기여도가 통계적으로 더 이상 유의미하지 않을 때 중지
      • 후진 선택 : 전체 모델로 시작해서, 모든 예측 변수가 통계적으로 유의미한 모델이 될 때까지, 통계적으로 유의하지 않은 예측변수들을 제거해 나감.
  • 별점회귀

    • 개념적으로는 AIC와 같다.
    • 모델 적합 방정식에는 많은 변수(파라미터)에 대해 모델에 불이익을 주는 제약 조건을 추가
    • 계수 크기를 감소시키거나 경우에 따라서 거의 0으로 만들어 벌점을 적용
    • 방법 : 능형회귀, 라소
  • 단계적 회귀분석과 모든 부분집합회귀

    • 모델을 평가하고 조정하는 표본내 방법

    • 선택된 모델이 과적합(오버피팅)될 수 있음.

    • 이를 방지하기 위해 교차타당성검사를 통해 모델의 유효성을 알아보는 것

4.2.5 가중회귀

  • 통계학자들은 다양한 목적으로 가중회귀 사용

  • 복잡한 설문 분석에 중요

  • 사례

    • 주택 가격 데이터의 경우, 오래된 매매 정보일 수록 최근 정보보다는 신뢰하기 어렵다.

    • DocumentDate값을 이용하여 2005년(데이터 수집을 시작한) 이래 지난 연수를 가중치로 사용

      > library(lubridate)
      > 
      > house$Year = year(house$DocumentDate)
      > house$Weight = house$Year - 2005
      > 
      > house_wt <- lm(AdjSalePrice ~ SqFtTotLiving+ SqFtLot+ Bathrooms+
      +                Bedrooms+ BldgGrade, data = house, weights = Weight)
      > round(cbind(house_lm=house_lm$coefficients,
      +             house_wt=house_wt$coefficients, digits=3))
                    house_lm house_wt digits
      (Intercept)    -528724  -580378      3
      SqFtTotLiving      213      230      3
      SqFtLot              0        0      3
      Bathrooms       -18233   -23335      3
      Bedrooms        -46574   -54234      3
      BldgGrade       108780   116037      3
      

참고 : 해당 포스트의 내용은 O’REILLY 시리즈 데이터 과학을 위한 통계 ( 피터 브루스 & 앤드루 브루스 저, 한빛미디어 출판) 도서를 요약한 내용입니다.

댓글남기기