일반화가법모델

  • 사전 지식이나 회귀 진단을 통해 응답변수와 예측변수 사이에 비선형 관계가 있다는 것을 알았다고 하자.
  • 다항 항은 관계를 포착하기에 유연성이 부족할 수 있으며 스플라인 항은 매듭을 어디로 할지 정해줘야 한다.
  • 일반화가법모델(GAM, Generalized Additive Model): 스플라인 회귀를 자동으로 찾는 기술
  • R의 gam 패키지로 주택 데이터에 GAM 모델을 적합하는 방법
    • s(SqFtTotliving) 옵션: 스플라인 항에 대한 ‘최적’ 매듭 점을 찾도록 gam 힘수에 전달
> lm_gam <- gam(AdjSalePrice ~ s(SqFtTotLiving) + SqFtLot + Bathrooms +  Bedrooms + BldgGrade, data=house_98105)
> terms <- predict.gam(lm_gam, type='terms')
> partial_resid <- resid(lm_gam) + terms
> df <- data.frame(SqFtTotLiving = house_98105[, 'SqFtTotLiving'], Terms = terms[, 5], PartialResid = partial_resid[, 5])
> ggplot(df, aes(SqFtTotLiving, PartialResid)) + geom_point(shape=1) + scale_shape(solid = FALSE) + geom_smooth(linetype=2) + geom_line(aes(SqFtTotLiving, Terms)) + theme_bw()
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

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

스플라인  (0) 2019.10.01
다항회귀  (0) 2019.09.30
회귀 진단: 가설 검정  (0) 2019.09.27
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27

스플라인

  • 다항회귀는 비선형 관계에 대해 어느 정도의 곡률을 담아낼 수 있다.
  • 하지만 3차, 4차 다항식과 같이 고차항을 추가하는 것은 종종 회귀방정식에 바람직하지 않은 ‘물결모양’의 그래프를 만들어낸다.
  • 비선형 관계를 모델링하는 또 다른 더 나은 방법은 스플라인을 사용하는 것이다.
  • 스플라인(spline): 고정된 점들 사이를 부드럽게 보간하는 방법
    • 스플라인은 원래 선박이나항공기를 건조할 때, 부드러운 곡선을 그리기 위해 사용
    • ‘덕(duck)’이라는 추를 사용하여 앓은 나무 조각을 구부려서 스플라언을 만들곤 했다

spline duck에 대한 이미지 검색결과

그림 출처: http://forum.woodenboat.com/showthread.php?146441-A-Duck-Trap-Wherry-in-Utah


  • 스플라인의 기술적인 정의: 일련의 조각별 연속 다항식
    • 루마니아 출신 수학자 이자크 야코프 쉰베르크(Isaac Jacob Schoenberg)가 2차 세계 대전 중 미국의 애버딘 전차
      주행 시험장에서 처음 개발
    • 구간별 다항식은 예측변수를 위한 일련의 고정된 점 (매듭(knot)) 사이를 부드럽게 연결
  • 스플라인을 구하는 것은 다항회귀보다 훨씬 복잡
  • R 패키지 splines는 회귀모형에서 b-스플라인 항을 만드는 데 사용할 수 있는 bs 힘수를 포함
    • b-스플라인 항을 주택 회귀모형에 추가히는 방법
    • 다항식의 차수와 매듭의 위치, 이 두 가지 파라미터를 설정해야 함
    • 예측변수 SqFtTotLiving은 3차 스플라인 (degree = 3)을 사용
    • bs의 기본 설정은 매듭을 경계에 배치하는데, 매듭을 하위 사분위 (. 25), 중간 사분위 (.5), 상위 사분위 (.75) 에 배치
> library(splines)
> knots <- quantile(house_98105$SqFtTotLiving, p=c(.25, .5, .75))
> lm_spline <- lm(AdjSalePrice ~ bs(SqFtTotLiving, knots=knots, degree=3) + SqFtLot + Bathrooms + Bedrooms + BldgGrade,  data=house_98105)
> terms1 <- predict(lm_spline, type='terms')
> partial_resid1 <- resid(lm_spline) + terms
> df1 <- data.frame(SqFtTotLiving = house_98105[, 'SqFtTotLiving'], Terms = terms1[, 1], PartialResid = partial_resid1[, 1])
> ggplot(df1, aes(SqFtTotLiving, PartialResid)) + geom_point(shape=1) + scale_shape(solid = FALSE) + geom_smooth(linetype=2) + geom_line(aes(SqFtTotLiving, Terms)) + theme_bw()
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

  • 선형 항에서는 계수가 변수에 대한 직접적인 의미를 갖는 반면, 스플라인 항의 계수는 해석하기 어렵다.
  • 스플라인의 적합도를 확인하기 위해 시각화 방법을 사용히는 것이 더 유용
  • 다항회귀 모델과는 달리 스플라인 모델은 좀 더 매끄럽게 매칭되며 스플라인의 유연성이 뛰어난 것을 볼 수 있다.
  • 이 경우, 회귀선이 데이터에 더 가깝게 맞는 것을 알 수 있지만 이것이 스플라인 회귀가 더 좋다는 것을 의미할까?
  • 반드시 그런 것은 아니다. 크기가 아주 작은 주택(1,000제곱피트 미만)이 약간 큰 주택보다 더 높은 가치를 가질 것이라는 예측 결과는 경제적으로 맞지 않다.
    • 이것은 교란변수 때문일 수 있다.


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

일반화가법모델  (0) 2019.10.01
다항회귀  (0) 2019.09.30
회귀 진단: 가설 검정  (0) 2019.09.27
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27
  • 응답변수와 예측변수 간의 관계가 반드시 선형일 필요는 없다.
  • 약물 복용량에 따른 반응은 일반적으로 비선형성을 띤다.
    • 복용량을 두 배로 늘린다고 두 배의 반응이 나타나지는 않는다.
  • 제품에 대한 수요 역시 어떤 시점에서는 포화 상태가 되기 쉽다 보니 , 마케팅 비용은 선형함수가 아니다.
  • 비선형 효과를 회귀분석에 담기 위해 회귀모형을 확장하는 몇 가지 방법이 있다.
    • 다항식 회귀
    • 스플라인 회귀
    • 일반화가법모델(GAM)
    • 시계열데이터인 경우 AR, MA, ARIMA 등
    • 머신러닝 모델

다항회귀

  • 다항회귀(multilinear regression):  회귀식에 다항 항을 포함한 것
  • 예를틀변 응답변수 \(Y\)와 예측변수 \(X\) 사이의 이차 회귀는 다음과 같은 식으로 표현할 수 있다.
\begin{eqnarray} Y = b_0 + b_1X + b_2X^2 + \varepsilon \end{eqnarray}

  • 다항회귀는 poly 힘수를이용해 구할수 있다.
    • 킹 카운티 주택 데이터로 구한 SqFtToLiving에 대해 이차 다항식을 적합하는 과정
      • poly(SqFtToLiving, 2)1: 일차 항(선형 항)
      • poly(SqFtToLiving, 2)2: 이차 항

> house <- read.csv('house_sales.csv', sep='\t') > house_98105 <- house[house$ZipCode == 98105,] > lm(AdjSalePrice ~ poly(SqFtTotLiving, 2) + SqFtLot + BldgGrade + Bathrooms + Bedrooms, data=house_98105) Call: lm(formula = AdjSalePrice ~ poly(SqFtTotLiving, 2) + SqFtLot + BldgGrade + Bathrooms + Bedrooms, data = house_98105) Coefficients: (Intercept) poly(SqFtTotLiving, 2)1 poly(SqFtTotLiving, 2)2 SqFtLot -402530.47 3271519.49 776934.02 32.56 BldgGrade Bathrooms Bedrooms 135717.06 -1435.12 -9191.94


    • 편잔차그림


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

일반화가법모델  (0) 2019.10.01
스플라인  (0) 2019.10.01
회귀 진단: 가설 검정  (0) 2019.09.27
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27

회귀 진단

  • 설명을 위한 모델링에서는 앞서 설명한 여러 측정 지표들을 고려하여, 매 단계마다 모델이 데이터에 얼마나 적합한지를 평가
  • 대부분은 모델을 뒷받침하는 가정을 검정할 수 있는 잔차 분석을 기본으로 함
  • 이런 단계들은 직접적으로 예측 정확도를 다루는 것은 아니지만 예측 설정에 중요한 통찰을 줄수 있다.


이상점

  • 특이값이라고도 하는 극단값은 대부분의 측정값에서 멀리 벗어난 값을 의미
  • 위치와 변이를 추정할 때 이미 살펴본 것처럼, 회귀모형에서도 같은 문제가 발생
  • 회귀에서 이상점은 실제 \(y\) 값이 예측된 값에서 멀리 떨어져 있는 경우
  • 표준화잔차(standardized residuals): 잔차를 표준오차로 나눈 값
    • 이 값을 조사해서 이상점을 발견할 수 있다.
  • 이상점을 정상값들과 구분하는 데에 대한 통계 이론은 없다.
    • 어떤 관측값을 이상점이 라고 부르려면 다수 데이터로부터 얼마나 떨어져 있어야 하는지에 대한 (임의의) 경험칙이 존재
    • 예를 들어 상자그림에서 상자 경계선 바깥에 위치한 점들을 이상점이라고 본다.
    • 여기서 ‘너무 멀리 떨어져 있다는 말은 곧 ‘사분위범위의 1.5배보다 더 바깥에 있다’는 말과 같다.
  • 이와 비슷하게, 회귀에서는 이상점을 검출하기위해 표준화잔차를 주로 사용
    • 표준화잔차는 ‘회귀선으로부터 떨어진 정도를 표준오차의 수로 표현한 값’ 정도로 해석
    • 킹 카운티 주택 매매 데이터에서 우편번호가 98105인 지역의 데이터로 회귀모델링

> house <- read.csv('house_sales.csv', sep='\t') > zip_groups <- house %>% + mutate(resid = residuals(house_lm)) %>% + group_by(ZipCode) %>% + summarize(med_resid = median(resid), + cnt = n()) %>% + # sort the zip codes by the median residual + arrange(med_resid) %>% + mutate(cum_cnt = cumsum(cnt), + ZipGroup = factor(ntile(cum_cnt, 5))) > house <- house %>% + left_join(select(zip_groups, ZipCode, ZipGroup), by='ZipCode') > house_98105 <- house[house$ZipCode == 98105,] > lm_98105 <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade, data=house_98105) > lm_98105 Call: lm(formula = AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade, data = house_98105) Coefficients: (Intercept) SqFtTotLiving SqFtLot Bathrooms Bedrooms BldgGrade -772549.86 209.60 38.93 2282.26 -26320.27 130000.10


    • 디음과 같이 rstandard 함수를 이용해 표준화잔치를 구하고 order 힘수를 가지고 가장 작은 잔차의 위치를 얻을 수 있다.
> sresid <- rstandard(lm_98105)
> idx <- order(sresid, decreasing=FALSE)
> sresid[idx[1]]
    24333 
-4.326732 
> resid(lm_98105)[idx[1]]
    24333 
-757753.6 

    • 결과를 보면 표준오차의 4배 이상이나 회귀식과 차이가 남
    • 이에 해당하는 추정값은 $757,753. 이 특잇값에 해당하는 레코드는 디음과 같음
> house_98105[idx[1], c('AdjSalePrice', 'SqFtTotLiving', 'SqFtLot', 'Bathrooms', 'Bedrooms', 'BldgGrade')]
      AdjSalePrice SqFtTotLiving SqFtLot Bathrooms Bedrooms BldgGrade
24333       119748          2900    7276         3        6         7


    • 이 경우, 레코드가 뭔가 잘못됐다는 것을 알 수 있다.
    • 이 우편번호에 해당하는 지역에서 이 정도 평수라면 $119,748보다는 더 비싸야 정상
    • 이 주택 판매에 대한 법정 담보증서의 일부가 있어 가격이 낮은 것으므로 비정상적인 판매에 해당하며 회귀에 포함되어서는 안 된다.


  • 이상점은 ‘부주의한’ 데이터 입력 또는 단위 실수(예를 들어 천 단위를 그냥 일 단위로 기재히는 경우) 같은 문제들 때문에 발생할 수 있다.
  • 빅데이터의 경우, 새로운 데이터를 예측하기 위한 회귀분석에서 이상점이 그렇게 문제가 되지 는 않는다.
  • 그러나 이상점을 찾는 것이 주목적인 이상점 검출의 경우 이 값들이 매우 중요해진다.
  • 이상점은 사기 사건이나 갑작스러운 사건 발생과도 관련이 있다.
  • 따라서 이상점을 발견하는 것은 아주 중요한 사업 가치가 될 수 있다

영향값

  • 영향값(influential value): 있을 때와 없을 때 회귀식이 큰 차이를 보이는 값 또는 레코드
  • 주영향관측값(influential observation): 회귀모델에서 제외됐을 때중요한 변화를 가져오는 값
  • 회귀분석에서, 잔차가 크다고 해서 모두 이런 값이 되지는 않는다.
  • 사례
> seed <- 11
> set.seed(seed)
> x <- rnorm(25)
> y <- -x/5 + rnorm(25)
> x[1] <- 8
> y[1] <- 8
> plot(x, y, xlab='', ylab='', pch=16)
> model <- lm(y~x)
> abline(a=model$coefficients[1], b=model$coefficients[2], col="blue", lwd=3)
> model <- lm(y[-1]~x[-1])
> abline(a=model$coefficients[1], b=model$coefficients[2], col="red", lwd=3, lty=2)

    • 파란색 실선은 모든 데이터를 고려한 회귀선
    • 빨간색 점선은 오른쪽 위의 한 점을 제거했을 때의 회귀선
    • 오른쪽 위의 데이터 값은 회귀 결과에 큰 영향을 주지만 큰 이상점으로 나타난 것은 아니다.
    • 이 데이터 값은 회귀에 대한 높은 레버리지(leverage)를 가진 것으로 볼 수 있다

  • 단일 레코드의 영향력을 결정하는 지표
    • 햇 값(hat-value): \(2(P=1)/n\) 이상의 값들은 레버리지가 높은 데이터로 판단
    • 쿡 거리(Cook's distance): 레버리지와 잔차의 크기를 합쳐서 영향력을 판단하며 경험적으로 \(4/(n-P-1)\)보다 크면 영향력이 높다고 판단


  • 영향력 그림(influence plot) 또는 거품그림(bubble plot): 표준화잔차와 햇 값, 쿡 거리를 모두 한번에 표현하는 그림
    • 우편번호가 98105인 킹 카운티 주택 데이터에 대한 영향력 그림
> std_resid <- rstandard(lm_98105)
> cooks_D <- cooks.distance(lm_98105)
> hat_values <- hatvalues(lm_98105)
> plot(hat_values, std_resid, cex=10*sqrt(cooks_D))
> abline(h=c(-2.5, 2.5), lty=2)

    • 회귀에서 몇몇 데이터 포인트가 정말로 큰 영향력을 보임을 알 수 있다.
    • 쿡 거리는 cooks.distance 힘수를 사용해 계산하고 hatvalues 함수를 이용해 회귀 진단을 구할 수 있다.
    • 햇 값은 \(x\)축, 잔차 정보는 \(y\)축에 위치하며, 쿡 거리에 해당하는 값은 원의 크기로 표현된다


  • 전체 데이터를 모두 사용했을 때와 영향력이 가장 큰 데이터를 제거하고 구한 회귀 결과 비교
    • Bathrooms 변수의 회귀계수가 크게 변한다


  • 데이터의 규모가 작을 경우에만 영향력이 큰 관측 데이터를 확인하는 작업이 유용하며
  • 빅데이터의 경우에는 어떤 한 값이 회귀식에 큰 변화를 주기란 쉽지 않기 때문이다


이분산성

  • 잔차의 분포는 공식적인 통계적 추론(가설검정 및 \(p\)-값)의 유효성과 관련이 있어 통계학자의 관심 대상
  • 보통최소제곱(OLS) 추정은 다양한 분포 가정하에서 편향성도 없고 경우에 따라 ‘최적’이라고 할 수 있는 추정을 제공하므로 예측 정확도를 중요하게 생각하는 데이터 과학자는 잔차의 분포가 관심 대상이 아님
  • 형식적 추론이 완전히 유효하려면 잔차에 대한 3가지 가정이 필요
    • 동일한 분산을 가진다(등분산(equal variance) 가정)
    • 정규분포를 따른다(정규성(normality) 가정)
    • 서로 독립이다(독립성(independence) 가정)
  • 데이터 과학자가 신경쓰는 것 한 가지는 잔차에 대한 가정을 기반으로 예상 값에 대한 신뢰구간을 계산하는 방법

  • 이분산성(heteroskedasticity): 다양한 범위의 예측값에 따라 잔차의 분산이 일정하지 않은 것
    • 어떤 일부분에서의 오차가 다른 곳보다 훨씬 크게 나타나는 것
    • 우편번호가 98105인  킹 카운티 주택 회귀모델에서 절대잔차와 예측값의 관계
      • 잔차의 분산은 고가의 주택일수록 증가하는 경향이 있다
      • 가격이 낮은 경우도 마찬가지
      • 이 회귀모델은 주택가격이 너무 높거나 너무 낮은 경우에는 예측을 잘하지 못하므로 모델이 다소 불완전하다
> df <- data.frame(resid = residuals(lm_98105), pred = predict(lm_98105))
> ggplot(df, aes(pred, abs(resid))) + geom_point() + geom_smooth() 
`geom_smooth()` using method = 'loess' and formula 'y ~ x'



    • 잔차에 대한 히스토그램
      • 정규분포보다 확연히 더 긴 꼬리를 가지며 , 더 큰 잔차에 대해 약간의 왜곡을 보인다.
 hist(std_resid, main='')



편잔차그림과 비선형성

  • 편잔차그림(partial residual plot): 예측모델이 예측변수와 결과변수 간의 관계를 얼마나 잘 설명하는지 시각화하는 방법
    • 이상점의 검출과 함께 데이터 과학자들에게 가장 중요한 모델 진단 방법
  • 편잔차그림의 기본 개념
    • 하나의 예측변수와 응답변수 사이의 관계를 모든 다른 예측 변수로부터 분리하는 것
    • 편잔차는 단일 예측변수를 기반으로 한 예측값과 전체를 고려한 회귀식의 실제 잔차를 결합하여 ‘만든 결과’
    • 예측변수 \(X_i\)의 편잔치는 일반 잔차에 \(X_i\)와 연관된 회귀항을 더한 값
      • \(\hat{b}_i\): 회귀계수의 추정값
\begin{eqnarray} \textrm{partial residual} = \textrm{residual} + \hat{b}_iX_i\end{eqnarray}
    • R의 predict 힘수를 이용해서 개별 회귀항 \(\hat{b}_iX_i\)를 얻을 수 있다.
> terms <- predict(lm_98105, type='terms')
> partial_resid <- resid(lm_98105) + terms
> partial_resid
      SqFtTotLiving      SqFtLot   Bathrooms     Bedrooms     BldgGrade
1036    -9582.44883 -357174.9708 -450660.995 -524932.2009 -412036.63955
1769  -189558.76910  -78529.9327 -159020.193 -174374.6343 -114119.61053
1770   -98583.94036   11964.9452  -63853.317  -52887.4899 -148952.83461
1771  -130174.59786  -92384.0872 -187669.007 -176703.1797 -272768.52442
1783   306968.80331   48451.3706  -96567.562 -142236.2342   74339.15810
1784   -28140.43476 -121486.4246 -132131.685 -122877.5562  -88942.80121
1785   571952.99093  266306.1851  276268.714  284381.7110  448316.56574


  • 편잔차그림에서 \(x\)축은 \(X_i\)를, \(y\)축은 편잔차를 의미
> df <- data.frame(SqFtTotLiving = house_98105[, 'SqFtTotLiving'], Terms = terms[, 'SqFtTotLiving'], PartialResid = partial_resid[, 'SqFtTotLiving'])
> ggplot(df, aes(SqFtTotLiving, PartialResid)) + geom_point(shape=1) + scale_shape(solid = FALSE) + geom_smooth(linetype=2) + geom_line(aes(SqFtTotLiving, Terms))  
`geom_smooth()` using method = 'loess' and formula 'y ~ x'


  • 편잔차는 SqFtTotLiving 변수가 주택 가격에 얼마나 영향을 미치는지 보여준다.
    • SqFtTotLiving 변수와 가격 사이의 관계는 분명히 비선형이다.
    • 회귀선에 따르면
      • 1,000제곱피트보다 작은 평수의 집에 대해서는 가격을 원래보다 낮게 추정
      • 2,000∼3.000제곱피트 집에 대해서는 더 높게 추정
      • 4 , 000제곱피트 이상에 관해서는 데이터 개수가 너무 적어 뭐라고 결론을 내릴 수가 없다.


  • 이러한 비선형성은 이렇게 이해할 수 있다.
    • 원래 큰 집에 500제곱피트를 추가히는 것보다, 작은 집에 500제곱피트를 추가하는 것이 훨씬 더 큰 차이를 만든다.
    • 따라서 SqFtTotliving에 대해 단순선형항 대신, 비선형항을 고려할 것을 생각해볼 수 있다.



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

스플라인  (0) 2019.10.01
다항회귀  (0) 2019.09.30
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27
회귀를 이용한 예측  (0) 2019.09.26

회귀식 해석 Interpreting the Regression Equation

  • 데이터 과학에서 회귀의 가장 중요한 용도
    • 일부 종속변수(결과변수)를 예측하는 것
    • 때로는 예측변수와 결과 간 관계의 본질을 이해하기 위해 방정식 자체로부터 통찰을 얻는 것


예측변수들 간의 관계

  • 상관변수(correlated variable): 예측변수들끼리 서로 높은 상관성을 갖을 때, 개별 계수를 해석하는 것은 어렵다.
  • 상관변수의 예
    • 아래 회귀식에서 Bedrooms의 계수는 음수
    • 침실의 개수를 늘릴 수록 가격이 하락하는 것을 의미
    • 예측변수들이 서로 연관되어 있어 발생하는 현상
    • 크기가 같은 2개의 집에서 침실이 여러 개 있다는 것은 침실이 작아진다는 것을 의미하므로 선호도가 떨어져 가격이 낮은 것이 일반적

> house <- read.csv('house_sales.csv', sep='\t') > house_full <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade + PropertyType + NbrLivingUnits + SqFtFinBasement + YrBuilt + YrRenovated + NewConstruction, data=house, na.action=na.omit) > step_lm <- stepAIC(house_full, direction="both") > step_lm 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


  • 상호 연관된 예측변수들을 사용하면 회귀계수의 부호와 값의 의미를 해석하기가 어려울 수 있다.
    • 추정값의 표준오차가 커진다
  • 침실 수, 평수 욕실 수에 대한 변수들은 모두 상관관계가 있다.
  • 방정식에서 변수 SqFtTotLiving, SqFtFinBasement, Bathrooms를 제거한 후 얻은 회귀모델을 통해 이것을 설명할 수 있다.
    • update 함수를 사용하여 모델의 변수(집의 크기인 SqFtTotLiving)를 제외한 결과 Bedrooms의 계수가 양수가 되었다
    • 침실이 많으면 집의 크기가 커지는 것이 일반적이다
> update(step_lm, . ~ . -SqFtTotLiving - SqFtFinBasement - Bathrooms)

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

Coefficients:
              (Intercept)                   Bedrooms                  BldgGrade  PropertyTypeSingle Family  
                  4834680                      27657                     245709                     -17604  
    PropertyTypeTownhouse                    YrBuilt  
                   -47477                      -3161  


  • 변수 간 상관관계는 회귀계수를 해석할 때 고려해야 할 여러 문제들 가운데 한 가지
  • 모델 house_lm에는 주택의 위치를고려할 변수가 따로 없는 상태에서, 서로 다른 유형의 지역들 정보가 섞여 있다.
  • 이 경우 위치 정보는 교란변수일 수 있다.


다중공선성

  • 다중공선성(multicollinearity) 또는공선성(collinearity):  예측변수들이 완벽하거나 거의 완벽에 가까운 상관성을 갖는다고 할 때, 회귀는 불안정하며 계산이 불가능
  • 변수 상관이 극단적인 경우 다중공선성이 나타난다.
  • 이는 예측변수 사이의 중복성을 판단하는 조건이 된다.
  • 완전 디중공선성은 한 예측변수가 다른 변수들의 선형결합으로 표현된다는 것을 의미
  • 다중공선성은 다음 경우에 발생
    • 오류로 인해 한 변수가 여러 번 포함된 경우
    • 요인변수로 부터 \(P-1\)개가 아닌 \(P\)개의 가변수가 만들어진 경우
    • 두 번수가 서로 거의 완벽하게 상관성이 있는 경우
  • 회귀분석에서는 디중공선성 문제를 반드시 해결해야 한다.
    • 다중공선성이 사라질 때까지 변수를 제거
    • 완전 다중공선성이 존재하는 상황에서는 회귀를 통해 제대로 된 답을 얻을 수가 없다.
    • R을 포함한 많은 소프트웨어 패키지는 특정 유형의 다중공선성 문제를 자동으로 처리


교란변수

  • 교란변수(confounding variable): 중요한 예측변수지만 회귀식에서 누락되어 결과를 잘못되게 이끄는 변수
  • 상관변수는 응답변수와 비슷한 예측관계를 갖는 다른 변수가 포함되어 발생하는 문제
  • 교란변수는 회귀식에 중요한 변수가 포함되지 못해서 생기는 누락의 문제
    • 이 경우 방정식 계수에 대한 순진한 해석은 잘못된 결론으로 이어질수있다.
  • 킹 카운티 회귀모델 house_ lm
    • SqFtlot, Bathrooms , Bedrooms의 회귀계수는 모두 음수
> 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      BldgGrade  
   -5.287e+05      2.127e+02     -1.430e-02     -1.823e+04     -4.657e+04      1.088e+05  

    • 위치 정보를 고려하기 위해, 우편번호를 가장 싼 지역 (1)에서 가장 비싼 지역 (5)까지 5개의 그룹으로 분류하는 새로운 변수 ZipGroup을 포함

> house <- read.csv('house_sales.csv', sep='\t') > zip_groups <- house %>% + mutate(resid = residuals(house_lm)) %>% + group_by(ZipCode) %>% + summarize(med_resid = median(resid), + cnt = n()) %>% + # sort the zip codes by the median residual + arrange(med_resid) %>% + mutate(cum_cnt = cumsum(cnt), + ZipGroup = factor(ntile(cum_cnt, 5))) > house <- house %>% + left_join(select(zip_groups, ZipCode, ZipGroup), by='ZipCode') > lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade + PropertyType + ZipGroup, data=house, na.action=na.omit) Call: lm(formula = AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade + PropertyType + ZipGroup, data = house, na.action = na.omit) Coefficients: (Intercept) SqFtTotLiving SqFtLot Bathrooms -6.737e+05 1.938e+02 3.526e-01 8.121e+03 Bedrooms BldgGrade PropertyTypeSingle Family PropertyTypeTownhouse -3.953e+04 1.048e+05 2.827e+03 -2.126e+04 ZipGroup2 ZipGroup3 ZipGroup4 ZipGroup5 5.913e+04 1.029e+05 1.727e+05 3.340e+05



    • ZipGroup 이 분명히 중요한 변수라는 것을 알 수 있다.
    • 가장 비싼 우편번호 그룹(ZipGroup5)의 주택 가격이 약 $334,000나 더 높다.
    • SqFtLotBathrooms의 계수도 이제 양수이며, 욕실을 하나 추가하면 판매 가격이 $8,121달러 정도 증가
    • Bedrooms 에 대한 계수는 여전히 음수
    • 이 결과가 그렇게 직관적이지는 않지만, 이것은 부동산 업계에서 잘 알려진 현상
    • 살기 좋은 지역에서는 욕실 수가 같은 주택의 경우 작은 침실이 여러 개 있으면 오히려 가격이 떨어진다.

주효과와 상호작용

  • 주효과(main effect): 다른 변수들과 독립된 하나의 예측변수와 결과변수 사이의 관계
    • 회귀식에서 종종 예측변수라고도 함
    • 모델에서 주효과만 사용한다면 여기에는 예측변수와 응답변수 간의 관계가 다른 예측변수들에 대해 독립적이라는 암묵적인 가정이 있지만 종종 틀린 가정이다
  • 킹 카운티 주택 데이터의 회귀모델은 ZipCode를 비롯한 여러 변수를 주효과로 포함
    • 부동산에서 위치가 가장 중요하다는 사실은 모두 알고 있다.
    • 주택 크기와 매매 가격 간의 관계가 위치에 달려 있다고 가정하는 것은 자연스러운 일이다.
    • 임대료가싼 지역에 지어진 큰 집은 비싼 지역에 지어진 큰 집과 같은 가치를 유지하기가 어려울 것이다.

> lm(AdjSalePrice ~  SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade + PropertyType + ZipGroup, data=house, na.action=na.omit)

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

Coefficients:
              (Intercept)              SqFtTotLiving                    SqFtLot                  Bathrooms  
               -6.737e+05                  1.938e+02                  3.526e-01                  8.121e+03  
                 Bedrooms                  BldgGrade  PropertyTypeSingle Family      PropertyTypeTownhouse  
               -3.953e+04                  1.048e+05                  2.827e+03                 -2.126e+04  
                ZipGroup2                  ZipGroup3                  ZipGroup4                  ZipGroup5  
                5.913e+04                  1.029e+05                  1.727e+05                  3.340e+05  



  • 상호작용(interaction): 둘 이상의 예측변수와 응답변수 사이의 상호의존적 관계
    • R에서 * 연산지를 사용하면 모델에 변수의 상호작용을 포함시킬 수 있다.
    • 킹 카운티 데이터를 모델링할 때, SqFtTotLivingZipGroup 간의 상호작용을 고려하는 예
> lm(AdjSalePrice ~  SqFtTotLiving*ZipGroup + SqFtLot + Bathrooms + Bedrooms + BldgGrade + PropertyType, data=house, na.action=na.omit)

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

Coefficients:
              (Intercept)              SqFtTotLiving                  ZipGroup2                  ZipGroup3  
               -4.990e+05                  1.030e+02                 -3.794e+04                  5.436e+04  
                ZipGroup4                  ZipGroup5                    SqFtLot                  Bathrooms  
               -2.666e+03                 -1.722e+05                  5.535e-01                  4.197e+02  
                 Bedrooms                  BldgGrade  PropertyTypeSingle Family      PropertyTypeTownhouse  
               -3.919e+04                  1.086e+05                  4.530e+03                 -2.333e+04  
  SqFtTotLiving:ZipGroup2    SqFtTotLiving:ZipGroup3    SqFtTotLiving:ZipGroup4    SqFtTotLiving:ZipGroup5  
                4.999e+01                  1.599e+01                  8.230e+01                  2.356e+02  


    • 주택의 위치와 크기는 강한 상호작용이 있는 것으로 보인다.
    • 가격대가 가장 낮은 ZipGroup1 에서 집에 대한 기울기는 제곱피트당 약 $103로, 주효과 SqFtTotLiving 에 해당하는 계수와 같다
      • R이 요인변수에 대해 기준 부호화를 사용하고 있기 때문
    • 가장 비싼 ZipGroup5에 대한 계수는 이 주효과 계수에 SqFtTotLiving:ZipGroup5의 경우를 더한 합, 즉 $103 + $235.6 = $338.6와 같다.
      • 가격대가 가장 비싼 지역에서는 주택의 크기가 1제곱피트 늘어날 때 가장 낮은 지역에 비해 예상 매매가가 거의 3배가 차이 난다.


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

다항회귀  (0) 2019.09.30
회귀 진단: 가설 검정  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27
회귀를 이용한 예측  (0) 2019.09.26
가중회귀  (0) 2019.09.26

요인변수

  • 요인변수(factor variable) 또는 범주형 변수(categorical data): 데이터 값의 종류가 제한되어 있는 이산값을 갖는 변수
  • 요인변수의 예
    • 대출 목적: '부채 정리', '결혼', '자동차' 등
    • 지표변수(indicator variable): 예/아니오 등 두 가지 값을 갖는 이진변수
  • 요인변수의 값은 '텍스트' 값이므로 숫자로 변환해야 데이터 분석에 활용할 수 있다


텍스트 값을 숫자로 바꾸는 방법

  • 가변수(dummy variable): 회귀모델이나 다른 모델에서 요인 데이터를 사용하기 위해 \(0\)과 \(1\)의 이진값으로 부호화한 변수
  • 기준 부호화.(reference coding) 또는 처리 부호화(tretment coding): 통계학자들이 많이 사용히는 부호화 형태로, 여기서 한 요인을 기준으로 하고 다른 요인들이 이 기준에 따라 비교할 수 있도록 부호화하는 것
  • 원-핫 인코딩(one-hot encoding): 머신러닝 분야에서 많이 사용되는 부호화. 모든 요인 수준이 계속 유지된다. 어떤 머신러닝 알고리즘에서는 유용한 반면, 다중선형회귀에는 적합하지 않다
  • 편차 부호회(deviation coding) 또는 총합 대비(sum contrast): 기준 수준과는 반대로 전체 평균에 대해 각수준을 비교하는 부호화 방법


가변수 표현 Dummy Variables Representation

  • 킹 카운티 주택 가격 데이터 중 주거 형태에 관한 요인변수는 3종류
    • Multiplex, Single Family, Townhouse

> house <- read.csv('house_sales.csv', sep='\t')
> head(house[, 'PropertyType'])
[1] Multiplex     
[2] Single Family
[3] Single Family
[4] Single Family
[5] Single Family
[6]Townhouse
Levels: Multiplex Single Family Townhouse


  • 주거 형태의 요인변수를 원-핫 인코딩을 통해 이진변수로 만들기
> prop_type_dummies <- model.matrix(~PropertyType -1, data=house)
> head(prop_type_dummies)
  PropertyTypeMultiplex PropertyTypeSingle Family PropertyTypeTownhouse
1                     1                         0                     0
2                     0                         1                     0
3                     0                         1                     0
4                     0                         1                     0
5                     0                         1                     0
6                     0                         0                     1

  • 회귀분석에서 \(P\)개의 개별 수준을 갖는 요인변수는 보통 \(P-1\)개의 열을 갖는 행렬로 표시
    • 회귀모델식에 일반적으로 절편이 포함
    • 절편이 있기 때문에 \(P-1\) 개의 이진변수의 값을 정의하고 나면, \(P\)번째 값을 알 수 있음
    • \(P\)번째 값까지 넣게 되면 이러한 중복성이 문제가 다중공선성(multicollinearity error) 오류가 발생할 수 있음
  • R에서는 첫 번째 요인 수준을 기준으로 하고 나머지 수준을 이 기준에 상대적인 것으로 해석
> prop_type_dummies <- model.matrix(~PropertyType, data=house)
> head(prop_type_dummies)
  (Intercept) PropertyTypeSingle Family PropertyTypeTownhouse
1           1                         0                     0
2           1                         1                     0
3           1                         1                     0
4           1                         1                     0
5           1                         1                     0
6           1                         0                     1


  • 회귀분석을 해보면 PropertyType에 해당하는 두 계수 PropertyTypeSingle FamilyPropertyTypeTownhouse을 볼 수 있음
    • PropertyType에는 3개의 종류가 있지만 PropertyTypeSingle Family == 0이면서  PropertyTypeTownhouse == 0인 것은 상대적으로 PropertyTypeMutiplex가 되므로 따로 계수를 설정하지 않음
    • PropertyTypeSingle Family의 계수가 -98190이므로  PropertyTypeMutiplex에 비해 약 $98,190정도 낮음
    • PropertyTypeTownhouse의 계수는 -119000이므로 PropertyTypeMutiplex에 비해 약 $119,000정도 낮음
> lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms +  BldgGrade + PropertyType, data=house)

Call:
lm(formula = AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + 
    Bedrooms + BldgGrade + PropertyType, data = house)

Coefficients:
              (Intercept)              SqFtTotLiving                    SqFtLot                  Bathrooms  
               -4.409e+05                  2.072e+02                 -2.314e-02                 -1.500e+04  
                 Bedrooms                  BldgGrade  PropertyTypeSingle Family      PropertyTypeTownhouse  
               -4.957e+04                  1.122e+05                 -9.819e+04                 -1.189e+05  



다양한 수준을 갖는 요인변수

  • 우편번호(zip code): 미국에는 43,00개의 우편번호가 있음
  • 이런 경우 데이터와 예측변수와 결과 간의 관계를 탐색하여 유용한 정보가 범주에 포함되는지 결정
  • 모든 요소를 유지할 것인지 수준을 통합하여 처리할 것인지도 결정
  • 킹스카운티에는 82개의 우편번호가 있음
    • 주택 가격과 주택의 위치는 많은 관계가 있으므로 우편번호는 중요한 정보가 될 수 있음
    • 모든 요소를 포함하려면 81개의 계수가 필요
    • 처음에 만들었던 회귀모델식은 자유도가 5개(SqFtTotLiving, SqFtLot, Bathrooms, Bedrooms, BldgGrade)
    • 매매 가격과 같은 다른 변수에 따라 우편번호를 그룹으로 묶어서 분석
  • 초기 모델의 잔차를 사용하여 우편번호 그룹을 만드는 방법도 좋음
> house_lm <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade, data=house, na.action=na.omit)
> zip_groups <- house %>%
+     mutate(resid = residuals(house_lm)) %>%
+     group_by(ZipCode) %>%
+     summarize(med_resid = median(resid),
+               cnt = n()) %>%
+     # sort the zip codes by the median residual
+     arrange(med_resid) %>%
+     mutate(cum_cnt = cumsum(cnt),
+            ZipGroup = factor(ntile(cum_cnt, 5)))
> house <- house %>%
+     left_join(select(zip_groups, ZipCode, ZipGroup), by='ZipCode')
> table(house$ZipCode)

   -1  9800 89118 98001 98002 98003 98004 98005 98006 98007 98008 98010 98011 98014 98019 98022 98023 98024 
 4374     1     1   358   180   241   293   133   460   112   291    56   163    85   242   188   455    31 
98027 98028 98029 98030 98031 98032 98033 98034 98038 98039 98040 98042 98043 98045 98047 98050 98051 98052 
  366   252   475   263   308   121   517   575   788    47   244   641     1   222    48     7    32   614 
98053 98055 98056 98057 98058 98059 98065 98068 98070 98072 98074 98075 98077 98092 98102 98103 98105 98106 
  499   332   402     4   420   513   430     1    89   245   502   388   204   289   106   671   313   361 
98107 98108 98109 98112 98113 98115 98116 98117 98118 98119 98122 98125 98126 98133 98136 98144 98146 98148 
  296   155   149   357     1   620   364   619   492   260   380   409   473   465   310   332   287    40 
98155 98166 98168 98177 98178 98188 98198 98199 98224 98288 98354 
  358   193   332   216   266   101   225   393     3     4     9 
> table(house$ZipGroup)

   1    2    3    4    5 
4822 7905 3990 5259 5087 


순서가 있는 요인변수

  • 순서 요인변수(ordered factor variable) 또는 순서 범주형 변수(ordered categorical variable): 요인의 수준이 순서를 갖는 요인변수
  • 순서 요인변수의 예
    • 대출 등급: A, B, C 등으로 각 등급은 이전 등급보다 위험이 크다
  • 순서 요인변수도 숫자로 변환하여 그대로 사용
  • 킹 카운티 주택 가격 데이터 중 BldgGrade 변수가 순서 요인변수


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

회귀 진단: 가설 검정  (0) 2019.09.27
회귀식 해석  (0) 2019.09.27
회귀를 이용한 예측  (0) 2019.09.26
가중회귀  (0) 2019.09.26
모델 선택 및 단계적 회귀  (0) 2019.09.24

회귀분석의 주된 목적

  • 예측(prediction): 데이터 과학에서 회귀분석의 주된 목적
    • 전통적인 통계학에서의 회귀는 예측보다는 설명을 위한 모델링을 위주
  • 예측구간(prediction interval): 개별 예측값 주위의 불확실한 구간
  • 외삽법(extrapolation): 모델링에 사용된 데이터의 범위를 벗어난 부분까지 모델을 확장하는 것

외삽의 위험

  • 회귀모델을 데이터 범위를 초과하면서까지 외삽하는 데 사용해서는 안 된다.
  • 회귀모델은 충분한 데이터 값이 있는 예측변수에 대해서만 유효
    • 충분한 데이터가 있다 하더라도 다른 문제가 있을 수 있다.
    • 극단적으로 model_lm을 가지고 5 000제곱피트의 공터 가격을 예측하는 데 사용한다고 하자.
    • 이때 건물과 관련된 모든 예측변수의 값은 0이 되고, 회귀식의 결과는 다음과 같이 황당한 예측 결과가 나온다.
\begin{eqnarray} 521,900 + 5,000 \times - 0.0605 = -\$522 , 202\end{eqnarray}
    • 왜 이런 일이 발생할까?
      • 데이터에는 건물이 있는 구획만 포함되어 있다.
      • 빈 땅에 해당하는 데이터는 없다.
      • 결과적으로 이 모델에는 공터 가격을 예측히는 방법을 알려줄 정보가 없다.


신뢰구간과 예측구간

  • 통계학은 변동성(불확실성)을 이해하고 측정하는 것을 포함
  • 회귀분석 결과에 나오는 \(t\)-통계량과 \(p\)-값은 이 변동성을 다루는 아주 일반적인 방법으로 종종 변수 선택을 위해 활용
  • 회귀 매개변수에 대한 신뢰구간(confidence interval)을 생성하기 위한 부트스트랩 알고리즘
  1. 각 행 (결과변수를 포함)을 하나의 티켓으로 생각하고 개수가 모두 \(n\)개인 티켓을 박스에 넣었다고가정하자.
  2. 무작위로 티켓을 뽑아 값을 기록하고 다시 박스에 넣는다.
  3. 2번 과정을 \(n\)번 빈복한다. 이를 통해 부트스트랩 재표본을 하나 만든다.
  4. 이 부트스트랩 표본을 가지고 회귀모형을 구한다. 그리고 추정된 계수들을 기록한다.
  5. 2∼4번 과정을 1,000번 반복한다.
  6. 이제 각 계수에 대해 1,000개의 부트스트랩 값을 갖게 된다. 각각에 대해 적합한 백분위수를 구한다(90% 신뢰구간을 위해 5번째에서 95번째 백분위수를 구한다).
  • R의 Boot 함수를 시용하면 계수에 대한 실제 부트스트랩 신뢰구간을 구하거나 일반적인 R의 출력 결과같이 신뢰구간을 간단하게 구할 수 있다.
  • 우리의 관심은 예측된 \(y\) 값(\(\hat{Y}\))의 구간, 즉 예측구간으로 이 값의 불확실성의 원인은 다음과 같음
    • 무엇이 적합한 예측변수인지, 그리고 계수가 얼마인지에 따른 불확실성
    • 개별 데이터 값에 존재하는 추가적인 오류
      • (예를 들면 엄청난 수의 데이터가 있어) 회귀방정식이 무엇인지 정확히 알았다하더라도
      • 주어진 예측변수 값에 대한 실제 결과값은 달라질 수 있다.
  • 예를 들면 방이 8개, 실제 크기 6, 500제곱피트, 욕실 3개, 그리고 지하실까지 있는 주택들이 여러 채 있다고 했을 때, 이들의 값은 서로 다를 수 있다.
  • 우리는 이 개별 오차를 적합값으로부터의 잔차로 모델링할 수 있다.
  • 회귀모델에 따른 오차와 개별 데이터 값에 따른 오차를 모두 모델링하기 위한 부트스트랩 알고리즘은 디음과 같다.
  1. 데이터로부터 부트스트랩 표본을 뽑는다.
  2. 회귀모델을 찾고 새로운 값을 예측한다.
  3. 원래의 회귀 적합도에서 임의로 하나의 잔치를 취하여 예측값에 더하고 그 결과를 기록한다.
  4. 1 ∼3단계를 1,000변 반복한다.
  5. 결과의 2.5번째 백분위수와 97.5번째 백분위수를 찾는다.


  • 예측구간: 하나의 값에 대한 불확실성과 관련
  • 신뢰구간: 여러 값으로 계산한 평균이나 다른 통계량과 관련
  • 예측구간은 일반적으로 같은 값에 대해 신뢰구간보다 훨씬 넓다


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

회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27
가중회귀  (0) 2019.09.26
모델 선택 및 단계적 회귀  (0) 2019.09.24
모델 평가  (0) 2019.09.24

가중회귀

  • 가중회귀(weighted regression)의 유용성
    • 서로 다른 관측값을 다른 정밀도로 측정했을 때, 역분산 가중값을 얻을 수 있다.
    • 가중값 변수가 집계된 데이터와 각 행이 나타내는 원본 관측값의 수를 인코딩하도록 집계된 형식의 데이터를 분석할 수 있다.
  • 가중회귀의 예
    • 주택가격 데이터에서 오래된 매매 정보일수록 최근 정보보다는 신뢰하기 힘들다.
    • 날짜 정보에 가중값을 매겨서 최신 정보일 수록 높은 가중값을 매긴다.
> library(lubridate)
> house <- read.csv('house_sales.csv', sep='\t')
> house$Year = year(house$DocumentDate)
> house$Weight = house$Year - 2005
> head(house[, c("AdjSalePrice", "SqFtTotLiving", "SqFtLot", "Bathrooms", "Bedrooms", "BldgGrade", "Year", "Weight")])
  AdjSalePrice SqFtTotLiving SqFtLot Bathrooms Bedrooms BldgGrade Year Weight
1       300805          2400    9373      3.00        6         7 2014      9
2      1076162          3764   20156      3.75        4        10 2006      1
3       761805          2060   26036      1.75        4         8 2007      2
4       442065          3200    8618      3.75        5         7 2008      3
5       297065          1720    8620      1.75        4         7 2013      8
6       411781           930    1012      1.50        2         8 2009      4
    • lm 함수에 weight 매개변수를 사용하여 가중회귀를 계산

> house_lm <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade, data=house, na.action=na.omit) > house_wt <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade, data=house, weight=Weight, na.action=na.omit) > round(cbind(house_lm=house_lm$coefficients, house_wt=house_wt$coefficients), digits=3) house_lm house_wt (Intercept) -528724.348 -580378.015 SqFtTotLiving 212.708 229.945 SqFtLot -0.014 -0.181 Bathrooms -18233.212 -23335.486 Bedrooms -46574.193 -54234.376 BldgGrade 108780.111 116037.063


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

회귀에서의 요인변수  (0) 2019.09.27
회귀를 이용한 예측  (0) 2019.09.26
모델 선택 및 단계적 회귀  (0) 2019.09.24
모델 평가  (0) 2019.09.24
최소제곱법  (0) 2019.09.24

+ Recent posts