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

本文主要是介绍lightgbm实践:Kaggle桑坦德银行客户交易预测比赛baseline,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

继上篇介绍了lightgbm的理论知识后(LightGBM源码阅读+理论分析(处理特征类别,缺省值的实现细节)_爱吃火锅的博客-CSDN博客_lightgbm源码),终于有时间来写一篇关于lgb的实践篇啦,本篇的实践是基于kaggle上面一个正在进行的比赛,其采用的是ROC评分机制,截止目前第一名得分是0.904,本篇的的结果是0.899,分数算是一个baseline吧,待优化,目的重在分享学习!!!!

本篇全部代码:python-Machine-learning/Lightgbm/Santander_Customer_Transaction_Prediction at master · Mryangkaitong/python-Machine-learning · GitHub

数据集:SantanderCustomerTransactionPrediction_免费高速下载|百度网盘-分享无限制

赛题介绍:

背景需求:

 在桑坦德,我们的使命是帮助人们和企业繁荣。我们一直在寻找方法来帮助我们的客户了解他们的财务健康,并确定哪些产品和服务可能帮助他们实现他们的货币目标。
我们的数据科学团队不断挑战我们的机器学习算法,与全球数据科学界合作,确保我们能够更准确地找到解决我们最常见挑战的新方法,二进制分类问题,如:客户满意吗?顾客会购买这种产品吗?客户能支付这笔贷款吗?
在这个挑战中,我们邀请了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.

实践:

(1)EDA

可以看到train,test数据都是是200000行,其中特征是var_0到var_199即200个特征,具体含义不得而知

接下来看一下train中的label:

可以看到样本数据不是很均衡,大约相差是9倍的样子。

接着我们再来看一下这200特征中缺省值的情况:

也就是说所有特征都没有缺省值,说得到这里如果还记得理论篇的话应该可以想到,即使有缺省值也无所谓,因为lgb是可以自动处理的

那我们再来看看每个特征下对应的具体取值:

这里主要是看每个特征下有多少不同的值,可以看到大部分特征都是连续的有很多值,笔者这里只是截取了部分结果,这里面稍微有点特殊的是var_68这个特征,相比于其他其不同值最少为451,那么我们就具体在train和test上面来看看这个特征的真面貌:(截取了部分图片)

最后我们要看看的是每个特征和label的相关度,以便我们进一步了解特征的重要程度:

可以看到相关度最高的是var_81为0.08,相关度最低是var_185为0.00005

最后我们将特征和Label的相关度可视化一下:

这里仅仅截取了前两个特征以供参考

(2)特征工程

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

关于归一化,lgb是树模型 ,有说归一化没用,各种理论分析,笔者的一般做法就是都试试嘛,与其纠结归不归好,还不如动手试一下结果一目了然,实践是检验真理的唯一标准,进过实验,这里还是不归一话的好

通过EDA部分我们也可以看到数据是有点不平衡的,我们是否可以采用均衡抽样呢?如下:

但是不论进过过采样还是欠采样都没有取得显著的效果,所以本篇是直接使用了没有经过抽样的原始数据

除了直接将相关度不高的特征去掉之外,我们还可以通过后项搜索来选择最佳特征,但是该过程耗时耗力,一班情况下最好不要使用,不过为了学习,笔者也将该代码分享出来供交流(代码中的featureSelect函数),其实很简单

(3)模型训练

这里采用的是交叉验证,即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

最后来看一下结果:

说明:

那这些超参数的具体值是怎么确定的呢?哈哈,实际来说大家可以使用这些或其他一些大牛的祖传参数值先去跑一下,只要使用的参数值别太奇葩,其实结果的好坏很大程度还是取决于特征工程的,调参带来的效果还是小打小闹,所以还是把更多精力放在特征工程吧!!!!

结束:

待优化,欢迎交流

欢迎关注笔者微信公众号


​​​​​​​

 

这篇关于lightgbm实践:Kaggle桑坦德银行客户交易预测比赛baseline的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508540

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成