# naver search confirm # markdown number and equation R 랜덤포레스트(randomforest) //google adsense
본문 바로가기
R_데이터 분석 기술

R 랜덤포레스트(randomforest)

by 노마드분석가 2022. 5. 3.

관련글

 

R_의사결정나무 분석(rpart)

관련글 의사결정나무(decision tree) 관련글 선형회귀분석 밑바닥부터 이해하기 관련글 상관관계와 상관계수 상관관계와 상관계수 1. 들어가며 연속형 변수 x, y의 관계는 상관관계(correlation) 분석을

diseny.tistory.com

1. 들어가며

실전에서 분류 목적으로 의사결정나무 알고리즘을 사용하는 경우는 드물다. 왜냐하면 과적합면에서 다소 취약하기 때문이다. 따라서 이를 보완하는 방법 중에 하나인 랜덤포레스트를 많이 이용한다. 실제 R을 이용해 랜덤포레스트 모델을 구축하는 방법을 알아보자.

 

2. 예제 데이터

library(caret) # GermanCredit 데이터를 활용하기 위해
library(randomForest)
data(GermanCredit)
str(GermanCredit)

 

caret 패키지에 내장된 GermanCredit 데이터의 구조를 살펴보면 아래와 같다. 1000개의 행 데이터와 62개의 변수를 포함하는 데이터이며 Class 변수가 신용 상태를 Good과 Bad로 구분하고 있다. 따라서 Class 변수를 분류하는 모델을 구축하도록 한다. 

 

원 데이터에서 Class 범주의 Good과 Bad 비율을 확인해본다. 아래 코드를 실행하면 Good이 70%, Bad가 30%임을 알 수 있다. 

 

temp = table(GermanCredit$Class) #Class 범주 분포 파악
prop.table(temp)

 

3. 데이터 분할

원 데이터를 70%의 학습데이터와 30%의 테스트 데이터로 분할하자. 학습데이터의 Class에서 Good과 Bad의 분포를 확인한다. 랜덤하게 분할되었으면 원본 데이터의 Good : Bad = 7 : 3의 비율과 거의 비슷할 것이다. 

 

divide = sample(c(rep(0, 0.7 * nrow(iris)), rep(1, 0.3 * nrow(iris))))
Train = GermanCredit[divide == 0, ]
test = GermanCredit[divide == 1, ]
temp = table(Train$Class)
prop.table(temp)

 

4. 모델 적합

이제 학습데이터에 randomForest 함수로 모델을 데이터에 적합해 보자

 

rf.tree = randomForest(Class~., data = GermanCredit) #Class를 목적변수로 나머지 변수를 예측변수로 투입

 

적합된 모델을 실행하면 아래와 같은 결과를 얻는다. 

 

 

 

  • 500개의 트리를 생성함(기본값)
  • 각 분기점에서 활용한 변수는 7개
  • OOB : Out-of-Bag 오차는 24.36%. 
  • confusion matrix에서 행은 예측, 열을 실제값을 의미한다. 

 

5. 모델 성능 평가

학습데이터로 구축한 모델을 테스트 데이터를 이용해 모델의 성능을 검증한다. caret 패키지의 confusionMatrix 함수를 이용하면 쉽게 평가 성능을 얻을 수 있다. 전체적인 모델의 정확도는 0.78로 다소 낮은 성능을 보여준다. 

 

pred = predict(rf.tree, test)
confusionMatrix(table(pred, test$Class)) #예측결과와 실제결과 비교

 

 

6. 중요 변수 확인

랜덤포레스트 모델을 구축하는데 사용된 변수 중에서 특정 변수를 포함할때와 하지 않을 때의 모델 성능 차이에 기반한 변수 중요도를 계산할 수 있다. 변수 중요도에 대한 이론적인 개념은 다른 글에서 소개하기로 하고 여기에서는 R로 간단하게 플로팅 하는 방법을 소개한다. varImPlot 함수를 이용하면 쉽다. 

 

varImpPlot(rf.tree)

 

[그림 1] 랜덤포레스트의 변수 중요도

 

결과를 보면 Amout 변수가 가장 중요하고 그 다음이 Duration이라는 것을 알 수 있다. 

 

7. 변수 기여도

중요 변수는 어디까지나 나무 모델이 가지치기(분기)할 때 얼마나 데이터의 불순도를 낮추느냐의 개념이고 하나의 예측변수가 결과변수(Class)에 미치는 영향을 고려할 수 있다. 위에서 Amout 변수가 매우 중요하다고 밝혀졌으므로 Amout 변수가 신용도(Class) Good이 되기 위함과 어떤 관련성이 있는지 살펴보자. 

 

참고로 Amout 변수는 최소 338, 최대 18, 424 값을 가진다. 

 

partialPlot(rf.tree,Train, Amount,"Good")

 

[그림 2] Amout 변수와 Class Good의 관계

 

위의 코드를 실행해보면 <그림 2>와 같은 그래프가 생성된다. 그래프를 보면 Amout 변수는 값이 작을 수록 Class가 Good, 클 수록 Class가 Bad가 되는 경향을 보이고 있다.  

반응형

'R_데이터 분석 기술' 카테고리의 다른 글

R 확인적 요인분석(CFA)  (0) 2022.05.13
R 크론바흐 알파 값 계산  (0) 2022.05.13
R을 이용한 t-test와 효과 크기 계산  (0) 2022.05.04
R_의사결정나무 분석(rpart)  (0) 2022.05.02
R 회귀분석  (0) 2022.04.13
R 교차표 작성  (0) 2022.04.08
R 주성분 분석  (0) 2022.04.07

댓글