9

lightgbm实践:Kaggle桑坦德银行客户交易预测比赛baseline

 2 years ago
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

AINLP 2022-04-17 13:19

The following article is from 算法让生活更美好 Author BPSK

640?wx_fmt=jpeg
640?wx_fmt=gif

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

640?wx_fmt=gif

在桑坦德,我们的使命是帮助人们和企业繁荣。我们一直在寻找方法来帮助我们的客户了解他们的财务健康,并确定哪些产品和服务可能帮助他们实现他们的货币目标。

我们的数据科学团队不断挑战我们的机器学习算法,与全球数据科学界合作,确保我们能够更准确地找到解决我们最常见挑战的新方法,二进制分类问题,如:客户满意吗?顾客会购买这种产品吗?客户能支付这笔贷款吗?

在这个挑战中,我们邀请了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.

640?wx_fmt=gif
640?wx_fmt=png
可以看到train,test数据都是是200000行,其中特征是var_0到var_199即200个特征,具体含义不得而知接下来看一下train中的label:
640?wx_fmt=png
可以看到样本数据不是很均衡,大约相差是9倍的样子。接着我们再来看一下这200特征中缺省值的情况:
640?wx_fmt=png
也就是说所有特征都没有缺省值,说得到这里如果还记得理论篇的话应该可以想到,即使有缺省值也无所谓,因为lgb是可以自动处理的那我们再来看看每个特征下对应的具体取值:
640?wx_fmt=png
这里主要是看每个特征下有多少不同的值,可以看到大部分特征都是连续的有很多值,笔者这里只是截取了部分结果,这里面稍微有点特殊的是var_68这个特征,相比于其他其不同值最少为451,那么我们就具体在train和test上面来看看这个特征的真面貌:(截取了部分图片)
640?wx_fmt=png
640?wx_fmt=png
最后我们要看看的是每个特征和label的相关度,以便我们进一步了解特征的重要程度:
640?wx_fmt=png
640?wx_fmt=png
可以看到相关度最高的是var_81为0.08,相关度最低是var_185为0.00005最后我们将特征和Label的相关度可视化一下:
640?wx_fmt=png
640?wx_fmt=png
这里仅仅截取了前两个特征以供参考640?wx_fmt=gif

先将相关度不高的几个特征去掉:

640?wx_fmt=png

关于归一化,lgb是树模型 ,有说归一化没用,各种理论分析,笔者的一般做法就是都试试嘛,与其纠结归不归好,还不如动手试一下结果一目了然,实践是检验真理的唯一标准,进过实验,这里还是不归一的好通过EDA部分我们也可以看到数据是有点不平衡的,我们是否可以采用均衡抽样呢?如下:
640?wx_fmt=png
但是不论经过过采样还是欠采样都没有取得显著的效果,所以本篇是直接使用了没有经过抽样的原始数据除了直接将相关度不高的特征去掉之外,我们还可以通过后项搜索来选择最佳特征,但是该过程耗时耗力,一般情况下最好不要使用,不过为了学习,笔者也将该代码分享出来供交流(代码中的featureSelect函数),其实很简单。640?wx_fmt=gif

这里采用的是交叉验证,即5份

640?wx_fmt=png

后面就比较简单了,直接使用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最后来看一下结果:
640?wx_fmt=png
640?wx_fmt=png
那这些超参数的具体值是怎么确定的呢?哈哈,实际来说大家可以使用这些或其他一些大牛的祖传参数值先去跑一下,只要使用的参数值别太奇葩,其实结果的好坏很大程度还是取决于特征工程的,调参带来的效果还是小打小闹,所以还是把更多精力放在特征工程吧!!!!640?wx_fmt=gif

这里没有很多trick,本篇主要希望大家看完之后掌握lgb的基本用法以及做一个项目的基本流程,EDA过程是非常重要的,在对数据确实有了一个比较客观的掌握后,再动手,才是上上策~
0?wx_fmt=png
AINLP
一个有趣有AI的自然语言处理公众号:关注AI、NLP、机器学习、推荐系统、计算广告等相关技术。公众号可直接对话双语聊天机器人,尝试自动对联、作诗机、藏头诗生成器,调戏夸夸机器人、彩虹屁生成器,使用中英翻译,查询相似词,测试NLP相关工具包。
343篇原创内容
Official Account
进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点
640?wx_fmt=jpeg

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

640?wx_fmt=jpeg

阅读至此了,分享、点赞、在看三选一吧🙏


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK