lightgbm实践:Kaggle桑坦德银行客户交易预测比赛baseline
source link: https://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650430027&%3Bidx=5&%3Bsn=c7a412f53f318f08b5d6670818aadfc1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
lightgbm实践:Kaggle桑坦德银行客户交易预测比赛baseline
The following article is from 算法让生活更美好 Author BPSK
lightgbm是一种泛化非常不错的机器学习算法,关于原理和源码解读部分可以看之前写的一篇:
https://mp.weixin.qq.com/s/XxFHmxV4_iDq8ksFuZM02w,
有了理论,这次写一篇关于lgb的实践,本篇的实践是基于kaggle上面的一个已经结束的比赛,其采用的是ROC评分机制,当时第一名得分是0.904(后面可能被刷的更高了~),本篇的的结果是0.899,分数算是一个baseline吧,待优化,目的重在分享学习做项目流程和基本使用,lgb作为xgb的后继者,后面再写一篇xgb的实践吧,方便大家熟悉,也可以看之前的一篇关于xgb实践:https://mp.weixin.qq.com/s/Aj_P5r0Q4hwmWi5tttZy6w本篇全部代码:https://github.com/Mryangkaitong/python-Machine-learning/tree/master/Lightgbm/Santander_Customer_Transaction_Prediction本篇用到的数据集:https://pan.baidu.com/s/1Ph655Ha07eVjCmJoloybsg#list/path=%2F在桑坦德,我们的使命是帮助人们和企业繁荣。我们一直在寻找方法来帮助我们的客户了解他们的财务健康,并确定哪些产品和服务可能帮助他们实现他们的货币目标。
我们的数据科学团队不断挑战我们的机器学习算法,与全球数据科学界合作,确保我们能够更准确地找到解决我们最常见挑战的新方法,二进制分类问题,如:客户满意吗?顾客会购买这种产品吗?客户能支付这笔贷款吗?
在这个挑战中,我们邀请了kagglers来帮助我们确定哪些客户将在未来进行特定的交易,不管交易金额有多少。为这次比赛提供的数据与我们现有的解决这个问题的真实数据具有相同的结构。
File descriptions
train.csv - the training set.
test.csv - the test set. The test set contains some rows which are not included in scoring.
sample_submission.csv - a sample submission file in the correct format.
先将相关度不高的几个特征去掉:关于归一化,lgb是树模型 ,有说归一化没用,各种理论分析,笔者的一般做法就是都试试嘛,与其纠结归不归好,还不如动手试一下结果一目了然,实践是检验真理的唯一标准,进过实验,这里还是不归一的好通过EDA部分我们也可以看到数据是有点不平衡的,我们是否可以采用均衡抽样呢?如下:但是不论经过过采样还是欠采样都没有取得显著的效果,所以本篇是直接使用了没有经过抽样的原始数据除了直接将相关度不高的特征去掉之外,我们还可以通过后项搜索来选择最佳特征,但是该过程耗时耗力,一般情况下最好不要使用,不过为了学习,笔者也将该代码分享出来供交流(代码中的featureSelect函数),其实很简单。
这里采用的是交叉验证,即5份后面就比较简单了,直接使用Lgb模型训练即可:
params = {'num_leaves': 10,
'min_data_in_leaf': 42,
'objective': 'binary',
'max_depth': 18,
'learning_rate': 0.01,
'boosting': 'gbdt',
'bagging_freq': 6,
'bagging_fraction': 0.8,
'feature_fraction': 0.9,
'bagging_seed': 11,
'reg_alpha': 2,
'reg_lambda': 5,
'random_state': 42,
'metric': 'auc',
'verbosity': -1,
'subsample': 0.9,
'min_gain_to_split': 0.01077313523861969,
'min_child_weight': 19.428902804238373,
'num_threads': 4}
oof_lgb, prediction_lgb, feature_importance_lgb = train_model(params=params, model_type='lgb',plot_feature_importance=True)
需要注意这里的超参数,有什么不懂的请看理论篇,其中有些参数没讲解的大家可以进一步百度,关于模型这里只不过进行了进一步封装,可以具体看train_model最后来看一下结果:那这些超参数的具体值是怎么确定的呢?哈哈,实际来说大家可以使用这些或其他一些大牛的祖传参数值先去跑一下,只要使用的参数值别太奇葩,其实结果的好坏很大程度还是取决于特征工程的,调参带来的效果还是小打小闹,所以还是把更多精力放在特征工程吧!!!!
这里没有很多trick,本篇主要希望大家看完之后掌握lgb的基本用法以及做一个项目的基本流程,EDA过程是非常重要的,在对数据确实有了一个比较客观的掌握后,再动手,才是上上策~
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK