本篇幅會介紹迴歸分析與決策樹,第一部分先行探討迴歸分析,簡單介紹是探討資料間其應變數與自變數的關係,運用原始資料經由相關計算後,找出一條迴歸方程式來貼近資料的分布。

首先本次利用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)