员工离职预测模型:决策树与Logistic回归分析
员工离职预测模型:决策树与Logistic回归分析
本文将使用决策树和Logistic回归模型对员工离职数据进行分析,探讨影响员工离职的关键因素,并比较两种模型的优缺点。
决策树模型
首先,在全样本数据下,使用参数分别为cp=0.1和cp=0.05建立决策树模型:
library(rpart)
# 建立决策树模型
tree1 <- rpart(left ~ ., data = data_dr, control = rpart.control(cp = 0.1))
tree2 <- rpart(left ~ ., data = data_dr, control = rpart.control(cp = 0.05))
# 画出决策树
library(rpart.plot)
prp(tree1, extra = 1, box.col = 'lightgray', branch.lty = 3)
prp(tree2, extra = 1, box.col = 'lightgray', branch.lty = 3)
使用cp=0.1和cp=0.05建立的决策树如下图所示:


其中,根节点表示总体样本,每个中间节点表示一个变量或者变量的组合,每个叶子节点表示一个决策结果,比如离职或者不离职。
我们选择其中的三个节点进行解释:
- 根节点:总体样本,包含了所有员工,没有任何限制。
- 中间节点1:员工的满意度小于0.465,这是一个比较严格的限制条件,意味着满意度低的员工更容易离职。
- 叶子节点1:员工的满意度小于0.465,工作年限大于6.5年,而且工作效率低于0.57,这些员工有很高的离职率。
两棵树的异同:
- 参数不同:cp=0.1的树比cp=0.05的树更浅,表示cp越小,树的深度越大。
- 叶子节点不同:树的深度不同,导致叶子节点的个数也不同,cp=0.1的树有10个叶子节点,而cp=0.05的树有17个叶子节点。
如果使用不同深度的参数建立决策树会怎样?
如果参数cp太小,会导致树过于深入,造成过拟合。如果参数cp太大,会导致树过于简单,忽略了重要的变量和交叉作用。因此,我们需要通过交叉验证等方法来选择最优的参数。
不同叶子节点个数的决策树会有什么异同?
同样地,过多的叶子节点会导致过拟合,过少的叶子节点会忽略重要的变量和交叉作用。因此,我们需要通过交叉验证等方法来选择最优的叶子节点个数。
如何选择最优的模型?
我们可以使用交叉验证等方法来选择最优的参数和叶子节点个数,具体步骤如下:
- 将数据集分为训练集和测试集。
- 对于每个参数和叶子节点个数的组合,使用训练集建立模型,并在测试集上进行预测。
- 计算每个组合的预测准确率、AUC等指标。
- 选择最优的组合,使用全部数据建立模型。
Logistic回归模型
下面我们使用Logistic回归在此数据上讨论与员工离职最相关的变量有哪些:
# 建立Logistic回归模型
model <- glm(left ~ ., data = data_dr, family = 'binomial')
# 输出模型系数
summary(model)$coef
Logistic回归模型的结果如下:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.9618759 0.1717901 -11.42111 7.718e-30
satisfaction -4.1290034 0.1457301 -28.31848 < 2.2e-16
evaluation 0.6072606 0.1030421 5.88887 3.892e-09
number_of_projects 0.1294461 0.0161726 8.00329 1.29e-15
average_monthly_hours 0.0042731 0.0005156 8.29096 < 2.2e-16
time_spend_company 0.2658958 0.0193242 13.76308 < 2.2e-16
work_accident -1.4952564 0.1044705 -14.31464 < 2.2e-16
promotion_last_5years -1.1701032 0.2906819 -4.02325 5.76e-05
department_R&D 0.2025996 0.1295625 1.56572 0.117517
department_accounting 0.0331027 0.1249311 0.26438 0.791440
department_hr 0.3723006 0.1267087 2.93995 0.003299
department_management -0.5229539 0.1724775 -3.03277 0.002426
department_marketing 0.1328375 0.1233535 1.07718 0.281488
department_product_mng 0.1188916 0.1239727 0.95821 0.338711
department_sales 0.1280320 0.0892218 1.43490 0.151864
salary_low 1.9656043 0.1056890 18.60082 < 2.2e-16
salary_medium 1.2677905 0.1093329 11.59548 < 2.2e-16
根据系数的大小可以看出,与员工离职最相关的变量是满意度(satisfaction)、工作事故(work_accident)和薪资水平(salary)。这与决策树的结果是一致的。
但是,Logistic回归模型不能很好地捕捉变量之间的交叉作用,而决策树可以。因此,两种模型的结果可能存在一定的差异。
总结
本文通过决策树和Logistic回归模型分析了员工离职数据,发现影响员工离职的关键因素包括满意度、工作事故和薪资水平。决策树模型能够捕捉变量之间的交叉作用,而Logistic回归模型则更适合分析线性关系。在实际应用中,可以根据具体情况选择合适的模型进行分析。
补充:ROC曲线分析
为了更直观地评估模型的性能,我们可以绘制ROC曲线。以下代码展示了如何绘制参数为cp=0.05的决策树模型的ROC曲线:
library(pROC)
library(ggplot2)
# 预测离职概率
pred <- predict(tree2, type = 'prob')[,2]
# 计算ROC曲线
modelroc <- roc(data_dr$left, pred)
# 绘制ROC曲线
ggplot(modelroc) + geom_line(aes(x = 1 - specificity, y = sensitivity)) + geom_abline(intercept = 0, slope = 1, linetype = 2)
该代码使用了pROC包绘制ROC曲线,并使用ggplot2包进行美化。通过观察ROC曲线,我们可以直观地了解模型的预测能力,以及不同阈值下的预测结果。
原文地址: https://www.cveoy.top/t/topic/omyJ 著作权归作者所有。请勿转载和采集!