01 회귀분석
-01 회귀분석 모형 종류
-02 회귀모형의 가정
-03 모형 평가
02 단순 선형 회귀분석
-01 회귀계수의 추정
-02 모형 평가
-03 모형의 설명력
03 다중 선형 회귀분석
-01 다중 선형 회귀분석이란
-02 다중공선성
04 변수 선택 / 변수 제거
-01 의미
-02 의의
-03 방법
-04 예제
01 회귀분석
-01 회귀분석 모형 종류
1) 단순 선형 회귀
하나의 종속변수를 하나의 1차 설명변수로 해석하는 모형
2) 다중 회귀
하나의 종속변수를 둘 이상의 1차 설명변수로 해석하는 모형
3) 다항 회귀
하나의 종속변수를 하나 이상의 1차 이상 설명변수로 해석하는 모형(비선형 모형)
lm(formula, # y ~ x
data) # 데이터 이름
* 모든 회귀는 lm으로 해석할 수 있다.
* = 다항 회귀는 x^2가 있으나 데이터 자체에 계산된 값을 집어넣기 때문에
* 새로운 변수가 1차원의 설명변수로 여겨진다.
-02 회귀모형의 가정
1) 선형성
-> 독립변수와 종속변수의 산점도를 그려서 확인 가능
2) 독립성
-> 잔차의 독립성
-> 잔차가 설명변수와 서로 독립적인지 확인
-> 더빈왓슨검정으로 확인 가능
3) 등분산성
-> 잔차의 분산이 일정한지 확인
-> 잔차산점도를 그려서 확인 가능
4) 정규성
-> 잔차가 정규분포를 따르는지 확인
-> 잔차히스토그램, Q-Q plot, 샤피로윌크 검정, ks검정)
-03 모형 평가
1) 회귀계수 유의성 검정(t.test -> p.value 확인)
2) 모형 유의성 검정(f.test -> p.value 확인)
3) 모형 설명력(결정계수)
-04 실습
cars
> cars
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
7 10 18
8 10 26
9 10 34
10 11 17
# 회귀계수 확인)
m <- lm(dist ~ speed, cars)
> m
Call:
lm(formula = dist ~ speed, data = cars)
Coefficients:
(Intercept) speed
-17.579 3.932
▲ 회귀 계수 추정량
# 회귀계수 직접 확인
coef(m)
> coef(m)
(Intercept) speed
-17.579095 3.932409
# 적합값(예측값) 확인
fitted(m)
> fitted(m)
1 2 3 4 5
-1.849460 -1.849460 9.947766 9.947766 13.880175
6 7 8 9 10
17.812584 21.744993 21.744993 21.744993 25.677401
11 12 13 14 15
25.677401 29.609810 29.609810 29.609810 29.609810
16 17 18 19 20
33.542219 33.542219 33.542219 33.542219 37.474628
# 잔차 구하기
cars$dist - fitted(m) # 잔차
residuals(m)
> residuals(m)
1 2 3 4 5
3.849460 11.849460 -5.947766 12.052234 2.119825
6 7 8 9 10
-7.812584 -3.744993 4.255007 12.255007 -8.677401
11 12 13 14 15
2.322599 -15.609810 -9.609810 -5.609810 -1.609810
16 17 18 19 20
-7.542219 0.457781 0.457781 12.457781 -11.474628
# 모형 평가)
summary(m)
> summary(m)
Call:
lm(formula = dist ~ speed, data = cars)
Residuals:
Min 1Q Median 3Q Max
-29.069 -9.525 -2.272 9.215 43.201
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
speed 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12
* t-test 결과
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791 6.7584 -2.601 0.0123 *
speed 3.9324 0.4155 9.464 1.49e-12 ***
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
y = -17.5791 + 3.9324*speed
* f-test 결과
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12
=> 영가설(H0 : 모형이 유의하지 않다) 기각
* 모형의 설명력
Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438
모형의 설명력이 낮은 편이다. (통상 80 ~ 85% 이상을 기대함)
# 모형 진단)
(1) 잔차산점도(등분산성에 대한 확인)
par(mfrow = c(1,1))
plot(fitted(m), residuals(m))

-> 우측 상단에 잔차가 큰 값을 일부 확인할 수 있다.
(2) 히스토그램 (잔차의 정규성 확인)
hist(residuals(m))

-> 잔차가 큰 값이 일부 분포하는 것으로 확인된다.
(3) 모형 진단 시각화
plot(m)

-> 잔차산점도가 출력된다.
-> 이상치의 경우 해당 샘플 번호도 확인 가능하다.
-> 붉은 선의 경우 잔차의 균등함이 어떠한지 보여준다. (선이 0에 근접할수록 등분산성임을 보여준다.)

-> Q-Q plot을 확인할 수 있다.

-> 잔차산점도의 일종이며, 스케일링한 값으로 확인 가능하다.

-> Cook's distance 바깥으로 나가면 이상치로 간주할 수 있다.
-> 이상치 탐지가 가능하다.
# 회귀모형 시각화)
plot(cars$speed, cars$dist)
abline(coef(m))

** 잔차 정렬
sort(abs(residuals(m)), decreasing = T)
> sort(abs(residuals(m)), decreasing = T)
49 23 35 39 34 22 24 36 45 29 48
43.201285 42.525372 30.795737 29.069080 22.795737 22.525372 21.407036 21.136672 18.866307 17.271854 16.201285
12 25 47 27 40 26 19 9 4 2 20
15.609810 15.407036 15.201285 13.339445 13.069080 12.592964 12.457781 12.255007 12.052234 11.849460 11.474628
32 37 38 13 30 41 10 6 16 46 3
11.204263 11.136672 10.863328 9.609810 9.271854 9.069080 8.677401 7.812584 7.542219 6.798715 5.947766
14 28 42 50 8 1 7 44 43 33 11
5.609810 5.339445 5.069080 4.268876 4.255007 3.849460 3.744993 2.933898 2.930920 2.795737 2.322599
5 15 21 31 17 18
2.119825 1.609810 1.474628 0.728146 0.457781 0.457781
02 단순 선형 회귀분석
-01 회귀계수의 추정
단순 선형 회귀분석은 최소제곱법으로 회귀계수를 추정한다.
- 최소제곱법 : 관측값과 모델 예측값의 차이(오차)를 제곱하여 그 합이 최소가 되도록 모델을 찾는 방법
- 최소제곱추정량 : 최소제곱법을 통해 구한 추정량 (회귀 계수)
제곱을 하는 이유는 음수/양수의 오차가 서로 상쇄되는 것을 방지하기 때문이며, 제곱을 하기 때문에 이상치에 더 민감하다.

-02 모형 평가
1) 회귀계수의 통계적 유의성 검증 (t-검정)
H0 : 회귀계수가 유의하지 않다. (β0 = 0) = 모든 기울기들이 0이다.
H1 : 회귀계수가 유의하다. (β0 != 0)
각 독립변수가 종속변수에 대해 선형관계로 나타낼 수 있는지를 검정하며, t-검정을 통해 회귀계수 유의성 검정을 수행한다.
모든 회귀 계수의 유의성 검정이 통계적으로 검증되어야 선택된 변수들의 조합을 최종 모형으로 사용할 수 있다.
또한, 모형이 유의하더라도 회귀 계수는 유의하지 않을 수 있다.
(각 변수들의 회귀계수가 유의한지, 모형 자체가 유의한지 모두 확인해야 한다.)
t-통계량 : 회귀계수 / 표준오차
따라서 t-통계량이 클수록 회귀계수는 커지고, 변수간 유의미한 인과관계가 존재하며, 유의확률값(p-value)는 작아진다.
2) 회귀모형의 통계적 유의성 검증 (F-검정)
H0 : 회귀모형이 유의하지 않다.
H1 : 회귀모형이 유의하다.
회귀모형이 통계적으로 유의미한지를 검증하기 위해 F-통계량을 사용한다.
F-통계량은 총편차를 분해하여 종속변수의 총변동량을 오차제곱합(SSE)외 회귀제곱합(SSR)로 나누는 과정에서 만들어지는 통계량이다.
총편차 : y - ybar
총변동량(SST) = 오차제곱합(SSE) + 회귀제곱합(SSR)
좋은 회귀모형일수록 SSE는 낮고 SSR은 높아진다.
회귀분석의 분산분석표
| 요인 | 제곱합 | 자유도 | 제곱평균 | F |
| 회귀 | SSR | k | MSR | MSR / MSE |
| 잔차 | SSE | n - k - 1 | MSE | |
| 총 | SST | n - 1 |
-03 모형의 설명력
데이터들이 회귀선 근처에 밀집할수록 회귀모형의 설명력이 좋음을 의미한다.
총 변동에서의 회귀제곱합의 비중으로 모형의 설명력을 계산한다. (0 < R² < 1)
결정계수는 모형에 유의하지 않은 변수의 개수가 증가해도 증가하는 단점이 있다.
이를 보완한 것이 수정된 결정계수이다.
결정계수(R²)가 수정된 결정계수(Radj) 보다 항상 크다.
[수식 입력]
[회귀모델 평가지표 입력 : 평균 절대 오차, 평균제곱오차,평균제곱근오차,평균절대백분률오차,150페이지]
결정계수
수정결정계수
03 다중 선형 회귀분석
-01 다중 선형 회귀분석이란
독립변수가 2개 이상이고 종속변수가 하나인 회귀분석 모형으로써, 독립변수의 선택이 중요하다.
또한 다중공선성의 문제 진단이 반드시 필요하다.
-02 다중공선성
설명변수끼리 강한 상관관계가 있는 경우를 말하며, 다중공선성이 존재하는 경우 회귀분석 모형의 독립성 가정을 위배한다.
따라서 정확한 회귀 계수의 추정이 어려워진다.
다중공선성은 독립변수간 상관계수로써, 분산팽창지수를 통해 진단할 수 있다. (산점도를 그려서도 확인할 수 있다.)
분산팽창지수(VIF) : VIF가 10보다 큰 경우 다중공선성의 문제가 있는 것으로 해석한다.
VIF = 1 / (1-R²)
R² : 결정계수
분산팽창지수는 독립변수마다 값을 가정한다.
X1(target) <- X2 + X3 + X4 + X5 (1/(1- R²)
X2(target) <- X1 + X3 + X4 + X5 (1/(1- R²)
...
다른 변수들이 현 변수를 얼마나 설명할 수 있는지 회귀식을 모두 구한다.
( = 정보의 중복이 얼마나 심한지를 확인한다.)
> 다중공선성의 해결방법
- 문제가 있는 변수를 제거
- 주성분 분석을 사용한 차원 축소
- 릿지, 라쏘, 엘라스틱넷(패널티 모형) 등의 모형 대체
-03 실습
[ 예제 - 다중회귀분석(주택가격셋) ]
# step1) 데이터 로딩
library(MASS)
Boston
> Boston
crim zn indus chas nox rm age dis rad tax ptratio black lstat medv
1 0.00632 18.0 2.31 0 0.5380 6.575 65.2 4.0900 1 296 15.3 396.90 4.98 24.0
2 0.02731 0.0 7.07 0 0.4690 6.421 78.9 4.9671 2 242 17.8 396.90 9.14 21.6
3 0.02729 0.0 7.07 0 0.4690 7.185 61.1 4.9671 2 242 17.8 392.83 4.03 34.7
4 0.03237 0.0 2.18 0 0.4580 6.998 45.8 6.0622 3 222 18.7 394.63 2.94 33.4
5 0.06905 0.0 2.18 0 0.4580 7.147 54.2 6.0622 3 222 18.7 396.90 5.33 36.2
6 0.02985 0.0 2.18 0 0.4580 6.430 58.7 6.0622 3 222 18.7 394.12 5.21 28.7
7 0.08829 12.5 7.87 0 0.5240 6.012 66.6 5.5605 5 311 15.2 395.60 12.43 22.9
8 0.14455 12.5 7.87 0 0.5240 6.172 96.1 5.9505 5 311 15.2 396.90 19.15 27.1
9 0.21124 12.5 7.87 0 0.5240 5.631 100.0 6.0821 5 311 15.2 386.63 29.93 16.5
10 0.17004 12.5 7.87 0 0.5240 6.004 85.9 6.5921 5 311 15.2 386.71 17.10 18.9
# step2) 학습
m <- lm(medv ~ ., Boston)
> lm(medv ~ ., Boston)
Call:
lm(formula = medv ~ ., data = Boston)
Coefficients:
(Intercept) crim zn indus chas nox rm age
3.646e+01 -1.080e-01 4.642e-02 2.056e-02 2.687e+00 -1.777e+01 3.810e+00 6.922e-04
dis rad tax ptratio black lstat
-1.476e+00 3.060e-01 -1.233e-02 -9.527e-01 9.312e-03 -5.248e-01
# step3) 평가
summary(m)
> summary(m)
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
indus, age의 경우 모두 유의하지 않게 나왔으며, 수치형 데이터이다.
수치형 - 수치형 간의 관계를 확인해보아야하므로 상관관계(피어슨 상관관계)를 확인해야 한다.
# step4) 진단
(1) 모델 진단 시각화
plot(m)


-> 정규분포를 따르는 것 같지만 이상치를 제거하고도 어느 정도 선에서 떨어져있는 것이 확인되므로, 완전한 정규분포를 따른다고 말하기는 어려울 것으로 판단된다.


(2) 정규성 검정
> 2-1) 히스토그램
hist(residuals(m))

-> 왼쪽과 오른쪽의 빈도가 유사하며, -20 ~ 20까지의 분포 역시 비슷하게 보인다.
-> 그러나 잔차가 20 이상인 지점부터는 오른쪽 꼬리가 긴 것을 확인할 수 있다.
-> 따라서 정규분포를 따른다고 볼 수 없다.
> 2-2) 샤피로윌크 검정
install.packages('car')
library(car)
shapiro.test(m$residuals)
> shapiro.test(m$residuals)
Shapiro-Wilk normality test
data: m$residuals
W = 0.90138, p-value < 2.2e-16
H0 : 정규분포를 따른다. (영가설 기각)
H1 : 정규분포를 따르지 않는다.
=> 잔차의 정규성 가정은 성립되지 않는다.
(3) 등분산선 검정
plot(m$fitted.values, m$residuals)
=> 이상치로 예상되는 세 개의 점(잔차가 매우 큰 세 점)을 제외하고 잔차의 패턴이 점차 줄었다가 커지는 패턴으로 보인다.
따라서 등분산성을 만족한다고 보기 어렵다.

(4) 독립성 검정
durbinWatsonTest(m)
> durbinWatsonTest(m)
lag Autocorrelation D-W Statistic p-value
1 0.4542626 1.078375 0
Alternative hypothesis: rho != 0
H0 : 잔차가 서로 독립적이다. (영가설 기각)
H1 : 잔차가 서로 독립적이지 않다.
=> 잔차의 독립성 가정이 성립된다고 볼 수 없다.
# step5) 여러가지 회귀모형의 평가척도
mse : sum((y-yhat)^2)/n
sum((Boston$medv - m$fitted.values)^2) / nrow(Boston) # MSE
sqrt(sum((Boston$medv - m$fitted.values)^2) / nrow(Boston)) # RMSE
sum(abs(Boston$medv - m$fitted.values)) / nrow(Boston) # MAE
> sum((Boston$medv - m$fitted.values)^2) / nrow(Boston) # MSE
[1] 21.89483
> sqrt(sum((Boston$medv - m$fitted.values)^2) / nrow(Boston)) # RMSE
[1] 4.679191
> sum(abs(Boston$medv - m$fitted.values)) / nrow(Boston) # MAE
[1] 3.270863
# 함수
install.packages('Metrics')
library(Metrics)
Metrics::mse(Boston$medv, m$fitted.values)
Metrics::rmse(Boston$medv, m$fitted.values)
Metrics::mae(Boston$medv, m$fitted.values)
Metrics::mape(Boston$medv, m$fitted.values)
> Metrics::mse(Boston$medv, m$fitted.values)
[1] 21.89483
> Metrics::rmse(Boston$medv, m$fitted.values)
[1] 4.679191
> Metrics::mae(Boston$medv, m$fitted.values)
[1] 3.270863
> Metrics::mape(Boston$medv, m$fitted.values)
[1] 0.164173
# step6) 다중공선성 진단
library(car)
vif(m)
> vif(m)
crim 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
* vif가 10 이상인 경우 다중공선성 문제가 심각한 것으로 해석하며, 실무에서는 4 이상일 때도 의심스러운 수치로 해석한다.
# 직접 계산)
Boston_x <- Boston[, -ncol(Boston)]
m_tax <- lm(tax ~ ., Boston_x) # 설명변수들끼리 한 설명변수에 대한 영향 확인
summary(m_tax)
> summary(m_tax)
Call:
lm(formula = tax ~ ., data = Boston_x)
Residuals:
Min 1Q Median 3Q Max
-219.122 -20.031 -4.846 16.509 258.135
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 148.43175 60.75444 2.443 0.01491 *
crim -0.10357 0.39358 -0.263 0.79255
zn 0.81476 0.16026 5.084 5.26e-07 ***
indus 7.16172 0.66211 10.816 < 2e-16 ***
chas -27.76723 10.24257 -2.711 0.00694 **
nox 75.77074 45.61937 1.661 0.09736 .
rm -8.25524 4.99142 -1.654 0.09879 .
age 0.10520 0.15813 0.665 0.50619
dis 1.03253 2.38830 0.432 0.66569
rad 13.90186 0.48925 28.415 < 2e-16 ***
ptratio 2.62525 1.56237 1.680 0.09353 .
black -0.01903 0.03216 -0.592 0.55422
lstat -0.20664 0.60732 -0.340 0.73381
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 56.83 on 493 degrees of freedom
Multiple R-squared: 0.889, Adjusted R-squared: 0.8863
F-statistic: 329 on 12 and 493 DF, p-value: < 2.2e-16
R^2 : 0.889
1/(1-R^2) => 9.009009 (tax와 유사)
04 변수 선택 / 변수 제거
-01 의미
- 지도학습의 Y예측에 유의한 변수 선택, 유의하지 않은 변수를 제거함으로써 학습 효과를 극대화시킨다.
-02 의의
- 불필요한 변수 제거 시 더 단순한 모델로 예측하게 되므로 과적합 해소가 가능하다.
- 예측력 강화
-03 방법
1) 필터 기법
- 변수 하나씩 종속변수와의 유의성을 확인
- 종류 : 상관계수, IG, 카이제곱통계량, t.test 등
2) 래퍼 기법
- 여러 변수들의 상관성을 고려하여 모델 전체 학습 측면에서 변수 선택
- 종류 : 전진선택법, 후진제거법, 단계적선택법
3) 임베디드 기법
- 머신러닝 기법을 사용한 모델의 유의한 변수 확인
- 종류 : tree 기반 모델(DT, RF 등), 회귀분석
-04 예제
[ 예제 - 회귀분석시 변수선택 ]
y <- Boston$medv
x <- Boston[,-ncol(Boston)]
# 1. 상관계수
cor(x,y)
> cor(x,y)
[,1]
crim -0.3883046
zn 0.3604453
indus -0.4837252
chas 0.1752602
nox -0.4273208
rm 0.6953599
age -0.3769546
dis 0.2499287
rad -0.3816262
tax -0.4685359
ptratio -0.5077867
black 0.3334608
lstat -0.7376627
chars는 찰스강 인접여부로 factor형이다.
따라서 종속변수와의 상관관계를 상관계수로 확인하는 행위가 부적절하다.
나머지 변수 중 회귀분석의 각 회귀계수 유의성 검정 결과로 제시된 indus, age 컬럼의 상관성은 무시할정도로 낮다고 볼 수 없다.
(정말로 상관성이 낮은지 아닌지를 보기위해서는 상관관계 검정을 해야한다.)
# 2. 전진선택 / 후진제거 / 단계적선택법
step(object, # 모델명
direction = c('both', # stepwise
'backward', # 후진제거법
'forward')) # 전진선택법
# 전진선택법 : b0로부터 시작해서 유의하다고 판단되는 변수들을 하나씩 추가한다. (더 이상 추가할 변수가 없을때까지)
# 후진선택법 : 모든 변수가 삽입된 모형으로부터 가장 유의하지 않다고 판단되는 변수들을 하나씩 제거한다. (더 이상 제거할 변수가 없을때까지)
# stepwise : 모든 변수가 삽입된 모형으로부터 가장 중요하지 않은 변수들을 제거하면서 제거된 변수들 중 다시 추가하는 경우를 고려한다.
# 변수선택 과정에서의 모형의 평가
# 선택법을 통해 3개의 변수가 선택되었으나 2개를 추가해야할 필요가 있어
# 선택전, 선택후 모델의 평가점수를 비교하였더니 변수 5개가 더 설명력이 있었다~ 라고 하는 경우 수정결정계수를 봐야한다. (rsqure)
# AIC, BIC는 모형 자체를 평가하는 것이 아니라 변수의 수를 결정할 때 참고
# 최종 스코어 비교는 MSE, MAE로 평가
# 변수의 수도 샘플의 수도 다른 두 모델을 비교할 때는 r^2로 비교하기 어려움, 그럴 때에는 MSE로 비교한다.
▶ 전진선택법
step1 <- step(m, direction = 'forward')
> step1 <- step(m, direction = 'forward')
Start: AIC=1589.64
medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad +
tax + ptratio + black + lstat
▶ 후진제거법
step2 <- step(m, direction = 'backward')
> step2 <- step(m, direction = 'backward')
Start: AIC=1589.64
medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad +
tax + ptratio + black + lstat
Df Sum of Sq RSS AIC
- age 1 0.06 11079 1587.7
- indus 1 2.52 11081 1587.8
<none> 11079 1589.6
- chas 1 218.97 11298 1597.5
- tax 1 242.26 11321 1598.6
- crim 1 243.22 11322 1598.6
- zn 1 257.49 11336 1599.3
- black 1 270.63 11349 1599.8
- rad 1 479.15 11558 1609.1
- nox 1 487.16 11566 1609.4
- ptratio 1 1194.23 12273 1639.4
- dis 1 1232.41 12311 1641.0
- rm 1 1871.32 12950 1666.6
- lstat 1 2410.84 13490 1687.3
Step: AIC=1587.65
medv ~ crim + zn + indus + chas + nox + rm + dis + rad + tax +
ptratio + black + lstat
Df Sum of Sq RSS AIC
- indus 1 2.52 11081 1585.8
<none> 11079 1587.7
- chas 1 219.91 11299 1595.6
- tax 1 242.24 11321 1596.6
- crim 1 243.20 11322 1596.6
- zn 1 260.32 11339 1597.4
- black 1 272.26 11351 1597.9
- rad 1 481.09 11560 1607.2
- nox 1 520.87 11600 1608.9
- ptratio 1 1200.23 12279 1637.7
- dis 1 1352.26 12431 1643.9
- rm 1 1959.55 13038 1668.0
- lstat 1 2718.88 13798 1696.7
Step: AIC=1585.76
medv ~ crim + zn + chas + nox + rm + dis + rad + tax + ptratio +
black + lstat
Df Sum of Sq RSS AIC
<none> 11081 1585.8
- chas 1 227.21 11309 1594.0
- crim 1 245.37 11327 1594.8
- zn 1 257.82 11339 1595.4
- black 1 270.82 11352 1596.0
- tax 1 273.62 11355 1596.1
- rad 1 500.92 11582 1606.1
- nox 1 541.91 11623 1607.9
- ptratio 1 1206.45 12288 1636.0
- dis 1 1448.94 12530 1645.9
- rm 1 1963.66 13045 1666.3
- lstat 1 2723.48 13805 1695.0
# 첫번째 모델
Start : AIC = 1589.64 (모든 변수를 제거하지 않은 시점에서의 시작점)
<none> 기준으로 윗쪽에는 유의한 값
즉, age, indus 변수는 제거를 고려할 필요가 있으며 그 외의 변수는 제거할 필요가 없다.
# 두번째 모델
Start : AIC = 1587.65(age가 제거된 시점에서의 시작점)
<none> 기준으로 윗쪽에는 유의한 값
즉, indus 변수는 제거를 고려할 필요가 있으며 그 외의 변수는 제거할 필요가 없다.
# 세번째 모델
Start: Start : AIC = 1585.76(age, indus가 제거된 시점에서의 시작점)
더 이상 제거할 변수가 없어 정지된다.
=> 후진제거법에 의해 age, indus 컬럼이 제거된 모형으로 수렴되었다.
최종모형의 formula는 formula(step2)로 확인이 가능하다.
# 수식 확인
m2 <- lm(formula(step2), Boston)
> formula(step2)
medv ~ crim + zn + chas + nox + rm + dis + rad + tax + ptratio +
black + lstat
▲ 해당 수식을 lm에 작성하면 된다.
# 변수의 개수가 다르므로 모델의 성능평가는 수정결정계수를 이용하면 된다.
# 0.7338 -> 0.7348
summary(m2)
> summary(m2)
Call:
lm(formula = formula(step2), data = Boston)
Residuals:
Min 1Q Median 3Q Max
-15.5984 -2.7386 -0.5046 1.7273 26.2373
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.341145 5.067492 7.171 2.73e-12 ***
crim -0.108413 0.032779 -3.307 0.001010 **
zn 0.045845 0.013523 3.390 0.000754 ***
chas 2.718716 0.854240 3.183 0.001551 **
nox -17.376023 3.535243 -4.915 1.21e-06 ***
rm 3.801579 0.406316 9.356 < 2e-16 ***
dis -1.492711 0.185731 -8.037 6.84e-15 ***
rad 0.299608 0.063402 4.726 3.00e-06 ***
tax -0.011778 0.003372 -3.493 0.000521 ***
ptratio -0.946525 0.129066 -7.334 9.24e-13 ***
black 0.009291 0.002674 3.475 0.000557 ***
lstat -0.522553 0.047424 -11.019 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.736 on 494 degrees of freedom
Multiple R-squared: 0.7406, Adjusted R-squared: 0.7348
F-statistic: 128.2 on 11 and 494 DF, p-value: < 2.2e-16
=> age, indus 컬럼 제외 후 수정결정계수가 소폭 증가했으므로 두 변수의 제거는 의미가 있다!
▶ 단계적 선택법
step3 <- step(m, direction = 'both')
> step3 <- step(m, direction = 'both')
Start: AIC=1589.64
medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad +
tax + ptratio + black + lstat
Df Sum of Sq RSS AIC
- age 1 0.06 11079 1587.7
- indus 1 2.52 11081 1587.8
<none> 11079 1589.6
- chas 1 218.97 11298 1597.5
- tax 1 242.26 11321 1598.6
- crim 1 243.22 11322 1598.6
- zn 1 257.49 11336 1599.3
- black 1 270.63 11349 1599.8
- rad 1 479.15 11558 1609.1
- nox 1 487.16 11566 1609.4
- ptratio 1 1194.23 12273 1639.4
- dis 1 1232.41 12311 1641.0
- rm 1 1871.32 12950 1666.6
- lstat 1 2410.84 13490 1687.3
Step: AIC=1587.65
medv ~ crim + zn + indus + chas + nox + rm + dis + rad + tax +
ptratio + black + lstat
Df Sum of Sq RSS AIC
- indus 1 2.52 11081 1585.8
<none> 11079 1587.7
+ age 1 0.06 11079 1589.6
- chas 1 219.91 11299 1595.6
- tax 1 242.24 11321 1596.6
- crim 1 243.20 11322 1596.6
- zn 1 260.32 11339 1597.4
- black 1 272.26 11351 1597.9
- rad 1 481.09 11560 1607.2
- nox 1 520.87 11600 1608.9
- ptratio 1 1200.23 12279 1637.7
- dis 1 1352.26 12431 1643.9
- rm 1 1959.55 13038 1668.0
- lstat 1 2718.88 13798 1696.7
Step: AIC=1585.76
medv ~ crim + zn + chas + nox + rm + dis + rad + tax + ptratio +
black + lstat
Df Sum of Sq RSS AIC
<none> 11081 1585.8
+ indus 1 2.52 11079 1587.7
+ age 1 0.06 11081 1587.8
- chas 1 227.21 11309 1594.0
- crim 1 245.37 11327 1594.8
- zn 1 257.82 11339 1595.4
- black 1 270.82 11352 1596.0
- tax 1 273.62 11355 1596.1
- rad 1 500.92 11582 1606.1
- nox 1 541.91 11623 1607.9
- ptratio 1 1206.45 12288 1636.0
- dis 1 1448.94 12530 1645.9
- rm 1 1963.66 13045 1666.3
- lstat 1 2723.48 13805 1695.0
# 첫번째 모델
Start : AIC = 1589.64 (모든 변수를 제거하지 않은 시점에서의 시작점)
<none> 기준으로 윗쪽에는 유의한 값
즉, age, indus 변수는 제거를 고려할 필요가 있으며 그 외의 변수는 제거할 필요가 없다.
# 두번째 모델
Start : AIC = 1587.65(age가 제거된 시점에서의 시작점)
<none> 기준으로 윗쪽에는 유의한 값
즉, indus 변수는 제거를 고려할 필요가 있으며 그 외의 변수는 제거할 필요가 없다.
제거된 age의 재편입을 고려하였으나 추가하였을 때 의미가 없으므로 age는 제거된다.
# 세번째 모델
Start: Start : AIC = 1585.76(age, indus가 제거된 시점에서의 시작점)
제거된 age, indus의 재편입을 고려하였으나 추가하였을 때 의미가 없으므로 age, indus는 제거된다.
더 이상 제거할 변수가 없어 정지된다.
=> age, indus 두 변수를 제거하는 것이 효율적으로 보인다.
[ 예제 - 회귀모형과 랜덤포레스트 모형 성능 비교(주택가격셋) ]
# step1) 데이터 로딩
library(MASS)
Boston
# step2) 데이터 분리
set.seed(50)
rn <- sample(1:nrow(Boston), nrow(Boston)*0.7)
Boston_tr <- Boston[rn, ]
Boston_te <- Boston[-rn, ]
# step3) 모델링
m_lm <- lm(medv ~., Boston_tr)
library(randomForest)
m_rf <- randomForest(medv ~ ., Boston_tr)
# step4) 적합값 확인
m_lm$fitted.values
pre_tr_lm <- predict(m_lm, newdata = Boston_tr)
pre_te_lm <- predict(m_lm, newdata = Boston_te)
pre_tr_rf <- predict(m_rf, newdata = Boston_tr)
pre_te_rf <- predict(m_rf, newdata = Boston_te)
# step5) 평가 (mse)
library(Metrics)
# 1) lm
mse(Boston_tr$medv, pre_tr_lm) # 21.16367
mse(Boston_te$medv, pre_te_lm) # 24.8355
# 2) rf
mse(Boston_tr$medv, pre_tr_rf) # 2.427911
mse(Boston_te$medv, pre_te_rf) # 13.91678
# rf 사용 채택
'아이티윌_데이터 분석 55기 > 강의내용 필기_통계 및 분석' 카테고리의 다른 글
| #16 16일차_결측값 처리와 이상값 검색 (★) (0) | 2026.05.07 |
|---|---|
| #15 15일차_차원축소 : 다차원 척도법(MDS), 주성분 분석(PCA) (0) | 2026.05.06 |
| #13 13일차_군집분석 및 평가 ·해석, 변수 스케일링, 회귀분석 (0) | 2026.04.29 |
| #12 12일차_교차검증, 분류모형, 군집분석 (0) | 2026.04.28 |
| #11 11일차_분석 과정, 앙상블 모형, 랜덤포레스트 (0) | 2026.04.27 |