本次旨在与自己对于特征选择提取及机器学习进行一个简单的总结,更可以加深自己对于机器学习的步骤和原理的理解。

首先对于数据来说有两个文件,train.csv 测试集 和test.csv  训练集

import pandas as pdtrain=pd.read_csv('./train.csv',index_col=0)
test=pd.read_csv('./test.csv',index_col=0)

首先第一步,查看一下数据质量,简单对数据进行一下数据探索

print(train.shape)   #简单看一下训练个测试集的行数和字段数量
print(test.shape)   (1176, 35)
(294, 34)

再看一下数据的缺失值情况,对于线性回归来说,如果有缺失值需要进行补全或者删除,否则无法进行建模

print(train.isnull().sum())     #没有缺失值
print(test.isnull().sum() )     #没有缺失值Age                         0
Attrition                   0
BusinessTravel              0
DailyRate                   0
Department                  0
DistanceFromHome            0
Education                   0
EducationField              0
EmployeeCount               0
EmployeeNumber              0
EnvironmentSatisfaction     0
Gender                      0
HourlyRate                  0
JobInvolvement              0
JobLevel                    0
JobRole                     0
JobSatisfaction             0
MaritalStatus               0
MonthlyIncome               0
MonthlyRate                 0
NumCompaniesWorked          0
Over18                      0
OverTime                    0
PercentSalaryHike           0
PerformanceRating           0
RelationshipSatisfaction    0
StandardHours               0
StockOptionLevel            0
TotalWorkingYears           0
TrainingTimesLastYear       0
WorkLifeBalance             0
YearsAtCompany              0
YearsInCurrentRole          0
YearsSinceLastPromotion     0
YearsWithCurrManager        0
dtype: int64
Age                         0
BusinessTravel              0
DailyRate                   0
Department                  0
DistanceFromHome            0
Education                   0
EducationField              0
EmployeeCount               0
EmployeeNumber              0
EnvironmentSatisfaction     0
Gender                      0
HourlyRate                  0
JobInvolvement              0
JobLevel                    0
JobRole                     0
JobSatisfaction             0
MaritalStatus               0
MonthlyIncome               0
MonthlyRate                 0
NumCompaniesWorked          0
Over18                      0
OverTime                    0
PercentSalaryHike           0
PerformanceRating           0
RelationshipSatisfaction    0
StandardHours               0
StockOptionLevel            0
TotalWorkingYears           0
TrainingTimesLastYear       0
WorkLifeBalance             0
YearsAtCompany              0
YearsInCurrentRole          0
YearsSinceLastPromotion     0
YearsWithCurrManager        0
dtype: int64

对数据进行详细描述性探索,主要为了特征选择所准备

#描述性统计
print(train.describe())Age    DailyRate  DistanceFromHome    Education  EmployeeCount  \
count  1176.000000  1176.000000       1176.000000  1176.000000         1176.0
mean     36.805272   802.033163          9.159864     2.918367            1.0
std       9.065549   405.946729          8.137224     1.009809            0.0
min      18.000000   104.000000          1.000000     1.000000            1.0
25%      30.000000   463.500000          2.000000     2.000000            1.0
50%      36.000000   805.500000          7.000000     3.000000            1.0
75%      42.250000  1162.000000         14.000000     4.000000            1.0
max      60.000000  1499.000000         29.000000     5.000000            1.0   EmployeeNumber  EnvironmentSatisfaction   HourlyRate  JobInvolvement  \
count     1176.000000              1176.000000  1176.000000     1176.000000
mean      1026.960034                 2.750850    65.130102        2.724490
std        594.763609                 1.096221    20.294326        0.715027
min          1.000000                 1.000000    30.000000        1.000000
25%        498.750000                 2.000000    48.000000        2.000000
50%       1031.000000                 3.000000    65.000000        3.000000
75%       1555.250000                 4.000000    82.250000        3.000000
max       2068.000000                 4.000000   100.000000        4.000000   JobLevel  JobSatisfaction  MonthlyIncome   MonthlyRate  \
count  1176.000000      1176.000000    1176.000000   1176.000000
mean      2.055272         2.732993    6458.690476  14247.159864
std       1.106040         1.102477    4724.845883   7133.767499
min       1.000000         1.000000    1009.000000   2094.000000
25%       1.000000         2.000000    2858.750000   7912.750000
50%       2.000000         3.000000    4850.500000  14225.500000
75%       3.000000         4.000000    8380.250000  20372.500000
max       5.000000         4.000000   19999.000000  26999.000000   NumCompaniesWorked  PercentSalaryHike  PerformanceRating  \
count         1176.000000        1176.000000        1176.000000
mean             2.703231          15.152211           3.150510
std              2.521301           3.652543           0.357723
min              0.000000          11.000000           3.000000
25%              1.000000          12.000000           3.000000
50%              2.000000          14.000000           3.000000
75%              4.000000          18.000000           3.000000
max              9.000000          25.000000           4.000000   RelationshipSatisfaction  StandardHours  StockOptionLevel  \
count               1176.000000         1176.0       1176.000000
mean                   2.714286           80.0          0.805272
std                    1.080583            0.0          0.865611
min                    1.000000           80.0          0.000000
25%                    2.000000           80.0          0.000000
50%                    3.000000           80.0          1.000000
75%                    4.000000           80.0          1.000000
max                    4.000000           80.0          3.000000   TotalWorkingYears  TrainingTimesLastYear  WorkLifeBalance  \
count        1176.000000            1176.000000      1176.000000
mean           11.161565               2.767007         2.764456
std             7.747576               1.250756         0.713251
min             0.000000               0.000000         1.000000
25%             6.000000               2.000000         2.000000
50%            10.000000               3.000000         3.000000
75%            15.000000               3.000000         3.000000
max            40.000000               6.000000         4.000000   YearsAtCompany  YearsInCurrentRole  YearsSinceLastPromotion  \
count     1176.000000          1176.00000              1176.000000
mean         6.982143             4.19898                 2.160714
std          6.094338             3.63124                 3.208052
min          0.000000             0.00000                 0.000000
25%          3.000000             2.00000                 0.000000
50%          5.000000             3.00000                 1.000000
75%          9.000000             7.00000                 2.250000
max         40.000000            18.00000                15.000000   YearsWithCurrManager
count           1176.000000
mean               4.098639
std                3.564190
min                0.000000
25%                2.000000
50%                3.000000
75%                7.000000
max               17.000000  

其中最重要的std参数,也就是方差,对于一些方差为0的字段,代表数值相同,并不具有建模意义

#先根据方差来看,先去掉方差为0的列,即上一步std = 0,因为方差为0代表数据完全一致,没有利用性,而且还会导致模型训练时间长,可以去掉
#Age的最小值是18,因此列Over18可删;另外员工工号列也可删除,因为在业务逻辑上,员工编号和离职没有必然联系,作为祖国新时代青年,这里不提玄学
train = train.drop(['EmployeeNumber', 'StandardHours','EmployeeCount','YearsInCurrentRole','YearsSinceLastPromotion','EmployeeNumber','Over18'], axis=1)
test = test.drop(['EmployeeNumber', 'StandardHours','EmployeeCount','YearsInCurrentRole','YearsSinceLastPromotion','EmployeeNumber','Over18'], axis=1)

根据方差进行完特征选择,我们还要查看特征之间的相关性,对于相关性特别强的特征,也就是pearson系数>0.8的,我们要保留一个就好

#查看变量相关性
import matplotlib.pyplot as plt
import seaborn as sns
corr = train.corr() # pandas直接调用corr就能计算特征之间的相关系数
sns.heatmap(corr,xticklabels=corr.columns.values, yticklabels=corr.columns.values)
plt.show()

我们看图可得,JobLevel、MothlyIncome、TotalWorkingYears;PercentSalaryHike、PerformanceRating相关性很强,所以我们这里去掉JobLevel、TotalWorkingYears、PerformanceRating特征

#经过查看pearson系数图,如果系数>0.8,说明2个变量有明显线性关系,只保留一个,所以我们这里去掉JobLevel、TotalWorkingYears、PerformanceRating特征
train.drop(['JobLevel','TotalWorkingYears','PerformanceRating'],axis=1,inplace=True)
test.drop(['JobLevel','TotalWorkingYears','PerformanceRating'],axis=1,inplace=True)

到这里,我们的特征提取阶段已经完毕,接下来因为有些特征为非数值类型,而非数值类型是不能够参与运算的,所以我们要将非数值类型特征值通过LabelEncoder转换成数值类型参与计算

from sklearn.preprocessing import LabelEncoder
attr=['Age','BusinessTravel','Department','Education','EducationField','Gender','JobRole','MaritalStatus','OverTime']
lbe_list=[]
for feature in attr:lbe=LabelEncoder()train[feature]=lbe.fit_transform(train[feature])test[feature]=lbe.transform(test[feature])lbe_list.append(lbe)
# 处理Attrition字段
train['Attrition']=train['Attrition'].map(lambda x:1 if x=='Yes' else 0)

转换完成之后,个人很推荐将处理完毕的特征导出来文件,看一下自己有没有考虑不到位的情况,看一下特征处理的情况,感觉是个好习惯。

#将处理过的特征导出查看效果
train.to_csv('train_label_encoder.csv')

最后就是我们的建模训练阶段,这里我们采用线性回归LR模型

#建模  这里使用线性回归
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(train.drop('Attrition',axis=1), train['Attrition'], test_size=0.2, random_state=42)

这里也是本人感觉不是十分完美的情况,一开始我是使用默认的构造函数进行训练,但是报错,居然未收敛,所以我又设置了迭代次数,迭代终止误差范围,虽通过增加迭代次数最终通过了收敛,但是预测效果个人感觉不是很好,希望老师能够给出一点建议,哪里是我考虑不周的地方。谢谢大佬!

lr = LogisticRegression(max_iter=10000, verbose=True, random_state=33,tol=1e-4)
lr.fit(X_train,y_train)
print('lr train score:{:.3f}'.format(lr.score(X_train,y_train)))
print('lr test score:{:.3f}'.format(lr.score(X_test,y_test)))    [Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
lr train score:0.869
lr test score:0.818
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.7s finished

最终为了可解释性,我们选出前5个系数最高的5个特征,查看一下影响离职率最高的因素

#这里查看系数最大的前5个变量,可得影响离职率的最大因素是:加班、婚姻状况、出差、职位及所属部门
import numpy as np
df_coef = pd.DataFrame(index=X_train.columns,data=np.transpose(logreg.coef_))
df_coef['abs'] = df_coef.iloc[:,0].abs()
df_coef = df_coef.sort_values(by='abs', ascending=False)
print(df_coef.head())0       abs
OverTime        1.087580  1.087580
MaritalStatus   0.615751  0.615751
JobInvolvement -0.390932  0.390932
Department      0.338802  0.338802
Gender          0.311672  0.311672

基于线性回归的员工离职率预测相关推荐

  1. 员工离职率预测,练手赛

    文章目录 1.数据探索 1.1 各特征总量及百分比 1.2 heatmap 2.特征选择&处理 2.1 特征分类 2.2 连续特征选择 2.3 分类特征选择 2.4 异常值处理 2.5 连续特 ...

  2. Logisitc Regression 预测员工离职率

    Logistic Regression 基础 Logistic Regression 沿用了 Linear Regression 的思路和想法,通过使用线性关系拟合得到真实的函数关系.同样的,如果模型 ...

  3. 团队管理(3)---有效降低企业员工离职率

    有效降低企业员工离职率 招人难!居高不下的员工离职率,更使企业招聘难上加难!近年来,楚柳香小编很多HR朋友都在抱怨公司员工离职率过高的问题.过高的员工流失率,使许多企业都处在招聘--流失--再招聘-- ...

  4. 为什么现在90后员工离职率那么高?

    近几年职场上普遍存在一个奇怪的现象,90后的员工离职率特别高,95后就更不用说了,几乎可以用"一言不合就离职"来形容.那究竟是为什么现在90后的员工离职率那么高呢? 回想我们父母那 ...

  5. 博士员工离职率21.8%,任正非反思:华为这么大,英雄为何无用武之地?

    ** 2019程序员转型学什么? https://edu.csdn.net/topic/ai30?utm_source=csdn_bw ** 导读:这份文件中的数据显示,近公司博士类员工近5年累计平均 ...

  6. 华为给博士毕业生开出天价年薪!为何博士级员工离职率依旧高达21.8%

    昨日(7月23日),网络盛传一张华为总裁办电子邮件的截图.截图显示,华为已制定2019届顶尖学生年薪制方案:8位2019届应届博士生年薪89.6万起,其中最高的达到了201万. 华为:从全世界招募天才 ...

  7. 【Kesci】【正式赛】2019中国高校计算机大赛——大数据挑战赛(基于FastText的新闻点击率预测qauc=0.558)

    比赛连接 https://www.kesci.com/home/competition/5cc51043f71088002c5b8840 正式赛题--文本点击率预估(5月26日开赛) 搜索中一个重要的 ...

  8. 如何利用大数据分析技术预测员工离职?

    为什么我们要对员工离职进行预测,因为它会帮助公司减少员工离职成本的消耗. 本文为美国肯尼索州立大学刘丽媛(Lilian)在HR成长部落2019年6月23日的线下活动分享文字实录,希望对大家在数据分析在 ...

  9. 远程办公中的IT女性:工作量增加3倍,离职率却下降近50%

    提到IT行业,大家脑海中浮现的肯定是男性扎堆的场面.但有一个国家,从事IT行业的女性却不在少数,这个国家就是印度. 在印度,IT/ITES(信息技术支持服务)部门雇佣了近500万人,其中四分之一是女性 ...

  10. 秒辞的95后vs不敢辞的中年人,数据分析告诉你员工离职的真正原因!

    [编者按]失业潮随经济寒冬席卷而至,与战战兢兢的中年人害怕失去工作不同,#95后秒辞#居然上了微博热搜成了热门话题.据<中国青年报>援引研究报告报道,受调查的95后年轻人平均7个月就会辞职 ...

最新文章

  1. Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法...
  2. js如何运行python代码_python中执行javascript代码
  3. 缓存穿透与击穿问题解决方案
  4. Linux中find常见用法示例
  5. 定时器工作原理及初值快速计算
  6. 计算机硬件系统的运行速度,电脑运行速度不给力 需要更换哪些硬件?
  7. 如何让SAP Spartacus ng build生成的JavaScript资源附带上store ID
  8. python程序怎么给别人运行_如何使Python脚本作为服务运行?
  9. php 公钥格式转换,如何把OpenSSH公钥转换成OpenSSL格式
  10. python获取月份字符串_python - python从字符串获取日期 - 堆栈内存溢出
  11. Ant适用的省市区联动数据
  12. 基础软件照搬开源不可取,自力更生才是正途
  13. 面试,这些问题一定要问清楚!
  14. 神、上帝以及老天爷(递推公式)
  15. kubernetes组件_Service_普通Service和无头Service
  16. 白话数字签名(3)—Web程序中的数字签名
  17. 计算机毕业设计ssm基于客户时间窗变化的物流配送管理系统设计ro75j系统+程序+源码+lw+远程部署
  18. ubuntu下ftp的设置及登录
  19. ros打开笔记本摄像头,单目标定
  20. web前端新手面试指南:自我介绍

热门文章

  1. Ubuntu中如何安装安装QQ
  2. STM32CubeMX创建F429/L475 HAL库工程并移植UCOSIII (二)(文末附源码)
  3. 章文嵩-构建云计算平台的实践
  4. 第三届“传智杯”全国大学生IT技能大赛(初赛B组)题解
  5. Python | 基于basemap绘图的路径示意图
  6. 基于word2vec的QA demo
  7. [02-27][08奥斯卡四项大奖][老无所依][DVD中英双字][已测][17:21]
  8. Finclip小程序宿主环境与微信小程序宿主环境
  9. 谷歌play商店_不断关闭时如何修复Google Play商店
  10. php7.4 ffi,PHP7.4 全新扩展方式 FFI 详解