员工流失分析:使用逻辑回归

在当今竞争激烈的商业环境中,员工流失已成为企业面临的一个严峻问题。招聘和培训新员工的成本高昂,因此,保持现有员工的稳定性对于企业的竞争优势至关重要。为了实现这一目标,企业需要营造一个愉悦的工作环境,使员工愿意长期留在公司。随着机器学习和数据分析技术的发展,人力资源部门可以利用这些工具来识别需要改进的领域,以减少员工流失。

为什么选择逻辑回归分析员工流失?

员工是否会离开公司,其答案只有“是”或“否”,即二元选择。因此,因变量“员工流失”是一个分类变量。在处理分类变量时,不能使用线性回归,而应使用“逻辑回归”。

方法论

本文将通过五个简单的步骤,使用R软件分析员工流失:

  1. 数据收集
  2. 数据预处理
  3. 将数据分为“训练集”和“测试集”
  4. 使用“训练集”构建模型
  5. 使用“测试集”进行准确性测试

数据探索

数据集由IBM人力资源部门提供,包含1470个观测值和35个变量。其中“员工流失”是因变量。

数据准备

首先,需要检查数据集中是否有缺失值。使用anyNA(JOB_Attrition)检查,结果显示FALSE,即数据集中没有缺失值。接下来,需要将因变量“员工流失”从分类变量转换为数值型变量,将“Yes”赋值为1,“No”赋值为0,并转换为数值型。

JOB_Attrition$Attrition[JOB_Attrition$Attrition=="Yes"]=1 JOB_Attrition$Attrition[JOB_Attrition$Attrition=="No"]=0 JOB_Attrition$Attrition=as.numeric(JOB_Attrition$Attrition)

然后,将所有“字符型”变量转换为“因子”型。有8个字符型变量:商务旅行、部门、教育、教育领域、性别、工作角色、婚姻状况、加班。这些列的编号分别是2、4、6、7、11、15、17、22。

JOB_Attrition[,c(2,4,6,7,11,15,17,22)]=lapply(JOB_Attrition[,c(2,4,6,7,11,15,17,22)],as.factor)

最后,还有一个变量“超过18岁”,所有输入都是“Y”。这是一个字符型变量,将把它转换为数值型,因为它只有一个级别,所以转换为因子型不会得到好的结果。将“Y”赋值为1,并转换为数值型。

JOB_Attrition$Over18[JOB_Attrition$Over18=="Y"]=1 JOB_Attrition$Over18=as.numeric(JOB_Attrition$Over18)

将数据集分为“训练集”和“测试集”

在任何回归分析中,需要将数据集分为两部分:训练集和测试集。使用训练集构建模型,并使用测试集测试模型的准确性。

set.seed(1000) ranuni=sample(x=c("Training","Testing"),size=nrow(JOB_Attrition),replace=T,prob=c(0.7,0.3)) TrainingData=JOB_Attrition[ranuni=="Training",] TestingData=JOB_Attrition[ranuni=="Testing",] nrow(TrainingData) nrow(TestingData)

成功地将整个数据集分为两部分。现在有1025个训练数据和445个测试数据。

构建模型

现在将按照以下简单步骤构建模型:

  1. 确定自变量
  2. 将因变量“员工流失”纳入模型
  3. 将模型的数据类型从“字符型”转换为“公式型”
  4. 将训练数据纳入公式并构建模型
independentvariables=colnames(JOB_Attrition[,2:35]) Model=paste(independentvariables,collapse="+") Model_1=paste("Attrition~",Model) formula=as.formula(Model_1)

接下来,将“训练数据”纳入公式,使用“glm”函数构建逻辑回归模型。

Trainingmodel1=glm(formula=formula,data=TrainingData,family="binomial")

现在,将通过“逐步选择”方法来设计模型,以获取模型中显著的变量。执行代码将给一个输出列表,其中变量根据模型的显著性被添加和移除。每一步的AIC值反映了相应模型的好坏。随着AIC值的降低,模型的拟合度越好。

Trainingmodel1=step(object = Trainingmodel1,direction = "both") summary(Trainingmodel1)

从上述结果可以看到,商务旅行、离家距离、环境满意度、工作参与度、工作满意度、婚姻状况、曾在公司数量、加班、人际关系满意度、总工作年限、在公司工作年限、上次晋升以来的年数、当前角色的工作年限等都是决定员工流失的最重要变量。如果公司主要关注这些领域,那么员工流失的可能性就会降低。

快速可视化这些变量对“员工流失”的影响

在这里使用了Tableau进行这些可视化;它不是很漂亮吗?这个软件让工作变得更容易。

对数据集进行Hoshmer-Lemeshow拟合优度检验

为了判断模型预测概率的准确性,可以对数据集进行Hoshmer-Lemeshow拟合优度检验。假设是:

  1. H0:模型拟合良好。
  2. H1:模型拟合不好。

如果p值大于0.05,将接受H0并拒绝H1。在R中执行此测试,需要安装mkMisc包。

HLgof.test(fit=Trainingmodel1$fitted.values,obs=Trainingmodel1$y)

在这里,可以看到p值大于0.05,因此将接受H0。现在,证明了模型是拟合良好的。

为训练数据生成ROC曲线

另一种分析逻辑回归拟合度的技术是ROC度量(接收者操作特征)。ROC度量包括敏感性、1-特异性、假阳性和假阴性。广泛使用的两个度量是敏感性和特异性。敏感性度量模型的准确性,而特异性度量模型的弱点。

在R中执行此操作,需要安装pROC包。

troc=roc(response=Trainingmodel1$y,predictor = Trainingmodel1$fitted.values,plot=T) troc$auc

曲线下面积:0.8759。解释:这两个度量的图表给出了一个凹形图,显示随着敏感性的增加,1-特异性也在增加,但以递减的速率。C值(AUC)或一致性指数的值给出了ROC曲线下面积的度量。如果c=0.5,则意味着模型不能完美地区分0和1响应。这意味着初始模型不能完美地说出哪些员工将离职,哪些员工将留下。但是,可以看到c值远大于0.5。它是0.8759。模型可以完美地区分0和1。因此,可以成功地得出结论,它是一个拟合良好的模型。

为训练数据集创建分类表

trpred=ifelse(test=Trainingmodel1$fitted.values>0.5,yes = 1,no=0) table(Trainingmodel1$y,trpred)

上述代码表示,如果概率预测值大于0.5,则状态值为1,否则为0。基于这个标准,此代码重新标记“员工流失”的“Yes”和“No”响应。现在,了解预测与数据集中获得的初始信念的匹配百分比是很重要的。在这里,将比较(1-1)和(0-0)对。

有1025个训练数据。预测{(839+78)/1025}*100=89%正确。

与测试数据比较结果

现在,将模型与测试数据进行比较。这很像一个准确性测试。

testpred=predict.glm(object=Trainingmodel1,newdata=TestingData,type = "response") tsroc=roc(response=TestingData$Attrition,predictor = testpred,plot=T) tsroc$auc testpred=ifelse(test=testpred>0.5,yes=1,no=0) table(TestingData$Attrition,testpred)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485