kaggle之員工離職分析


本文探討的是kaggle中的一個案例-員工離職分析,從數據集中分析員工的離職原因,並發現其中的問題。數據主要包括影響員工離職的各種因素(工資、績效、工作滿意度、參加項目數、工作時長、是否升職、等)以及員工是否已經離職的對應記錄。

數據來源:Human Resources Analytics | Kaggle

參考學習視頻:http://www.tianshansoft.com/

分析目的:分析員工離職原因。

1.對數據集中變量進行描述性分析,變量說明:

2.探索是否離職與公司滿意度,績效,工作時長,工作意外的聯系。

#員工離職與滿意度關系
p1_sat<- ggplot(data = train,aes(left,satisfaction_level,fill=left))+geom_boxplot()+
  labs(x='員工情況',y='員工對公司滿意度')+
  scale_x_discrete(labels=c('在職','離職'))+
  stat_summary(fun.y = mean,geom="point",shape=23,size=1.8)+  #添加均值點
  guides(fill=F)   #除去圖例

其他數據繪圖類似

#呈現一頁多圖(Rmisc包)
multiplot(p1_sat,p2_eva,p3_hours,p4_time,cols =2)

初步結論:

1.離職員工對公司滿意度普遍較低,評分集中在0.4

2.離職員工工作時長較長,集中在220小時

3.50%以上的離職員工績效都在0.8以上,超過了平均績效0.71

3.離職員工工作年限普遍較長,平均在該公司工作了4年

3.探索是否離職與薪水水平、職業的關系

#探索是否離職與自身職業的關系
p5_sales<- ggplot(data = train,aes(sales,..count..,fill=left))+
  geom_bar(stat = 'count',position = 'fill')+
  labs(x='職位名稱',y='比例')+
  guides(fill=F)  #去除圖例

其他數據繪圖類似

 

 圖中可看出

1.低工資的員工離職率較高,超過了25%。離職率與薪資水平呈負相關,薪水越高,離職率越低。

2.五年內無升職的員工,離職率達25%,遠大於已升職的員工。

3.只參加了兩個項目離職率接近65%,參加過7個項目的員工均已離職。參加項目越多,離職率越高(除去參加2個項目的員工)

 

接下來要進行的是

建模預測:決策樹和朴素貝葉斯

建立決策樹模型思路:

1.提取出優秀員工(績效>0.7或工作年限>=4或參加項目數>=5)

2.交叉驗證 (此處使用五折交叉驗證)  

3.划分訓練集和測試集

4.訓練模型,建模

5.建立混淆矩陣

 

  • 首先提取出優秀員工
good <-filter(.data = train,last_evaluation>0.7|time_spend_company>=4|number_project>=5) #滿足三個條件中的一個均可
summary(good)
  • 接着進行交叉驗證(caret包)

 train_control <- trainControl(method='cv',number = 5) #method = ‘cv’是設置交叉驗證方法,number = 5意味着是5折交叉驗證 

 

  • 划分訓練集和測試集,70%作為訓練集,剩下為測試集
set.seed(1234)  #設置種子,使抽樣結果一致
intrain <- createDataPartition(y = train$left,p = 0.7,list = F)
#createDataPartition( )就是數據划分函數
#對象是left,p=0.7表示訓練數據所占的比例為70%
#list是輸出結果的格式,默認list=FALSE
train_data <- train[intrain,]       #訓練集
test_data <-  train[-intrain,]      #測試集
  • 使用訓練集訓練模型: train()函數
rpartmodel <- train(left ~ ., data = train_data, 
                    trControl = train_control, method = 'rpart')
# 使用caret包中的trian函數對訓練集使用5折交叉的方法建立決策樹模型
# left ~.的意思是根據因變量與所有自變量建模;trCintrol是控制使用那種方法進行建模
# method就是設置使用哪種算法
  • 利用rpartmodel模型進行預測:predict()函數
pre_model <-  predict(rpartmodel,test_data[,-7])#([-7]的意思就是剔除測試集的因變量(left)這一列
  • 建立混淆矩陣
con_rpart <- table(pre_model,test_data$left)
con_rpart   #查看矩陣

求得

查准率=743/(743+61)=92.4%

查全率=743/(743+328)=69.3%

 

建立朴素貝葉斯模型

思路:

1.訓練模型

2.預測

1 nbmodel <-train(left ~. ,data=train_data,trControl=train_control,method='nb')
2 pre_nb_model <-predict(nbmodel,test_data[,-7])
3 con_nb <- table(pre_nb_model,test_data$left)
4 con_nb

查准率: 718/(718+46)=93.97%

查全率: 718/(718+353)=67%

查全率較低於決策模型中的69%,所以使用決策樹模型

模型評估

  • 將預測模型轉化為數值型
pre_model <- as.numeric(pre_model)       #繪制ROC曲線需要將值轉為數值型
pre_nb_model <-as.numeric(pre_nb_model)
roc_rpart <- roc(test_data$left,pre_model)    #使用決策樹模型
  •  求假正例率和真正例率(查全率)
#假正例率=1-真反例率
Specificity <- roc_rpart$specificities   #真反例率。假正例率為ROC曲線X軸
Sensitivity <- roc_rpart$sensitivities   #真正例率,為ROC曲線Y軸

  • 繪制ROC曲線(決策樹模型)
ggplot(data = NULL,aes(1-Specificity,Sensitivity))+
  geom_line(color='red') +  #ROC曲線
  geom_abline()+            #對角線
  annotate(geom = 'text',x = 0.4,y=0.5,label=paste('AUC',round(roc_rpart$auc,3)))
  #geom='text'指圖層上聲明增加注釋,在坐標(0.4,0.5)處添加AUC值

  • 繪制ROC曲線(朴素貝葉斯模型)
pre_nb_model <-as.numeric(pre_nb_model)
roc_nb <- roc(test_data$left,pre_nb_model)
Specificity_nb <- roc_nb$specificities   
Sensitivity_nb <- roc_nb$sensitivities
ggplot(data=NULL,aes(1-Specificity_nb,Sensitivity_nb))+
  geom_line(color='red')+
  geom_abline()+
  geom_text(aes(0.4,0.5),data = NULL,label=paste('AUC',round(roc_nb$auc,3)))+
  labs(title='ROC曲線(朴素貝葉斯)')+
  theme(plot.title = element_text(hjust = 0.5))

模型應用

#使用回歸樹模型預測概率
Pre_end <- predict(rpartmodel,test_data[,-7],type='prob')
data_end <- cbind(round(Pre_end,3),pre_model)
names(data_end) <- c('pred.0', 'pred.1', 'pred')
datatable(data_end)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM