2024年4月24日发(作者:)
Power BI
强强联合
Python
机器学习能力做
What if
分析
传统
BI
报表分析通常建立在既成事实的业务数据上,我们如何结合
Python
的机器学习预测能力在
Power BI
中做
what if
分析,本篇以预测公司员工离职率为例说明
Power BI
如何结合
Python
机器学习做
what if
分析。分析训练数
据来源于
kaggle Attrition
数据源,该数据源包含两个
csv
文件,
用来训练预测员工离职率的机器学习模
型,
则是我们本次预测分析的对象。
员工离职率
what if
分析
1.
在
Power BI
中导入
数据源。该数据源大致长什么样大家可看下图,
和
包含的员工信息相
同,即依靠员工的年龄,性别,教育程度,家离公司的距离,是否经常出差,是否经常加班,职位,月薪,婚否
等等信息来预测员工离职的概率。
2.
在
Power BI
中创建用于
what if
分析的参数,简便起见这里只创建两个
what if
分析参数,即员工是否经常加班参数
和员工薪资调节参数,
把参数作为切片器放到报表界面上,方便报表用户调节参数值做
what if
分析。
3.
对应新建的两个参数分别新建两个度量值,根据用户在界面上修改
overtime
参数和
salary
调节比例参数这两个度
量值分别返回员工是否经常加班以及根据参数调整后的员工月薪。
这里有个小坑就是
overtime
由于不是数值,一开始这里本打算新建列而不是新建度量值,结果
overtime
参数在新建
列中不起作用,即调节参数不会影响到
overtime
列的返回值,所以后面只能新建为度量。
4.
往
Power BI
报表界面上添加
Py
视觉对象。
由于各自程序上下文环境不同,大致调用的
Python
代码看下面,还请各位根据自己环境做相应调整。
#
在此处粘贴或键入脚本代码
:
import numpy as np
import pandas as pd
from cessing import LabelEncoder
import as plt
import pickle
import seaborn as sns
#
数据加载
#dataset
即为
Power BI
传递给
Python
代码的数据对象,数据会根据
what if
分析参数变化而变化
test_data = dataset
#
特征选择
features=['Age','BusinessTravel','DailyRate','Department','DistanceFromHome','Education','EducationField','Emplo
yeeNumber','EnvironmentSatisfaction','Gender','HourlyRate','JobInvolvement','JobLevel','JobRole','JobSatisfactio
n','MaritalStatus','MonthlyIncome','MonthlyRate','NumCompaniesWorked','OverTime','PercentSalaryHike','Performanc
eRating','RelationshipSatisfaction','StockOptionLevel','TotalWorkingYears','TrainingTimesLastYear','WorkLifeBala
nce','YearsAtCompany','YearsInCurrentRole','YearsSinceLastPromotion','YearsWithCurrManager']
test_features=test_data[features]
#
对离散型特征做
LabelEncoder
attr=['Age','BusinessTravel','Department','Education','EducationField','Gender','JobRole','MaritalStatus','OverT
ime']
lbe_list=[]
for feature in attr:
lbe=LabelEncoder()
test_features[feature]=_transform(test_features[feature])
lbe_(lbe)
result=test_data
#
用
Pickle
导入事先训练好的预测模型
xgb_bst1 = (open("c:/model/", "rb"))
#
开始预测
predict = xgb_t_proba(test_features)
#
预测离职概率
>=0.5
则认定该员工要离职
result['Attrition'] = (predict[:,1]).map(lambda x:'YES' if x>=0.5 else 'NO')
#
分两块区域显示两个
barchart
fig, axs = ts(1, 2, figsize=(25,5),squeeze=False)
#
显示
Total Attrition barchart
g=t(x=result['Attrition'].value_counts().index,y=result['Attrition'].value_counts(),ax = axs[0][1])
axs[0][1].set_title('Total Attrition',size=20)
#
在柱子上显示要离职的人数和不离职的人数
j=0
for i, v in result['Attrition'].value_counts().iteritems():
(j,20,v,color="black",ha="center",size=20)
j=j+1
#
按
department
显示各个部门的员工离职率
temp=y(['Department'])['Attrition'].value_counts().unstack().reset_index()
temp['Attrition Rate']=temp['YES']/(temp['YES']+temp['NO'])
h=t(x='Attrition Rate', y='Department',data=temp,ax = axs[0][0])
axs[0][0].set_title('Attrition rate by Department',size=20)
#
在柱子上显示离职率
j=0
for i, v in temp['Attrition Rate'].iteritems():
(0.05,j,round(v,2),color="black",ha="center",size=20)
j=j+1
_params(labelsize=20)
()
5.
我们来看看成果吧
公司目前一共有
294
名员工,有
44
名员工表示出了有离职的倾向,即如代码注释中所说我们设定预测出的离职概率
>=0.5
则
认为该员工有离职倾向。销售部门预测出的离职率是最高的,为
16%
。
然后我们把
overtime
参数调整为
0
,即如果减少加班,看看预测出的离职率是否会下降。可以看到有离职倾向的人数下降到
了
25
人,销售部门的离职率也下降至
11%
如果再涨薪
50%
,预测出的离职人数进一步下降至
18
人。
如果没有机器学习,我们的报表往往只专注于用公式计算出的各类
KPI,
有了机器学习帮我们的报表有了更深层次的洞见。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1713896218a2340074.html
评论列表(0条)