员工一言不合就离职怎么办?我用Python写了个员工流失预测模型

获取本期详细数据和代码

员工一言不合就离职怎么办?我用Python写了个员工流失预测模型

文章插图
02
读入数据
# 导入包import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from pyecharts.charts import Bar, Pie, Pagefrom pyecharts import options as opts from pyecharts.globals import SymbolType, WarningTypeWarningType.ShowWarning = False
【员工一言不合就离职怎么办?我用Python写了个员工流失预测模型】plt.rcParams['font.sans-serif'] = ['SimHei']# 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False# 用来正常显示负号
03
探索性分析
描述性统计
df.describe().T
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型

文章插图
从上述描述性分析结果可以看出:
离职人数占比
整理数据后发现,总共有14999人,其中红色部分代表离职人群,用数字1表示,蓝色为未离职人群,用数字0表示 。离职人数为3571,占总人数的23.8% 。
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型

文章插图
员工满意度
从直方图可以看出,离职员工的满意度评分明显偏低,平均值为0.44 。满意度低于0.126分的离职率为97.2% 。可见提升员工满意度可以有效防止人员流失 。
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型

文章插图
df.groupby('left')['satisfaction_level'].describe()
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型

文章插图
def draw_numeric_graph(x_series, y_series, title):# 产生数据sat_cut = pd.cut(x_series, bins=25) cross_table = round(pd.crosstab(sat_cut, y_series, normalize='index'),4)*100x_data = http://www.kingceram.com/post/cross_table.index.astype('str').tolist()y_data1 = cross_table[cross_table.columns[1]].values.tolist()y_data2 = cross_table[cross_table.columns[0]].values.tolist() # 条形图bar = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))bar.add_xaxis(x_data)bar.add_yaxis(str(cross_table.columns[1]), y_data1, stack='stack1', category_gap='0%')bar.add_yaxis(str(cross_table.columns[0]), y_data2, stack='stack1', category_gap='0%')bar.set_global_opts(title_opts=opts.TitleOpts(title), xaxis_opts=opts.AxisOpts(name=x_series.name, name_location='middle', name_gap=30),yaxis_opts=opts.AxisOpts(name='百分比', name_location='middle', name_gap=30, min_=0, max_=100),legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_right='2%'))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False), itemstyle_opts=opts.ItemStyleOpts(border_color='black', border_width=0.3))bar.set_colors(['#BF4C51', '#8CB9D0']) return bar
bar1 = draw_numeric_graph(df['satisfaction_level'], df['left'], title='满意度评分与是否离职')bar1.render()
平均每月工作时长
从直方图可以看出,月工作时长正常的员工离职率最低 。而工时过低、过高的员工离职人数最多 。证明恰当的工作任务分配是非常重要的 。
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型

文章插图
员工工龄
可以看到7年及以上工龄的员工基本没有离职,只有工龄为5年的员工离职人数超过在职人数 。可见工龄长于6年的员工,由于种种原因,其“忠诚度”较高 。
而员工进入公司工作的第5年是一个较为“危险”的年份,也许是该企业的“5年之痒”,应当重点关注该阶段的员工满意度、职业晋升等情况,以顺利过渡 。