逻辑回归-人才流失案例

人才流失案例

意义

1.通过对人才流失的分析和建模, 企业可以提前发现潜在的人才流失风险, 从而采取相应的措施来预防和减少人才流失. 有助于企业保持核心竞争力, 确保关键岗位的稳定性.

2.人才流失大模型可以帮助企业更好地了解员工的需求和期望, 从而优化人力资源管理策略, 提高员工满意度和忠诚度. 这有助于降低员工离职率, 提高企业的人力资源效益.

代码实现

  • 导入数据包
# 导包
import pandas as pd
import numpy as np
import xgboost as xgb
from sklearn.model_selection import train_test_split
from collections import Counter
from sklearn.metrics import classification_report
from sklearn.model_selection import StratifiedGroupKFold
import os
from sklearn.ensemble import RandomForestClassifier
from boruta import BorutaPy
from sklearn.utils import class_weight
import lightgbm as lgb
from sklearn.model_selection import GridSearchCV
  • 绝对地址
# 绝对地址
os.chdir(r'C:\Users\17635\PycharmProjects\01-Project Finance\bj-ai20_datamining')
os.getcwd()
  • 获取数据
# 获取数据
data =  pd.read_csv('./data/train.csv')
data.head()

在这里插入图片描述

查看数据的基本特征
data.info()

在这里插入图片描述

data.info()是获取数据的基本特征, 该数据共有31个特征. Attriton为目标字段.

由于有一些数据为object类型, 在特征筛选前, 我们需要特征进行热编码操作

  • 对数据进行热编码
# 热编码
pd_data = pd.get_dummies(data)
pd_data.head()

在这里插入图片描述

根据前面的数据分析中, 没有做热编码的时候, 共有31的特征, 在进行热编码之后, 共有52个特征.

  • 特征筛选
# 特征筛选
pd_x = pd_data.drop(['Attrition'], axis=1)
x = pd_x.values
y = pd_data['Attrition'].values
y = y.ravel()
  • 使用Burota方法对特征进行预处理

Boruta算法是一种特征选择方法, 使用特征的重要性来选取特征

  • 原理

在这里插入图片描述

  1. 创建阴影特征 (shadow feature) : 对每个真实特征R,随机打乱顺序,得到阴影特征矩阵S,拼接到真实特征后面,构成新的特征矩阵N = [R, S]

  2. 用新的特征矩阵N作为输入,训练模型,能输出feature_importances_的模型,如RandomForest, lightgbm,xgboost都可以,得到真实特征和阴影特征的feature importances,

  3. 取阴影特征feature importance的最大值S_max,真实特征中feature importance小于S_max的,被认为是不重要的特征

  4. 删除不重要的特征,重复上述过程,直到满足条件

# 定义一个随机森林分类器
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
# 使用Boruta进行特征筛选
feat_selector = BorutaPy(rf, n_estimators='auto', random_state=10, max_iter=10)
feat_selector.fit(x, y)
# 返回特征是否有用
pd_ft_select = pd.DataFrame({'feature': pd_x.columns.to_list(), 'selected': feat_selector.support_})
pd_ft_select

在这里插入图片描述

Boruta算法会计算特征的重要性

ranking值越大, 说明特征越不重要, 可以删除. 反之, 特征越重要, 不能删除

即当特征selected值为Flase, 则说明这个特征可以删除, 反之, 为True, 则说明这个特征比较重要, 不能删除.

  • 查看可以使用的特征
# 查看哪些列是否可以使用
pd_ft_select[pd_ft_select['selected'] == True]

在这里插入图片描述

说明现在有9个特征比较重要

  • 取出建模用的特征

根据上面的特征筛选, 得到9个比较重要的特征,然后将其不重要的特征删除

# 取出建模用的特征
feature_lst = ['JobLevel','MonthlyIncome','StockOptionLevel','TotalWorkingYears','YearsAtCompany','YearsWithCurrManager','OverTime_No','OverTime_Yes']
  • 数据预处理
# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(pd_x[feature_lst], y, test_size=0.2, random_state=1)

# 标准化
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
  • 使用逻辑回归训练模型
# 使用逻辑回归训练模型
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=0.1,class_weight='balanced', penalty='l2', solver='liblinear')
lr.fit(X_train, y_train)
  • 测试模型
# 测试模型
y_pred = lr.predict(X_test)
print(classification_report(y_test, y_pred))

在这里插入图片描述

  • 评估模型
# 评估模型
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
print('accuracy_score:', accuracy_score(y_test, y_pred))
print('precision_score:', precision_score(y_test, y_pred))
print('recall_score:', recall_score(y_test, y_pred))
print('f1_score:', f1_score(y_test, y_pred))

在这里插入图片描述

  • 计算auc的值
# 计算auc的值
from sklearn.metrics import roc_auc_score
auc_score = roc_auc_score(y_test, y_pred)
print(f'auc_score:{auc_score}')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值