墨西哥的员工流动率在全球排名第八,平均每年约17%的流失率 - 一些行业(如餐饮服务)的流失率高达50%。 根据Catalyst的一项研究,平均而言,替换员工的成本约为员工年薪的50%至75%。 考虑到月薪为2万比索的中级职位,替换这名员工的总费用约为14万比索。 平均而言,替换员工需要大约50天的时间,由于生产力损失而产生的成本将持续增加。 对于像everis这样的拥有超过2万名员工的大公司来说,考虑到15%的流失率和15,000比索的平均薪水,年营业额总成本将上升至至少2.7亿比索。
在本文中,我们提供了一个神经网络模型的详细信息,该模型能够识别具有高度人员流动风险的员工候选人,并以大约96%的准确率完成此任务。
方法论
我们使用了由IBM数据科学家创建的虚拟数据集“HR Employee Attrition and Performance”(https://community.watsonanalytics.com/wp-content/uploads/2015/03/WA_Fn-UseC_-HR-Employee-Attrition.xlsx)。 它包含1,470行员工历史数据。
经过探索性数据分析我们确定了一些与员工流动率相关性最高的特征。 这些是我们发现的最重要的特征:
年龄
与家的距离
加班情况
教育状况
婚姻状况
工作过的公司数量
总工作年限
月收入
这些特征用于训练模型以预测流失风险。 该数据集已经包含一个称为“attrition”的功能,该功能表明该员工是否会离开该职位并需要更换。 该特征是一种热点编码(将数据分解为训练和测试集后显示),并被用作神经网络预测的目标。 以下是用于单热编码的辅助函数:
由于数据集的不平衡性(员工流动率约占总人口的16%,或1,470人中的237人),因此采用上采样技术来重复更换营业案例 - 所以数据中有1,233个离职的个案和1,233个没有离职的个案。
对数据集进行上采样可以避免模型学习每次预测“没有离职”的情况; 在这种情况下,通过这样做可以达到大约84%的精度(这个精度可以作为我们的基准)。
接下来,使用StandardScaler将数据归一化到-1到1的范围,以避免异常值以不成比例的方式影响预测。
class standard_scaler:
def __init__(self, name):
self.name = name # candidato o empleado
self.scalers = {} # asignar cada scaler con el nombre de la columna (ej.'Age')
def add_scaler(self, scaler, name):
self.scalers[name] = scaler
# Initialize a standard_scaler class to hold all scalers for future reverse scaling
scalers_empleados = standard_scaler('empleados')
def scale_and_generate_scaler(data):
standard_scaler = StandardScaler()
scaled = standard_scaler.fit_transform(data.astype('int64').values.reshape(-1, 1))
return scaled, standard_scaler
def scale_array(scaler, array):
return scaler.transform([array])