西财“新网银行杯”数据科学竞赛记录
最近在做之前西财“新网银行杯”数据科学竞赛的题目
比赛地址:
http://www.dcjingsai.com/common/cmpt/%E8%A5%BF%E5%8D%97%E8%B4%A2%E7%BB%8F%E5%A4%A7%E5%AD%A6%E2%80%9C%E6%96%B0%E7%BD%91%E9%93%B6%E8%A1%8C%E6%9D%AF%E2%80%9D%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6%E7%AB%9E%E8%B5%9B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html
总共用了三个模型来预测客户违约风险,包括传统逻辑回归、lightGBM还有XGBoost,最后采用的是XGBoost,做了三天排名到了12名,A榜线上评分0.75576,记录一下XGBoost的一些调参,希望能够向各位大佬多多学习
1.XGBoost是什么
它是Gradient Boosting算法的一个优化的版本,在各大类数据科学竞赛中除了图像和文本领域,它基本上是霸占了超过一半的比例,所以我觉得学好它还是很有优势的,因为我也是第一次用xgboost来打比赛,所以写的不对或者不足的地方希望和各位多多交流。
比赛环境:lightgbm、xgboost、statesmodel、sklearn、numpy、pandas、matplotlib
2.XGBoost的参数包括三类(这里只是具体说一下我进行调参的参数)
详细的参数大家可以去xgboost官方文档中查看
2.1 通用参数
通用参数包括:
2.1.1 booster(默认gbtree)
这个参数一般都会选择gbtree,毕竟我觉得你如果不用树模型作为提升算法的话也没必要用xgboost。。。
2.1.2 silent(默认0)
0表示模型会输出整个建模的流程,如果不想看起来内容特别多的话就选1就行啦,1表示开启静默模式
2.1.3 nthread
一般不需要输入这个参数,模型会自动检测从而调用所有的CPU进行训练
2.2 Booster 参数
2.2.1 eta(默认0.3)
类似于学习率,减少每一步的权重来提高模型的鲁棒性,一般取值从0.01~0.2
2.2.2 max_depth(默认6)
表示树模型的最大深度,可以避免过拟合,一般用gridsearchCV来自动选择就行
2.2.3 min_child_weight[默认1]
表示最小的子节点的权重的和,这个参数建议大家还是直接用CV来选择吧
2.2.4 gamma(默认0)
这个参数和损失函数息息相关,也建议直接用CV来选择
2.2.5 subsample(默认1)
减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。一般取值范围为0.5~1
2.2.6 colsample_bytree(默认1)
用来控制每棵随机采样的列数的占比(每一列是一个特征),一般取值范围为0.5~1
2.2.7 lambda(默认1)
表示l2正则项,减少过拟合,这次调节这个参数使得模型效果提升了0.0003
2.2.8 alpha(默认0)
表示l1正则项,同样用来避免过拟合,比赛中调节这个参数没有提升,所以没有用到
2.3 学习目标参数
2.3.1 objective(默认reg:linear)
因为新网这个比赛是要返回预测的概率,所以这里的参数设置为binary:logistic,表示用二分类的逻辑回归来做
2.3.2 eval_metric(默认值取决于objective参数的取值)
新网这个比赛直接要求用AUC来评估,当然一般也是auc用的多
3.调参方法
3.1 sklearn中的GridSearchCV函数
初始化所有参数
n_estimators参数:这个参数调节的作用很小
max_depth参数:最终取4
min_child_weight参数:最终取6
gamma参数:本次比赛中这个参数调节的作用很小,最终取0
subsample参数:最终取0.67
colsample_bytree参数:最终取0.7
lambda参数:最终取2.22
alpha参数:没有使用
eta参数:学习率参数一般放到最后调试
4.小结
调参对于模型的性能提升还是有较大帮助的,虽然数据预处理和特征工程占到了很大的地位,但是调参的过程也能够帮助我们更好的理解模型和比赛的目的
之后还会写关于逻辑回归做评分卡建模和lightGBM建模的文章,那两个会详细一些,这里只是记录一下,最后再将整理的三个模型的代码放GitHub上面