ch0nny_log

[빅데이터분석] R _ 62. 훈련과 테스트를 분리한 다중 회귀 모델 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 62. 훈련과 테스트를 분리한 다중 회귀 모델

chonny 2024. 7. 18. 13:47

※ 다중회귀 분석결과 해석을 하기 앞서서 확인해야 될 사항!

1. 변수들 끼리의 상관관계 분석

2. 다중 공선성 문제가 있는지 모델 생성후에 확인

3. 종속 변수에 미치는 독립변수들의 영향력만 확인하고 싶다면 표준화나 정규화를 수행

 

※ 다중회귀 모델의 성능을 높이는 방법!

1. 좋은 파생변수를 생성

2. 이상치를 제거하거나 다른 값으로 치환

3. 결측치를 제거 하거나 다른 값으로 치환

 

+ 빅분기 실기 시험은 제한된 시간안에 문제를 풀면되어서 위의 작업을 하는 문제들이 출제되지는 않고 성능이 좋은 모델인지 아닌지를 테스트하는 시험입니다.

 1유형: 데이터 전처리
 2유형: 모델 생성 
 3유형: 가설 검정

케글에 도전하거나 공모전에 도전하거나 빅분기 시험이면 훈련과 테스트를 분리해서 회귀 모델을 생성해야합니다. 

실습. 훈련과 테스트를 분리해서 다중회귀 모델 만들기
#1. 데이터를 불러옵니다.
ins <-read.csv('c:\\data\\insurance.csv',header = T)
ins

#2. 데이터를 살펴봅니다.
colSums(is.na(ins))

#3. 훈련과 테스트를 분리합니다.
set.seed(123)
library(caret)
k <- createDataPartition( ins$expenses, p=0.9, list=FALSE)
train_data <-  ins[  k  ,   ]
test_data <- ins[  -k  ,    ]

nrow(train_data) #1206
nrow(test_data)  #132


#4. 다중회귀 모델을 생성합니다.
model <- lm(expenses ~  . ,  data=train_data)
summary(model)

#5. 모델의 성능을 확인합니다.
result <- predict( model,  newdata=test_data)
cor( result, test_data$expenses)

#6. 모델의 성능을 높입니다.(파생변수 생성)
ins$bmi30  <-  ifelse( ins$bmi >= 30, 1, 0 ) 

train_data <-  ins[  k  ,   ]
test_data <- ins[  -k  ,    ]

nrow(train_data)  #1206
nrow(test_data)  # 132

#7. 다중회귀 모델을 재생성합니다.
model2 <- lm(expenses ~  . ,  data=train_data)
summary(model2)

#8. 모델의 성능을 재확인합니다.
result2 <- predict( model2,  newdata=test_data)
cor( result2, test_data$expenses)

#9. 비만이면서 흡연도 하는 파생변수 추가 생성
model3<- lm(expenses~.+bmi30*smoker,data=train_data)
summary(model3)

#10. 모델의 성능을 확인합니다.
result3 <- predict( model3,  newdata=test_data)
cor( result3, test_data$expenses)​


- 결정계수: 0.7585 <-- 훈련데이터에 대한 설명력
- 상관계수: 0.85 <- 테스트에 대한 시험 점수

예를들어) 수업 태도가 좋은건 결정계수가 높은 것/ 시험결과가 좋은건 상관계수가 높은 것
결졍계수가 0.75-> 0.86 으로 증가함.

상관 계수도 0.85 -> 0.91 으로 증가함.

 

※ (외워가야하는 빅분기 시험용 코드) 랜덤 포레스트로 위의 모델을 변경하시오
#1. 패키지를 설치합니다.
install.packages('randomForest')

#2. 모델을 생성합니다.
library(randomForest)
set.seed(123)
r_model <-randomForest(expenses~.+bmi30*smoker, data= train_data)
print(r_model)

#3. 모델을 평가합니다.
result4 <- predict( r_model,  newdata=test_data)
cor(result4,test_data$expenses)​

질문나무가지 갯수가 500개임