kaggle员工离职预测——lightGBM

一、比赛说明

比赛地址:https://www.kaggle.com/c/bi-attrition-predict

问题描述
数据包括员工的各种统计信息,以及该员工是否已经离职,统计的信息包括工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等。
需要通过训练数据得出员工离职预测的结果。

评分标准
AUC
在这里插入图片描述

二、代码

import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.feature_extraction import DictVectorizer

train = pd.read_csv('train.csv',index_col = 0)
test = pd.read_csv('test.csv',index_col = 0)
#print(train['Attrition'].value_counts())
# 处理Attrition字段
train['Attrition'] = train['Attrition'].map(lambda x:1 if x == 'Yes' else 0)

# 查看数据是否有空值
#print(train.isna().sum())

# 去掉没用的列 员工号码,标准工时(=80)
train = train.drop(['EmployeeNumber', 'StandardHours'], axis = 1)
test = test.drop(['EmployeeNumber', 'StandardHours'], axis = 1)

# 对于分类特征进行特征值编码
attr = ['Age','BusinessTravel','Department','Education','EducationField','Gender','JobRole','MaritalStatus','Over18','OverTime']

import xgboost as xgb
from sklearn.model_selection import train_test_split

param = {'boosting_type':'gbdt',
                         'objective' : 'binary:logistic', #
                         'eval_metric' : 'auc',
                         'eta' : 0.01,
                         'max_depth' : 15,
                         'colsample_bytree':0.8,
                         'subsample': 0.9,
                         'subsample_freq': 8,
                         'alpha': 0.6,
                         'lambda': 0,
        }
X_train, X_valid, y_train, y_valid = train_test_split(train.drop('Attrition',axis=1), train['Attrition'], test_size=0.2, random_state=42)
# 使用DictVectorizer对离散值进行编码
dvec = DictVectorizer(sparse = False)
X_train = dvec.fit_transform(X_train.to_dict(orient='record'))
X_valid = dvec.transform(X_valid.to_dict(orient='record'))
temp_test = dvec.transform(test.to_dict(orient='record'))

# 进行DMatrix转换
train_data = xgb.DMatrix(X_train, label=y_train)
valid_data = xgb.DMatrix(X_valid, label=y_valid)
test_data = xgb.DMatrix(temp_test)

model = xgb.train(param, train_data, evals=[(train_data, 'train'), (valid_data, 'valid')], num_boost_round = 10000, early_stopping_rounds=200, verbose_eval=25)
predict = model.predict(test_data)
test['Attrition'] = predict
print(predict)
# 转化为二分类输出
#test['Attrition']=test['Attrition'].map(lambda x:1 if x>=0.5 else 0)
test[['Attrition']].to_csv('submit_lgb_onehot.csv')

三、分数

0.84945

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值