39. R ์์๋ธ๋ชจ๋ธ ์ฐ์ต๋ฌธ์
01. ๋ ์จ ๋ฐ์ดํฐ์
์ ์ด์ฉํ์ฌ ๋จ๊ณ๋ณ๋ก RandomForest ๋ชจ๋ธ์ ์์ฑํ์์ค.
<๋จ๊ณ1> 1,2,22,23 ์นผ๋ผ ์ ์ธ
<๋จ๊ณ2> y๋ณ์ : RainTomorrow -> ์ดํญ๋ณ์ ๋ณ๊ฒฝ
<๋จ๊ณ3> ๋ชจ๋ธ ์์ฑ : Tree 400๊ฐ, ๋ถ๋ฅ๋ณ์ 4๊ฐ ์ด์ฉ
<๋จ๊ณ4> Confusion matrix ์ด์ฉ ๋ถ๋ฅ์ ํ๋ ๊ตฌํ๊ธฐ
<๋จ๊ณ5> ๋ถ๋ฅ์ ํ๋ ๊ฐ์ ์ ๊ธฐ์ฌํ๋ TOP3 ๋ณ์ ํ์ธํ๊ธฐ
setwd("C:/ITWILL/2_Rwork/data")
weatherAUS = read.csv('weatherAUS.csv')
<๋จ๊ณ1> 1,2,22,23 ์นผ๋ผ ์ ์ธ
df = weatherAUS[ ,c(-1,-2, -22, -23)]
str(df)
<๋จ๊ณ2> y๋ณ์ : RainTomorrow -> ์ดํญ๋ณ์ ๋ณ๊ฒฝ
sqrt(ncol(df)) # 4.242641
df$RainTomorrow = as.factor(df$RainTomorrow)
<๋จ๊ณ3> ๋ชจ๋ธ ์์ฑ : Tree 400๊ฐ, ๋ถ๋ฅ๋ณ์ 4๊ฐ ์ด์ฉ
model_weather = randomForest(RainTomorrow ~ .,
data = df,
ntree=400, mtry=4,
importance = T,
na.action=na.omit)
model_weather #error rate: 14.42%
names(model_weather)
<๋จ๊ณ4> Confusion matrix ์ด์ฉ ๋ถ๋ฅ์ ํ๋ ๊ตฌํ๊ธฐ
con = model_weather$confusion
con
acc = (con[1,1]+con[2,2]) / sum(con)
cat('accuracy =', acc)
<๋จ๊ณ5> ๋ถ๋ฅ์ ํ๋ ๊ฐ์ ์ ๊ธฐ์ฌํ๋ TOP3 ๋ณ์ ํ์ธํ๊ธฐ
varImpPlot(model_weather)
Humidity3pm(์ต๋)
Sunshine(ํ๋น)
WindGustSpeed(๋ํ์๋)
02. ๋์ถ์ฌ๋ถ ๋ฐ์ดํฐ์
์ ๋ณ์ ๋ชฉ๋ก์ ๋ณด๊ณ ๋จ๊ณ๋ณ๋ก RandomForest ๋ชจ๋ธ์ ์์ฑํ์์ค.
<๋จ๊ณ1> 1,5 ์นผ๋ผ ์ ์ธ
<๋จ๊ณ2> y๋ณ์ : Personal.Loan -> ์ดํญ๋ณ์ ๋ณ๊ฒฝ
<๋จ๊ณ3> ๋ชจ๋ธ ์์ฑ : Tree 500๊ฐ, ๋ถ๋ฅ๋ณ์ 3๊ฐ ์ด์ฉ
<๋จ๊ณ4> Confusion matrix ์ด์ฉ ๋ถ๋ฅ์ ํ๋ ๊ตฌํ๊ธฐ
<๋จ๊ณ5> ๋ถ๋ฅ์ ํ๋ ๊ฐ์ ์ ๊ธฐ์ฌํ๋ TOP3 ๋ณ์ ํ์ธํ๊ธฐ
<๋์ถ์ฌ๋ถ ๋ฐ์ดํฐ์
๋ณ์ ๋ชฉ๋ก>
bank = read.csv('UniversalBank.csv', stringsAsFactors = F)
str(bank)
<๋์ถ์ฌ๋ถ ๋ณ์ ๋ชฉ๋ก>
'data.frame': 5000 obs. of 14 variables:
$ ID :๊ณ ๊ฐ๊ตฌ๋ถ(์ ์ธ) int 1 2 3 4 5 6 7 8 9 10 ...
$ Age :๋์ด int 25 45 39 35 35 37 53 50 35 34 ...
$ Experience :๊ฒฝ๋ ฅ int 1 19 15 9 8 13 27 24 10 9 ...
$ Income :์๋ int 49 34 11 100 45 29 72 22 81 180 ...
$ ZIP.Code :์ฐํธ๋ฒํธ(์ ์ธ) int 91107 90089 94720 94112 91330 92121 91711 93943 90089 93023 ...
$ Family :๊ฐ์กฑ์ int 4 3 1 1 4 4 2 1 3 1 ...
$ CCAvg :์ ์ ์ฉ์นด๋ ์ฌ์ฉ์ก num 1.6 1.5 1 2.7 1 0.4 1.5 0.3 0.6 8.9 ...
$ Education :๊ต์ก์์ค int 1 1 1 2 2 2 2 3 2 3 ...
$ Mortgage :๋ด๋ณด์ฑ๊ถ int 0 0 0 0 0 155 0 0 104 0 ...
$ Personal.Loan :๊ฐ์ธ๋์ถ(Y๋ณ์:์๋ฝ or ๊ฑฐ์ ) int 0 0 0 0 0 0 0 0 0 1 ...
$ Securities.Account:์ ๊ฐ์ฆ๊ถ๊ณ์ int 1 1 0 0 0 0 0 0 0 0 ...
$ CD.Account :CD๊ณ์ข int 0 0 0 0 0 0 0 0 0 0 ...
$ Online :์จ๋ผ์ธ๋ฑ
ํน int 0 0 0 0 0 1 1 0 1 0 ...
$ CreditCard :์ ์ฉ์นด๋ int 0 0 0 0 1 0 0 1 0 0 ...
<๋จ๊ณ1> 'ID', 'ZIP.Code' ์นผ๋ผ ์ ์ธ subset ๋ง๋ค๊ธฐ
dim(bank) # 5000 14
bank_df = bank[c(-1, -5)] # ID, ZIP.Code ์ ์ธ
dim(bank_df) # 5000 12
sqrt(11)
<๋จ๊ณ2> y๋ณ์ : Personal.Loan -> ์ดํญ๋ณ์ ๋ณ๊ฒฝ
Personal.Loan : ๋์ถ ์๋ฝ or ๊ฑฐ์
bank$Personal.Loan = as.factor(bank_df$Personal.Loan)
<๋จ๊ณ3> ๋ชจ๋ธ ์์ฑ : Tree 500๊ฐ, ๋ถ๋ฅ๋ณ์ 3๊ฐ ์ด์ฉ
model_bank = randomForest(Personal.Loan ~ .,
data = bank_df,
ntree=500, mtry=3,
importance = T,
na.action=na.omit)
model_bank # error rate: 14.42%
<๋จ๊ณ4> Confusion matrix ์ด์ฉ ๋ถ๋ฅ์ ํ๋ ๊ตฌํ๊ธฐ
con = model_bank$confusion
con
acc = (con[1,1]+con[2,2]) / sum(con)
cat('accuracy =', acc) # accuracy = 0.9883787
<๋จ๊ณ5> ๋ถ๋ฅ์ ํ๋ ๊ฐ์ ์ ๊ธฐ์ฌํ๋ TOP3 ๋ณ์ ํ์ธํ๊ธฐ
varImpPlot(model_bank)
Income > Education > Family