Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >员工流动分析和预测

员工流动分析和预测

作者头像
陆勤_数据人网
发布于 2020-11-03 06:57:30
发布于 2020-11-03 06:57:30
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

△ 是新朋友吗?记得先点数据科学与人工智能关注我哦~

《数据科学案例》专栏·第1篇

| 陆勤

6698 字 | 15 分钟阅读

公司员工,是一家公司成长和发展的关键要素之一。留不住优秀的员工,也就难以打造出卓越的公司。很多公司,比方说,惠普公司,IBM公司等,已经采用数据科学的手段,对内部员工的流动做分析和预测,并且进行提前的干预,以最小化员工流动所带来的的影响。

本文是关于员工流动分析和预测的案例,通过阅读,可以得到:

  1. 需要解决什么问题?
  2. 描述员工流动的特征或者标签有哪些?
  3. 对于采集的数据集如何做准备工作?
  4. 如何对整理好的数据做分析和建模?
  5. 模型的效果如何评估?
  6. 模型的结果如何应用?

一、业务理解,

要解决什么问题?

根据公司员工的数据,分析和挖掘潜在流动的员工白名单,输出给人力资源部门,指导他们进行提前干预和挽留,以减少公司人员流动所带来的的损失和影响。

二、数据理解,

数据的画像问题?

本案例的数据集来自Kaggle平台提供一份公司人员流动数据。这份数据集包括18列,用于记录公司员工的相关信息。目标变量是status记录了两种状态,取值是ACTIVE和TERMINATED。其它列可以从后面代码里面了解。

1、导入Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import random

import time as time
from datetime import timedelta

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn import model_selection

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import Normalizer

from sklearn.pipeline import Pipeline

from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier

from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score

from sklearn.exceptions import DataConversionWarning
import warnings

def disable_DataConversionWarning():
    warnings.filterwarnings(action='ignore', category=DataConversionWarning)
    
def disable_FutureWarning():
    warnings.filterwarnings(action='ignore', category=FutureWarning)

def enable_All_Warning():
    warnings.simplefilter('always')
    
get_ipython().run_line_magic('matplotlib', 'inline')

2、导入数据集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
file = './datasets/MFG10YearTerminationData.csv'

data = pd.read_csv(filepath_or_buffer=file, header=0, sep=',')
print('数据检视:输出数据集前5行...')
data.head(5)

3、元数据理解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('样本数:', data.shape[0])
print('变量数:', data.shape[1])
print('变量的数据类型:')
print(data.dtypes)

4、数值型变量描述性统计分析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('数值类型变量的描述性统计分析:')
data.describe().T

三、数据准备,

数据如何整理好?

这份数据集有很多变量的取值是文本信息,为了能够使用它做分析和建模。我们需要做编码处理。这里采用了一种简单的处理策略,即基于领域知识把一些类别变量进行标签编码。同时,删除ID列,对目标变量列也进行编码处理。对整理好的数据集,进行可视化分析,以加深对数据进一步认知和理解。

5、类别变量的标签编码

第一步:把所需的对象变量强制转换为类别变量;第二步:对类别变量进行标签编码映射,从而转换为数值变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 第一步:对象转换为类别变量
data["city_name"] = data["city_name"].astype('category')
data["department_name"] = data["department_name"].astype('category')
data["job_title"] = data["job_title"].astype('category')
data["gender_short"] = data["gender_short"].astype('category')
data["termreason_desc"] = data["termreason_desc"].astype('category')
data["termtype_desc"] = data["termtype_desc"].astype('category')
data["BUSINESS_UNIT"] = data["BUSINESS_UNIT"].astype('category')

# 第二步:类别变量做标签编码
data["city_name_NUMERIC"] = data["city_name"].cat.codes
data["department_name_NUMERIC"] = data["department_name"].cat.codes
data["job_title_NUMERIC_NUMERIC"] = data["job_title"].cat.codes
data["gender_short_NUMERIC"] = data["gender_short"].cat.codes
data["termreason_desc_NUMERIC"] = data["termreason_desc"].cat.codes
data["termtype_desc_NUMERIC"] = data["termtype_desc"].cat.codes
data["BUSINESS_UNIT_NUMERIC"] = data["BUSINESS_UNIT"].cat.codes

6、移除ID列和目标变量编码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 移除ID列
data = data.drop(columns=['EmployeeID'])
# 目标变量类型转换
data['ClasseNumerica'] = np.where(data['STATUS']=='ACTIVE', 1, 0)
data.tail(15)

7、目标变量分布情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('-> 目标变量类别的分布情况:')
QtdObservacoes = data.shape[0]
QtdValClasse = data['STATUS'].unique().size
count = 0

print('样本数:', QtdObservacoes)

while count < QtdValClasse:
    print(data['STATUS'].unique()[count], ':', (data.groupby('STATUS').size())[count], '(', (((data.groupby('STATUS').size())[count]/ (QtdObservacoes)) * 100), '% )')
    count = count + 1

8、数据可视化分析

1)单变量分析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data.hist(sharex=False, sharey=False, figsize=(20,12), grid=True)
plt.show()

2)数值型变量相关系数矩阵可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 相关系数矩阵
ColunaNumericas = (data._get_numeric_data()).columns.tolist() #获取数值型变量集
QtdTotalElementos = len(ColunaNumericas)

values_corr = data.corr() #生成相关性系数矩阵

# 相关性系数矩阵可视化
fig = plt.figure() # 构建图表
ax = fig.add_subplot(1,1,1) 
correlation_matrix = ax.matshow(values_corr
                                ,vmin = -1
                                ,vmax = 1
                                ,interpolation = 'none'
                                ,cmap = 'hot_r' #'hot_r', 'pink_r', 'spring', 'spring_r'
                                ,aspect='auto'
                                #,alpha = 0.75
                                ,origin = 'upper'
                               ) #matshow -> 把数组或者矩阵绘制为图形

fig.colorbar(correlation_matrix) 

ticks = np.arange(0, QtdTotalElementos, 1) 
ax.set_xticks(ticks)
ax.set_yticks(ticks)

ax.set_xticklabels(labels=ColunaNumericas, rotation=85, fontsize=12)
ax.set_yticklabels(labels=ColunaNumericas, fontsize=12)
plt.show()

3)观察一些预测预测变量和目标变量的关系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 可视化一些预测变量和目标变量的关系
ColunaNumericas = ['STATUS_YEAR', 'age', 'length_of_service', 'store_name', 'city_name_NUMERIC']
dataframe = data[ColunaNumericas]

dataframe = dataframe.assign(Classe=data['STATUS']) # 往数据框中添加新列

sns.pairplot(data=dataframe, hue="Classe", kind='scatter', palette="cubehelix")

9、类别不平衡问题的处理

通过类别变量取值分布,发现有类别不平衡问题。处理策略,采用一种欠抽样的方法。具体操作:目标变量为离职的所有数据集+在职数据集随机抽取5000条记录以构成训练集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ColunaNumericas = (data._get_numeric_data()).columns.tolist()
QtColunasNumericas = len(ColunaNumericas)

df_ALL_TERMINATED = data[data['ClasseNumerica'] == 0]
df_ALL_ACTIVE = data[data['ClasseNumerica'] == 1]

df_ALL_TERMINATED = (df_ALL_TERMINATED[ColunaNumericas])
df_ALL_ACTIVE = (df_ALL_ACTIVE[ColunaNumericas])

preditoras_ALL_TERMINATED = df_ALL_TERMINATED.values[:,:-1]
preditoras_ALL_ACTIVE = df_ALL_ACTIVE.values[:,:-1]

alvo_ALL_TERMINATED = df_ALL_TERMINATED.values[:,-1:QtColunasNumericas]
alvo_ALL_ACTIVE = df_ALL_ACTIVE.values[:,-1:QtColunasNumericas]

四、模型构建和评价,

如何创建最佳模型?

对于整理好的数据集,首先把数据集划分为训练集和测试集,然后利用交叉验证的思想选择最佳模型,第三,使用最佳模型对训练集做模型构建,第四,利用测试集对模型的性能做评价。

10、训练集和测试集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
random.seed(1)
# 训练集
preditoras_5000_INSTANCES_ACTIVE = np.array( random.sample(population = list(preditoras_ALL_ACTIVE), k = 5000))
preditoras_treino = np.concatenate([preditoras_ALL_TERMINATED, preditoras_5000_INSTANCES_ACTIVE])

# 测试集
preditoras_1000_INSTANCES_TERMINATED = np.array( random.sample(population = list(preditoras_ALL_TERMINATED), k = 1000) )
preditoras_40000_INSTANCES_ACTIVE = np.array( random.sample(population = list(preditoras_ALL_ACTIVE), k = 40000) )

preditoras_teste = np.concatenate([preditoras_1000_INSTANCES_TERMINATED, preditoras_40000_INSTANCES_ACTIVE])

# 训练集目标变量

alvo_treino_5000_INSTANCES_ACTIVE = np.array( random.sample(population = list(alvo_ALL_ACTIVE), k = 5000) )
alvo_treino = np.concatenate([alvo_ALL_TERMINATED, alvo_treino_5000_INSTANCES_ACTIVE])

# 测试集目标变量

alvo_1000_INSTANCES_TERMINATED = np.array( random.sample(population = list(alvo_ALL_TERMINATED), k = 1000) )
alvo_40000_INSTANCES_ACTIVE = np.array( random.sample(population = list(alvo_ALL_ACTIVE), k = 40000) )

alvo_teste = np.concatenate([alvo_1000_INSTANCES_TERMINATED, alvo_40000_INSTANCES_ACTIVE])

11、交叉验证做模型的选择

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 交叉验证--模型的选择
# 显示模型的性能分析

disable_DataConversionWarning()
disable_FutureWarning()


# 根据每种算法创建机器学习模型
# 使用accuracy指标做度量,值越大,模型性能越好

modelos = []
modelos.append(('LogisticRegression', LogisticRegression()))
modelos.append(('KNeighborsClassifier', KNeighborsClassifier()))
modelos.append(('DecisionTreeClassifier', DecisionTreeClassifier()))

resultados = []
nomes = []

modelos_nome = [] 
mensagens = [] 
tempo = []

n_folds = 10

seed = 7

for nome, modelo in modelos:
    # 设置处理开始的时间
    start_time = time.time()

    # 创建交叉验证 10折交叉验证
    k_folds = model_selection.KFold(n_splits = n_folds, random_state = seed)

    # 创建模型
    result_saida = model_selection.cross_val_score(modelo 
                                                    ,preditoras_treino 
                                                    ,alvo_treino 
                                                    ,cv = k_folds 
                                                    #,n_jobs = -1 
                                                    ,scoring = 'accuracy'
                                                    #,verbose = 5 
                                                    )

    #记录模型名称
    modelos_nome.append(nome)
    #记录模型结果
    resultados.append(result_saida * 100)
    #输出最终消息
    mensagens.append('模型: %s      \n\n性能平均值: %.2f%%\n性能标准差: %.2f%%' % (modelo, (result_saida.mean()*100), (result_saida.std()*100)))

    # 执行模型所需要的时间
    tempo.append(time.time() - start_time)

qtd_mensagens = len(mensagens)
iterador = 0

print('---> 准确性描述评估 <---')
while qtd_mensagens > iterador:
    print('--------------------------------------------------------------------', '\n')
    print(mensagens[iterador])
    print('运行的时间: %s (HH:MM:SS)' % timedelta(seconds=round(tempo[iterador])))
    iterador = iterador + 1
print('--------------------------------------------------------------------')

# 模型准确性可视化比较
fig = plt.figure()
fig.suptitle('分类算法性能比较')
ax = fig.add_subplot(111)
plt.boxplot(resultados)
ax.set_xticklabels(modelos_nome)
plt.show()

enable_All_Warning()

12、最佳模型对训练集重构模型

通过交叉验证,发现决策树模型是最佳模型。我们使用决策树模型对训练数集重构模型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基于模型选择里面最佳模型 决策树模型 构建预测模型

# 警告处理
disable_DataConversionWarning()
disable_FutureWarning()

# 创建管道
pipeline = []
pipeline.append(('Standardize', StandardScaler()))
pipeline.append(('ScaleFit', MinMaxScaler()))
pipeline.append(('Normalizer', Normalizer()))


pipeline.append(('DecisionTreeClassifier', DecisionTreeClassifier()))

pipeline = Pipeline(steps=pipeline)
model = pipeline.fit(preditoras_treino, alvo_treino)

13、模型的性能分析

对构建好的模型,在测试集进行模型的性能分析。可以通过模型准确率,模型混淆矩阵或者模型性能分析报告,了解所构建模型的性能状况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
previsoes = model.predict(preditoras_teste)

# 模型在测试数据集上应用

print('-> 模型的准确率:', str(round((accuracy_score(alvo_teste, previsoes)*100),2)) + '%')
print('\n-> 模型的混淆矩阵:\n', confusion_matrix(alvo_teste, previsoes), '\n')
print('-> 模型分类性能评价报告:\n\n', classification_report(alvo_teste, previsoes))

五、模型的应用,

如何指导决策?

针对新的的数据集,按着模型构建前的数据加工逻辑,做好数据处理后,然后利用构建好的模型对新数据集做预测,对预测的结果做应用。

总结

通过员工流动分析和预测这个案例,我们可以了解到数据科学工作的流程,从业务问题入手,然后到数据的理解和准备,模型的构建和评价,以及模型应用和指导决策与行动,以创造价值的系统化过程。我们也可以学习到使用Python语言做数据科学工作的相关技能,包括所使用的Python库,数据画像的手段,变量类型的编码,管道式模型设计方法等。

这个案例还有很多地方值得进一步深入思考和挖掘,感兴趣的朋友可以在此基础上,做进一步的工作。比方说,数据的处理方法,类别不平衡处理,算法的设计,模型性能的提升,特征工程等课题。

附录:案例完整代码(需要数据集的朋友可以添加我的个人微信获取或者从Kaggle平台下载获取)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# coding: utf-8

import random

import time as time
from datetime import timedelta

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn import model_selection

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import Normalizer

from sklearn.pipeline import Pipeline

from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier

from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score

from sklearn.exceptions import DataConversionWarning
import warnings

def disable_DataConversionWarning():
    warnings.filterwarnings(action='ignore', category=DataConversionWarning)
    
def disable_FutureWarning():
    warnings.filterwarnings(action='ignore', category=FutureWarning)

def enable_All_Warning():
    warnings.simplefilter('always')
    
get_ipython().run_line_magic('matplotlib', 'inline')


file = './datasets/MFG10YearTerminationData.csv'

data = pd.read_csv(filepath_or_buffer=file, header=0, sep=',')
print('数据检视:输出数据集前5行...')
data.head(5)

print('样本数:', data.shape[0])
print('变量数:', data.shape[1])
data.shape

print('变量的数据类型:')
data.dtypes

print('数值类型变量的描述性统计分析:')
data.describe().T

print('目标变量的取值:', data['STATUS'].unique())


# 类别变量编码 

# 第一步:对象转换为类别变量
data["city_name"] = data["city_name"].astype('category')
data["department_name"] = data["department_name"].astype('category')
data["job_title"] = data["job_title"].astype('category')
data["gender_short"] = data["gender_short"].astype('category')
data["termreason_desc"] = data["termreason_desc"].astype('category')
data["termtype_desc"] = data["termtype_desc"].astype('category')
data["BUSINESS_UNIT"] = data["BUSINESS_UNIT"].astype('category')

# 第二步:类别变量做标签编码
data["city_name_NUMERIC"] = data["city_name"].cat.codes
data["department_name_NUMERIC"] = data["department_name"].cat.codes
data["job_title_NUMERIC_NUMERIC"] = data["job_title"].cat.codes
data["gender_short_NUMERIC"] = data["gender_short"].cat.codes
data["termreason_desc_NUMERIC"] = data["termreason_desc"].cat.codes
data["termtype_desc_NUMERIC"] = data["termtype_desc"].cat.codes
data["BUSINESS_UNIT_NUMERIC"] = data["BUSINESS_UNIT"].cat.codes
data.head()

# 移除ID列
data = data.drop(columns=['EmployeeID'])

# 目标变量类型转换
data['ClasseNumerica'] = np.where(data['STATUS']=='ACTIVE', 1, 0)
data.tail(15)

print('-> 目标变量类别的分布情况:')
QtdObservacoes = data.shape[0]
QtdValClasse = data['STATUS'].unique().size
count = 0

print('样本数:', QtdObservacoes)

while count < QtdValClasse:
    print(data['STATUS'].unique()[count], ':', (data.groupby('STATUS').size())[count], '(', (((data.groupby('STATUS').size())[count]/ (QtdObservacoes)) * 100), '% )')
    count = count + 1

data.groupby('STATUS').size()


# 可视化分析 

data.hist(sharex=False, sharey=False, figsize=(20,12), grid=True)
plt.show()

# 相关系数矩阵
ColunaNumericas = (data._get_numeric_data()).columns.tolist() #获取数值型变量集
QtdTotalElementos = len(ColunaNumericas)

values_corr = data.corr() #生成相关性系数矩阵

# 相关性系数矩阵可视化
fig = plt.figure() # 构建图表
ax = fig.add_subplot(1,1,1) 
correlation_matrix = ax.matshow(values_corr
                                ,vmin = -1
                                ,vmax = 1
                                ,interpolation = 'none'
                                ,cmap = 'hot_r' #'hot_r', 'pink_r', 'spring', 'spring_r'
                                ,aspect='auto'
                                #,alpha = 0.75
                                ,origin = 'upper'
                               ) #matshow -> 把数组或者矩阵绘制为图形

fig.colorbar(correlation_matrix) 

ticks = np.arange(0, QtdTotalElementos, 1) 
ax.set_xticks(ticks)
ax.set_yticks(ticks)

ax.set_xticklabels(labels=ColunaNumericas, rotation=85, fontsize=12)
ax.set_yticklabels(labels=ColunaNumericas, fontsize=12)
plt.show()

# 可视化主要变量和目标变量的关系
ColunaNumericas = ['STATUS_YEAR', 'age', 'length_of_service', 'store_name', 'city_name_NUMERIC']
dataframe = data[ColunaNumericas]

dataframe = dataframe.assign(Classe=data['STATUS']) # 往数据框中添加新列

sns.pairplot(data=dataframe, hue="Classe", kind='scatter', palette="cubehelix")

ColunaNumericas = (data._get_numeric_data()).columns.tolist()
QtColunasNumericas = len(ColunaNumericas)

df_ALL_TERMINATED = data[data['ClasseNumerica'] == 0]
df_ALL_ACTIVE = data[data['ClasseNumerica'] == 1]

df_ALL_TERMINATED = (df_ALL_TERMINATED[ColunaNumericas])
df_ALL_ACTIVE = (df_ALL_ACTIVE[ColunaNumericas])

preditoras_ALL_TERMINATED = df_ALL_TERMINATED.values[:,:-1]
preditoras_ALL_ACTIVE = df_ALL_ACTIVE.values[:,:-1]

alvo_ALL_TERMINATED = df_ALL_TERMINATED.values[:,-1:QtColunasNumericas]
alvo_ALL_ACTIVE = df_ALL_ACTIVE.values[:,-1:QtColunasNumericas]

# 构建训练集和测试集 

random.seed(1)
# 训练集
preditoras_5000_INSTANCES_ACTIVE = np.array( random.sample(population = list(preditoras_ALL_ACTIVE), k = 5000))
preditoras_treino = np.concatenate([preditoras_ALL_TERMINATED, preditoras_5000_INSTANCES_ACTIVE])

# 测试集
preditoras_1000_INSTANCES_TERMINATED = np.array( random.sample(population = list(preditoras_ALL_TERMINATED), k = 1000) )
preditoras_40000_INSTANCES_ACTIVE = np.array( random.sample(population = list(preditoras_ALL_ACTIVE), k = 40000) )

preditoras_teste = np.concatenate([preditoras_1000_INSTANCES_TERMINATED, preditoras_40000_INSTANCES_ACTIVE])

# 训练集目标变量

alvo_treino_5000_INSTANCES_ACTIVE = np.array( random.sample(population = list(alvo_ALL_ACTIVE), k = 5000) )
alvo_treino = np.concatenate([alvo_ALL_TERMINATED, alvo_treino_5000_INSTANCES_ACTIVE])

# 测试集目标变量

alvo_1000_INSTANCES_TERMINATED = np.array( random.sample(population = list(alvo_ALL_TERMINATED), k = 1000) )
alvo_40000_INSTANCES_ACTIVE = np.array( random.sample(population = list(alvo_ALL_ACTIVE), k = 40000) )

alvo_teste = np.concatenate([alvo_1000_INSTANCES_TERMINATED, alvo_40000_INSTANCES_ACTIVE])


# 交叉验证--模型的选择
# 显示模型的性能分析

disable_DataConversionWarning()
disable_FutureWarning()

# 根据每种算法创建机器学习模型

modelos = []
modelos.append(('LogisticRegression', LogisticRegression()))
modelos.append(('KNeighborsClassifier', KNeighborsClassifier()))
modelos.append(('DecisionTreeClassifier', DecisionTreeClassifier()))

resultados = []
nomes = []

modelos_nome = [] 
mensagens = [] 
tempo = []

n_folds = 10

seed = 7

for nome, modelo in modelos:
    # 设置处理开始的时间
    start_time = time.time()

    # 创建交叉验证 10折交叉验证
    k_folds = model_selection.KFold(n_splits = n_folds, random_state = seed)

    # 创建模型
    result_saida = model_selection.cross_val_score(modelo 
                                                    ,preditoras_treino 
                                                    ,alvo_treino 
                                                    ,cv = k_folds 
                                                    #,n_jobs = -1 
                                                    ,scoring = 'accuracy'
                                                    #,verbose = 5 
                                                    )

    #记录模型名称
    modelos_nome.append(nome)
    #记录模型结果
    resultados.append(result_saida * 100)
    #输出最终消息
    mensagens.append('模型: %s      \n\n性能平均值: %.2f%%\n性能标准差: %.2f%%' % (modelo, (result_saida.mean()*100), (result_saida.std()*100)))

    # 执行模型所需要的时间
    tempo.append(time.time() - start_time)

qtd_mensagens = len(mensagens)
iterador = 0

print('---> 准确性描述评估 <---')
while qtd_mensagens > iterador:
    print('--------------------------------------------------------------------', '\n')
    print(mensagens[iterador])
    print('运行的时间: %s (HH:MM:SS)' % timedelta(seconds=round(tempo[iterador])))
    iterador = iterador + 1
print('--------------------------------------------------------------------')

# 模型准确性可视化比较
fig = plt.figure()
fig.suptitle('分类算法性能比较')
ax = fig.add_subplot(111)
plt.boxplot(resultados)
ax.set_xticklabels(modelos_nome)
plt.show()

enable_All_Warning()

# 基于模型选择里面最佳模型 决策树模型 构建预测模型

# 警告处理
disable_DataConversionWarning()
disable_FutureWarning()

# 创建管道
pipeline = []
pipeline.append(('Standardize', StandardScaler()))
pipeline.append(('ScaleFit', MinMaxScaler()))
pipeline.append(('Normalizer', Normalizer()))


pipeline.append(('DecisionTreeClassifier', DecisionTreeClassifier()))

pipeline = Pipeline(steps=pipeline)
model = pipeline.fit(preditoras_treino, alvo_treino)

previsoes = model.predict(preditoras_teste)

# 模型在测试数据集上应用

print('-> 模型的准确率:', str(round((accuracy_score(alvo_teste, previsoes)*100),2)) + '%')
print('\n-> 模型的混淆矩阵:\n', confusion_matrix(alvo_teste, previsoes), '\n')
print('-> 模型分类性能评价报告:\n\n', classification_report(alvo_teste, previsoes))

参考资料:

1、案例的数据集-来自Kaggle平台

(https://www.kaggle.com/HRAnalyticRepository/employee-attrition-data/)

2、 pandas库类别变量的数据处理-类别编码

(https://pandas.pydata.org/pandasdocs/stable/user_guide/categorical.html)

3、Numpy库where函数

https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.where.html

4、StandardScaler/MinMaxScaler/Normalizer之间的区别

(https://blog.csdn.net/u010471284/article/details/97627441)

5、sklearn: 管道与特征联合

(https://tsinghua-gongjing.github.io/posts/sklearn_pipeline.html)

6、cross_val_score的 scoring参数值解析

https://blog.csdn.net/qq_32590631/article/details/82831613

7、https://github.com/daniellj/DataScience


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
超参数黑盒(Black-box)优化的Python代码示例
在机器学习中,超参数是用于控制机器学习模型的学习过程的参数。为了与从数据中学到的机器学习模型参数区分开,所以称其为超参数。超参数的配置决定了机器学习模型的性能,每组独特的超参数集可以对应一个学习后的机器学习模型。对于大多数最先进的机器学习模型,所有可能的超参数组合的集合可能会很大。大多数机器学习模型软件包的默认参数值都经过了一些特别的调整优化,可实现不错的基线性能。这意味着可以直接使用,但这些如果针对特定的情况还是需要找到特定的超参数值,这样才能达到最佳的性能。
deephub
2022/11/11
6770
超参数黑盒(Black-box)优化的Python代码示例
使用Transformer 模型进行时间序列预测的Pytorch代码示例
时间序列预测是一个经久不衰的主题,受自然语言处理领域的成功启发,transformer模型也在时间序列预测有了很大的发展。本文可以作为学习使用Transformer 模型的时间序列预测的一个起点。
deephub
2024/01/29
1.3K1
使用Transformer 模型进行时间序列预测的Pytorch代码示例
过关斩将打进 Kaggle 竞赛 Top 0.3%,我是这样做的
导读:刚开始接触数据竞赛时,我们可能会被一些高大上的技术吓到。各界大佬云集,各种技术令人眼花缭乱,新手们就像蜉蝣一般渺小无助。今天本文就分享一下在 kaggle 的竞赛中,参赛者取得 top0.3% 的经验和技巧。让我们开始吧!
Python数据科学
2019/07/16
8840
数据分析入门系列教程-决策树实战
在学习了上一节决策树的原理之后,你有没有想动手实践下的冲动呢,今天我们就来用决策树进行项目实战。
周萝卜
2020/10/30
9180
数据分析入门系列教程-决策树实战
使用逻辑回归模型预测用户购买会员意向
会员付费模式是互联网中常用的变现方式,并具有高用户忠诚度和粘性,帮助电商应用增加收入的优点。会员的销售模式,依赖于线下会销+线上直播+代理商电话销售的模式。为使用户有良好的用户体验,以及满足精细化运营的需求,如何在海量用户中筛选出有价值的用户成为会员转化运营工作的重点。 因此,本文采用了逻辑回归的算法,使用用户在平台上的行为数据特征(登录、协议、商品、交易等),通过模型预测出用户购买会员的概率,对于预测结果有较大概率购买会员的用户,进行重点触达,提高交易转化。
政采云前端团队
2023/10/16
1K0
使用逻辑回归模型预测用户购买会员意向
kaggle实战-银行用户流失预测
近年来,不论是传统行业还是互联网行业,都面临着用户流失问题。一般在银行、电话服务公司、互联网公司、保险等公司,经常使用客户流失分析和客户流失率作为他们的关键性业务指标之一。
皮大大
2023/08/25
2K0
过关斩将打进Kaggle竞赛Top 0.3%,我是这样做的
从下图可以看出,融合后的模型性能最好,RMSE 仅为 0.075,该融合模型用于最终预测。
AI科技大本营
2019/07/18
1.9K1
过关斩将打进Kaggle竞赛Top 0.3%,我是这样做的
用Python研究了三千套房子,告诉你究竟是什么抬高了房价?
关于房价,一直都是全民热议的话题,毕竟不少人终其一生都在为之奋斗。 房地产的泡沫究竟有多大不得而知?今天我们抛开泡沫,回归房屋最本质的内容,来分析一下房价的影响因素究竟是什么? 1、导入数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sn import missingno as msno %matplotlib inlinetrain = pd.read_csv('tra
Python中文社区
2018/02/01
7490
用Python研究了三千套房子,告诉你究竟是什么抬高了房价?
kaggle实战-基于机器学习的中风病人预测
基于随机森林、逻辑回归、SVM的中风病人预测 原数据地址:https://www.kaggle.com/datasets/fedesoriano/stroke-prediction-dataset?d
皮大大
2023/08/25
1.5K0
新人赛《金融风控贷款违约》避坑指南!
本文以天池的金融风控赛为背景,梳理了金融风控的整个实践流程,帮助大家避坑学习。赛事的场景是个人信贷,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这个问题在现实的风控场景中很常见,属于典型的分类问题。另外,准入模型,评分卡模型皆是属于这个范畴。
Datawhale
2020/10/23
3K0
新人赛《金融风控贷款违约》避坑指南!
【数据准备和特征工程】数据清理
import pandas as pd df = pd.read_csv("test.csv") df.sample(10)
LoneRanger
2022/02/02
9060
【数据挖掘项目】Airbnb新用户的民宿预定结果预测
摘要 本文主要根据对Airbnb 新用户的民宿预定结果进行预测,完整的陈述了从 数据探索到 特征工程到 构建模型的整个过程。 其中: 1数据探索部分主要基于 pandas库,利用常见的: head(), value_counts(), describe(), isnull(), unique()等函数以及通过 matplotlib作图对数据进行理解和探索; 2.特征工程部分主要是通过从日期中提取 年月日, 季节, weekday,对年龄进行 分段,计算相关特征之间的 差值,根据用户id进行分组,从而统计一些特征变量的 次数, 平均值, 标准差等等,以及通过 one hot encoding和 labels encoding对数据进行编码来提取特征; 3.构建模型部分主要基于 sklearn包, xgboost包,通过调用不同的模型进行预测,其中涉及到的模型有,逻辑回归模型 LogisticRegression,树模型: DecisionTree,RandomForest,AdaBoost,Bagging,ExtraTree,GraBoost,SVM模型: SVM-rbf,SVM-poly,SVM-linear, xgboost,以及通过改变 模型的参数和 数据量大小,来观察 NDGG的评分结果,从而了解不同模型,不同参数和不同数据量大小对预测结果的影响.
Datawhale
2019/07/08
2.3K0
【数据挖掘项目】Airbnb新用户的民宿预定结果预测
图神经网络之Cora数据集
今天使用图神经网络和一个很新的库StellarGraph,然后基于TensorFlow搭建了一个分类模型
Tom2Code
2023/12/26
2.7K0
图神经网络之Cora数据集
极不均衡样本的信用卡欺诈分析
原notebook地址为:https://www.kaggle.com/code/janiobachmann/credit-fraud-dealing-with-imbalanced-datasets/notebook
皮大大
2023/08/25
5000
[数据科学] 基于基因表达监测预测肿瘤
通过基因表达监测(DNA微阵列)对新的癌症病例进行分类,从而为鉴定新的癌症类别和将肿瘤分配到已知类别提供了一般方法。这些数据用于对患有急性髓性白血病(AML)和急性淋巴细胞白血病(ALL)的患者进行分类。
DrugAI
2021/01/29
3870
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型
有人离职是因为“世界那么大,我想去看看”,也有人觉得“怀有绝技在身,不怕天下无路”。
CDA数据分析师
2022/11/17
7170
员工一言不合就离职怎么办?我用Python写了个员工流失预测模型
数据挖掘机器学习[三]---汽车交易价格预测详细版本{特征工程、交叉检验、绘制学习率曲线与验证曲线}
 题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池
汀丶人工智能
2022/12/21
7080
数据挖掘机器学习[三]---汽车交易价格预测详细版本{特征工程、交叉检验、绘制学习率曲线与验证曲线}
乳腺癌预测_EDA_Models
在医学领域的不断创新中,技术的进步为疾病的早期预测和诊断提供了全新的可能性。乳腺癌作为女性最常见的癌症之一,对于其早期预测变得尤为关键。本文将引领您探索乳腺癌预测中的数据探索分析(Exploratory Data Analysis,简称EDA)以及相关的模型应用。通过深入挖掘乳腺癌数据集,我们将揭示隐藏在背后的模式和趋势,为医学领域的科学家、数据科学家和临床医生提供更有力的工具,以更准确地预测乳腺癌的风险。
老虎也淘气
2024/01/30
2620
乳腺癌预测_EDA_Models
【内含baseline】Kaggle机器学习新赛指南!
日前,Kaggle发布了ICR - Identifying Age-Related Conditions疾病识别大赛。这是一个机器学习中的二分类任务,需要你使用ML的方法对病人进行诊断,判断病人是否有相关疾病,从而为医生提供进行合理诊断的依据。
zenRRan
2023/08/22
2570
【内含baseline】Kaggle机器学习新赛指南!
深度学习-使用PyTorch的表格数据
这篇文章将通过一个实际的例子提供有关将Pytorch用于表格数据的详细的端到端指南。在本文结束时,将能够构建Pytorch模型。
代码医生工作室
2020/03/04
2K0
深度学习-使用PyTorch的表格数据
推荐阅读
相关推荐
超参数黑盒(Black-box)优化的Python代码示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验