스플라인

  • 다항회귀는 비선형 관계에 대해 어느 정도의 곡률을 담아낼 수 있다.
  • 하지만 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

+ Recent posts