本篇幅會介紹迴歸分析與決策樹,第一部分先行探討迴歸分析,簡單介紹是探討資料間其應變數與自變數的關係,運用原始資料經由相關計算後,找出一條迴歸方程式來貼近資料的分布。
首先本次利用R語言本身的資料(cars)來進行分析,所以先載入R語言的資料集。
require(datasets) #載入資料集
str(cars) #確認資料結構
## 'data.frame': 50 obs. of 2 variables:
## $ speed: num 4 4 7 7 8 9 10 10 10 11 ...
## $ dist : num 2 10 4 22 16 10 18 26 34 17 ...
這是一個data.frame的型態,有50個樣本,2個變數,分別為speed與dist,再來確認前六筆資料
head(cars) #查看cars前六筆資料
## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 6 9 10
可以看出資料約為整數資料,接這稍微確認資料分布
summary(cars) #查看資料分布
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
所以平均速度大約15,距離約為42.98,且相對而言距離有較明顯離群值(2 & 120),這邊便可以單純利用plot劃出分布圖
plot(x=cars$speed, #將X資料放cars中的speed
y=cars$dist, #將Y資料放cars中的dist
pch=7, #點的樣式挑選7號
col=9) #顏色挑選9號
也可以利用盒鬚圖來看資料分布
boxplot(cars, #將資料放cars
col=5:6 #顏色挑選5號與6號
)
先介紹迴歸函式lm(Y~X1+X2+…+XK,data= ),左邊Y的部分就是應變數,右邊的Xi就是自變數,後面的data為資料來源 此次我們以dist作為應變數(Y),以speed作為自變數(X)來進行迴歸分析
regression <- lm(cars$dist~cars$speed , #以dist作為應變數(Y),以speed作為自變數(X)
data = cars) #資料為cars
summary(regression)
##
## Call:
## lm(formula = cars$dist ~ cars$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 *
## cars$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
先從coefficients:看到迴歸方程式為 y = -17.5791 + 3.924x
R-squared: 0.6511 Adjusted R-squared: 0.6438 p-value: 1.49e-12 根據p-value值,此dist變數對speed的影響顯著
決策樹簡單的先從樹最上面有一個頂點,再來會藉由枝幹往下延伸,將使用者對於想要探討的資料以這種角度出發,我們最希望可以判斷最想知道的結果(頂點),到底是由什麼原因(枝幹)所組成,所以此篇幅要來利用決策樹的套件模型來針對kaggle中針對人力資源部的員工資料,來進行分析。
首先先載入資料,與簡單觀察資料型態
HRdata <- read.csv('C:/Users/User/Desktop/R/hr.csv') #讀取資料,並且命名為HRdata
str(HRdata) #觀察資料型態
## 'data.frame': 14999 obs. of 10 variables:
## $ satisfaction_level : num 0.38 0.8 0.11 0.72 0.37 0.41 0.1 0.92 0.89 0.42 ...
## $ last_evaluation : num 0.53 0.86 0.88 0.87 0.52 0.5 0.77 0.85 1 0.53 ...
## $ number_project : int 2 5 7 5 2 2 6 5 5 2 ...
## $ average_montly_hours : int 157 262 272 223 159 153 247 259 224 142 ...
## $ time_spend_company : int 3 6 4 5 3 3 4 5 5 3 ...
## $ Work_accident : int 0 0 0 0 0 0 0 0 0 0 ...
## $ left : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ promotion_last_5years: int 0 0 0 0 0 0 0 0 0 0 ...
## $ sales : Factor w/ 10 levels "accounting","hr",..: 8 8 8 8 8 8 8 8 8 8 ...
## $ salary : Factor w/ 3 levels "high","low","medium": 2 3 3 2 2 2 2 2 2 2 ...
可以看出來資料一共有14999筆資料10個變數,型態有連續資料(num)、整數資料(int)與類別資料(Factor),並且觀察資料分布。
summary(HRdata) # 觀察資料分布
## satisfaction_level last_evaluation number_project average_montly_hours
## Min. :0.0900 Min. :0.3600 Min. :2.000 Min. : 96.0
## 1st Qu.:0.4400 1st Qu.:0.5600 1st Qu.:3.000 1st Qu.:156.0
## Median :0.6400 Median :0.7200 Median :4.000 Median :200.0
## Mean :0.6128 Mean :0.7161 Mean :3.803 Mean :201.1
## 3rd Qu.:0.8200 3rd Qu.:0.8700 3rd Qu.:5.000 3rd Qu.:245.0
## Max. :1.0000 Max. :1.0000 Max. :7.000 Max. :310.0
##
## time_spend_company Work_accident left promotion_last_5years
## Min. : 2.000 Min. :0.0000 no :11428 Min. :0.00000
## 1st Qu.: 3.000 1st Qu.:0.0000 yes: 3571 1st Qu.:0.00000
## Median : 3.000 Median :0.0000 Median :0.00000
## Mean : 3.498 Mean :0.1446 Mean :0.02127
## 3rd Qu.: 4.000 3rd Qu.:0.0000 3rd Qu.:0.00000
## Max. :10.000 Max. :1.0000 Max. :1.00000
##
## sales salary
## sales :4140 high :1237
## technical :2720 low :7316
## support :2229 medium:6446
## IT :1227
## product_mng: 902
## marketing : 858
## (Other) :2923
先來介紹一下決策樹的函式,rpart(y~X,data) 可以看出來跟第一部分的迴歸函式相似,但這邊教大家一個小技巧 放入自變數(X)的地方輸入.(一個點)就可以代表除了以放入應變數(Y)以外其他變數都放入自變數(X),以人資的資料本次探討重點放在員工離職與否。
install.packages("rpart") #安裝rpart套件
## Installing package into 'C:/Users/User/Documents/R/win-library/3.4'
## (as 'lib' is unspecified)
## Error in contrib.url(repos, "source"): trying to use CRAN without setting a mirror
require(rpart) #載入rpart套件
## Loading required package: rpart
HR.model <- rpart(left~. , #將left放入應變數(Y)並且將其餘變數放入自變數(X),並且建立在HR.model裡
data = HRdata) #資料取自於HRdata
再來將建立好的決策樹視覺化,可以運用簡單的plot(),這邊介紹一個partykit套件,可以結合更多資訊在視覺化上
install.packages("partykit") #安裝partykit套件
## Installing package into 'C:/Users/User/Documents/R/win-library/3.4'
## (as 'lib' is unspecified)
## Error in contrib.url(repos, "source"): trying to use CRAN without setting a mirror
require(partykit) #載入partykit套件
## Loading required package: partykit
## Warning: package 'partykit' was built under R version 3.4.3
## Loading required package: grid
HR.tree <- as.party(HR.model)#將HR.model轉換為樹的型態
plot(HR.tree) #畫出HR.tree
這張圖給了很多資訊,由上往下可以先判斷影響員工離職因素的重要性,所以最上方的工作滿意度為第一支點,接續往下為年資與執行過的專案件數。
那就簡單的來看這張圖最極端的離職率最高的與離職率最低的,首先離職率最高的路徑由上往下看為 1.工作滿意度小於0.465 2.專案計畫大於2.5建 3.工作滿意度小於0.115 滿足這三個條件的離職率高達100%
再來離職率最低的左邊的項目 1.工作滿意度大於0.465 2.年資大於4.5年 3.最後評價大於0.805 4.平均月工時大於216.5小時 5.年資大於6.5年 滿足這五個條件離職率為0%
參考與來源 R系列筆記 - skydome20 (http://rpubs.com/skydome20/R-Note5-First_Practice) HR analytics - kaggle (https://www.kaggle.com/ludobenistant/hr-analytics-1)