欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python sns绘制回归线_Python数分实战:员工流失情况预测

发布时间:2025/3/12 python 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python sns绘制回归线_Python数分实战:员工流失情况预测 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

在很久之前,我有写一个Excel数据分析的实战项目,不晓得大家还记不记得,感兴趣的童鞋可以回看:

A九姑娘:Excel数分实战:员工流失率分析​zhuanlan.zhihu.com

本次的项目数据依旧是这个,但是我们这次不再是对流失率分析,此次是利用Python知识对某公司的员工流失进行预测。

本次实战涉及Python的数据可视化、和数据建模及模型评估。

干货内容:

  • 数据可视化:运用matplotlib和seaborn,绘制柱状图、直方图、箱线图、折线图、饼图,以及运用子图;
  • 数据建模及模型评估:数据清洗、特征选择、特征处理、特征降维(PCA降维)、建模(分类:KNN、朴素贝叶斯、随机森林、Adaboost;回归:线性回归、岭回归、Lasso、逻辑回归)、以及各个模型的评估(准确率、召回率、F值)

感兴趣的童鞋可以接着看咯~


目录

  • 提出问题
  • 数据理解
  • 数据清洗
  • 数据可视化
  • 特征选择
  • 特征处理
  • 特征降维
  • 构建模型、模型评估

导入数据,我们先看一下整体情况:

df

这里,我们先导入了很多库,有数据分析的numpy、pandas;数据可视化的matplotlib和seaborn;以及数据预处理(归一化、标准化、数值化、正规化、LDA降维)需要的包,接下来会一一介绍。

提出问题

根据公司离职员工特征,预测流失情况。

数据理解

前次的项目A九姑娘:Excel数分实战:员工流失率分析中我们已经对数据集进行理解,本次不再赘述。

数据清洗

本次抽样为全抽,不再进行选择子集;不涉及列重命名;不涉及数据类型转换;不涉及数据排序。

本次只涉及缺失值处理和异常值处理:

df

数据可视化

  • 我们需要看一下员工不同阶薪酬的人数分布情况:
plt

这里,我们使用的柱状图。

plt.bar就是使用matplotlib绘制直方图;那其他图我们按照这个思路就可以进行绘制了,以下列式不同图例如何绘制:

代码中的plt.title、 plt.xlabel、plt.ylabel、plt.xticks等是图表绘制中的基本元素,见下:

plt

接下来,我们又运用了seaborn,设置了主题为‘darkgrid’,字体和颜色主题。其实我们也可以利用seaborn绘制直方图:

sns

我们来看一下,seaborn的效果:

sns

seaborn的绘制效果更为美观。

  • 不同薪酬段各个部门人数的分布情况:
sns

  • 比较平均满意度、最后一次满意度和月平均工时的分布情况:

如果我们要把这三个图例一同比较,我们可以使用子图:

f

图太小了,看不清,我们运用figsize调整一下图的大小:

f

  • 异常值分析的过程中,我们可以使用箱线图,观测数据整体的分布情况:
sns

在sns.boxplot的参数中,saturation表示上边界,默认0.75(四分位数),whis表示k默认1.5;我们调整k在看一下:

sns

看到出来,异常值变了。

  • 随着司龄变化,离职人数的变化情况,我们使用折线图:
sub_df

我们发现:工作时间5年的时候离职率最高,五年左右离职率比较高;随着时间越来越久,离职率就比较低,时间短离职率也不高;

  • 使用饼图观测各个部门的人数结构:
df

我们想要把销售部门sales着重突出:

explodes

以上,我们使用了柱状图、直方图、饼图、折线图、箱型图对数据集进行了简单的理解;不再赘述,如果感兴趣,可以看文章开头推荐的另一篇,有对数据进行理解。

接下来,也是本文重点。

特征选择

我们在数据清理结束后,得到标注‘left’:

label

接下来,对数据集进行相关性分析:

df

可以用热力图来更加直观的观察:

sns

以上是皮尔逊相关系数,蓝色正相关,红色负相关。last_evaluation不属于特征值,又因它和number_project和 average_monthly_hours正相关,此三个不属于特征值可去掉;因为特征不多,项目中我们可以暂时保留。

我们先去除我们的标注left:

df

注意:axis = 1,表示列;axis = 0 表示行。

特征处理

特征变换的方法有:对指化(对数化、指数化)、离散化(等频分箱、等距分箱)、归一化、标准化、数值化、正规化。

我们对特征进行以下处理:

satisfacation_level 介于[0,1],可以不处理;或者 ,可采用MinMaxScaler归一化强行拉伸;或者标准化StandardScaler均值为0,方差为1
last_evaluation同上
number_project不大于10,也可同上
time_spend_company 与 number_project相似,同上
Work_accident promotion_last_5years 同上sl

此处注意:

sl为True

我们对数值类特征此处均使用标准化。

department 和salary 都是离散值,需要数值化,考虑Label Encoder和OneHot Encoder(标签化、和独热编码)dpt

此处注意:

department

此处我们均使用了标签化LabelEncoding,然后进行归一化处理。

我们看一下结果:

特征降维

常用特征降维方式,有主成分分析PCA降维、LDA降维、奇异值分解SVD。此处我们使用用PCA降维,因为LDA降维后是1维。

features

构建模型及评估

我们对数据集进行拆分,训练集60%,测试集20%,验证集20%:

from

接下来就是建模了。

1)分类-KNN

先以KNN为例:

先说一下KNN的算法思想:一个数据集都会有他的标注,如果说找到了一个点,有K个邻居中一种标注大于另外一种标注,那我们就说这个点更倾向于与多数点是一致的,这个K可以由我们来定:

那 这个点到他邻居的距离是什么?我们可以理解,把属性转化为数值后,每个属性都是一个维度,每个对象,都是一个空间中的坐标;对象和对象之间就会有距离。有以下几种:

  • 欧式距离:理解为两个点的直线距离
  • 曼哈顿距离:理解为各个维度的长度相加
  • 闵可夫斯基距离:闵可夫斯基有一个参数p,可以取任一志,p取1时候,就是欧氏距离,p取2时候,就是曼哈顿距离;p可以无穷大。

接下来,直接上代码:

from

我们衡量指标使用的准确率ACC、召回率REC和F值。

看一看到,验证集验证结果的准确率0.96、召回率0.91、F值0.92;

我们调整K,看一下如果只要3个邻居的话,结果又如何:

看的出来,n_neighbore=3时,泛化能力更好;

根据验证集进行对预测值验证后,我们还想根据测试集、训练集同样进行验证,我们可以建立一个函数来完成,进而比较:

knn_clf

0为训练集;1为验证集;2为测试集。

整体来看,泛化能力还是不错的;但是,对于测试集略还是略低于训练集;存在微小的过拟合现象。

如果我们在特征预处理的时候,对数据进行的是归一化,并不是这次的标准化,我们也可以去实验一下看一下结果;同样,可以对department和salary进行one-hot编码,多次尝试;寻找最合适的模型,大家可以自己练习一下。

2)分类-朴素贝叶斯

基本算法思想:

  • 假设特征间是相互独立的;
  • 各种特征在X条件下的概率也是已知的;
  • 条件X的分布概率也是已知的;
  • 给定特征,判断是X的哪个值。

常用的朴素贝叶斯算法有:高斯贝叶斯和伯努利朴素贝叶斯:

  • 朴素贝叶斯用到的特征必须是离散的;如果这些离散值都是二值(0,1),使用伯努利贝叶斯会更好;如果值是连续的,在伯努利朴素贝叶斯下,也会把 他们二值化;
  • 高斯贝叶斯,是假设特征都是高斯分布的;二者都对特征有比较严格的要求;同时,他们在离散属性的情况下会有更好的表现;连续属性不一定会非常好
from

我们先导入数据库包~

接下来,为了方便,我们先建立一个model,存放我们的各个模型,然后统一运行比较:

models

然后呢,我们把按照刚才的for循环思路,稍作修改:

for

运行,我们看一下结果:

看的出来,朴素贝叶斯在此次的特征大部分非离散的情况下,泛化结果较差。

3)分类-决策树

决策树,是模仿人类做决策的过程,一步步的做出决策。

from

我们按照刚才的思路,在models中增加决策树:

models

运行for循环,看一下结果,我们这里只看决策树部分的吧:

很明显,决策树的泛化效果更佳。

4)分类-支持向量机SVM

算法思想:扩维,把一组特征变为线性可分;所以,可以先在低维空间进行计算,利用核函数扩维。

from

我们可以用参数C来控制SVM的精度,C越大,SVM准确率越高。这里我们先试试C = 1:

我们可以尝试把C调整到10000:

看得到,泛化效果有了明显提升。

5)分类-随机森林

随机森林是一种集成方法。

集成方法是什么?

同一个问题,我们可以用不同的分类器来判别,针对某一条数据不同的分类器结果会有不同,如果充分考虑分类器判对或者盘错的可能,就很有可能发现进一步提升分类质量的方法;机器学习问题中,将很多机器学习算法组合在一起,得到可能会比单一算法的结果更好的性能结果;这样的思路就是集成学习的方法。

集成方法分为袋装法和提升法:

  • 袋装法:对训练集用不同的模型判断后,对不同模型投票(均值),比如随机森林;
  • 提升法:模型串联起来,加权叠加,比如Adaboost;

随机森林,有N个决策树,但是我们需要注意树的个数,过多容易造成过拟合。

from

我们运行for循环,看一下结果:

训练家的准确率达到0.996,召回率达到0.986,F值同样也是0.99;相对验证集和测试集基本差不多。整体来看,泛化能力较好。

6)分类-Adaboost

from

运行for循环,看一下结果:

7)回归-线性回归

在上文,我们可以知道,last_evaluation number_project average_monthly_hours 相关性比较大,我们对这三列进行分析:

from

我们看一运行结果:

8)回归-岭回归

from

9)回归-Lasso

from

我们可以通过控制岭回归和Lasso回归的参数来控制拟合效果。

10)回归-逻辑回归

我们在之前的文章Python数分:回归分析中对逻辑回归和线性回归,进行详细的介绍,感兴趣的童鞋可以回看哈~本次就直接上代码了:

from

运行for循环:

泛化效果较差。


以上,我们构建10种模型,并对各个模型果进行评估。此次分享先到这里~

感谢观看。

总结

以上是生活随笔为你收集整理的python sns绘制回归线_Python数分实战:员工流失情况预测的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。