从零开始弄懂LightGBM_实战篇

作者:楼观白楼
出处:https://zhuanlan.zhihu.com/p/98926322

写在前面

在本次比赛中,我们团队恶魔妈妈买面膜(经主办方建议,决赛时队名修改为秋名山车神)在初赛A榜,初赛B榜,复赛A榜,复赛B榜分别取得2,4,1,3的名次,并在最终决赛中逆袭拿到冠军(1/3000)。

本来复赛B榜是rank 4。由于有一个队伍由于使用小号被取消资格,一个队伍放弃复现,决赛逆袭一个队伍,最终拿到了冠军。说实话,运气非常好。

历时四个月,从多次想要放弃(中间有一个月放弃了没有做)到最终夺冠,真的十分感谢队友!

团队介绍

秋名山车神

梁晨 重庆邮电大学 研一

陈暄群 华南理工大学 研二

梁汐然 北京大学 大四

徐巍 重庆邮电大学 研二

王猛旗 重庆邮电大学 研一

format,png

如你们所见,我们来自三个不同的学校,通过本次比赛聚集在一起,在此也十分感谢DF平台与主办方CCF。

我们团队中大多数人都是第一次参加数据科学竞赛。

感谢开源

本次比赛要特别感谢的人是鱼佬,他的框架太强了。换成是我我不一定会在比赛中开源这么强的思路,从某种层面上来说这可能会坑到自己。所以敢于开源的人都应该值得称赞,开源与分享可以让整个环境进步。

另外还要感谢月月鸟,阿道,焕明(校友,就是54的那个规则开源,实际上我发现很多队伍的规则都是基于他做的),他们的开源也让我们学习到了很多。

代码

我们本次的方案一共约500行代码,主要的工作在于特征工程与规则构造,思路,代码都很简单,运行只需3min,请放心使用。

https://github.com/cxq80803716/2019-CCF-BDCI-Car_sales

接下来我会详细介绍一下本次的赛题与解决方案。

实测(8g内存,CPU:i5-8500,耗时132秒):

format,png

赛题介绍

CCF大数据与计算智能大赛(CCF Big Data & Computing Intelligence Contest,简称CCF BDCI)是由中国计算机学会大数据专家委员会于2013年创办的国际化智能算法、创新应用和大数据系统大型挑战赛事,是全球大数据与人工智能领域最具影响力的活动之一。

深瞳是一家大数据与行业智能应用解决方案运营商,为各行业客户提供数据分析与策略咨询服务,帮助行业客户进行数据资产化,为客户提供数据处理、建模分析服务。汽车行业是深瞳所重点服务的核心行业之一,长期服务于国内外知名汽车品牌客户。

近几年来,国内汽车市场由增量市场逐步进入存量市场阶段,2018年整体市场销量首次同比下降。在市场整体趋势逐步改变的环境下,消费者购车决策的过程也正在从线下向线上转移,我们希望能在销量数据自身趋势规律的基础上,找到消费者在互联网上的行为数据与销量之间的相关性,为汽车行业带来更准确有效的销量趋势预测。

https://www.datafountain.cn/competitions/352

备注:(原始数据下载地址,github已经有数据,可以不用下载)

链接:https://pan.baidu.com/s/1Zs5d9CWJuUoX7AmIKAoYmg

提取码:frqb

赛题需要参赛队伍根据给出的60款车型在22个细分市场(省份)的销量连续24个月(从2016年1月至2018年12月)的销量数据,建立销量预测模型;基于该模型预测同一款车型和相同细分市场在接下来一个季度连续4个月份的销量;除销量数据外,还提供同时期的用户互联网行为统计数据,包括:各细分市场每个车型名称的互联网搜索量数据;主流汽车垂直媒体用户活跃数据等。参赛队伍可同时使用这些非销量数据用于建模。

简单来说,本次赛题给出2016.1~2017.12的省份,车型,车身,销量,搜索量,评论量,评价量等,要求预测2018.1~2018.4的销量。

评价指标是归一化均方根误差的均值

 

format,png

数据分析

format,png

通过初步分析数据可以发现省份-车型所组成的类别特别多,并且对于同一车型,波动也挺大的,销量的范围较大等。

顺便说一下,我们经过多次尝试发现评论量与评价量几乎起不到作用,所以这两个特征我们并没有使用,如果你有办法处理这两个特征,欢迎评论讨论。

数据预处理

为了使数据分布更加符合高斯分布,对数据做了log1p的预处理。

format,png

算法整体方案

我们在初赛的时候尝试了xgb,lgb,cat,prophet,rule,lstm,cnn,并且初赛的最终结果是由lgb,prophet,rule与lstm融合而来。但是后来我们发现就算只用lgb和rule也能得到差不多的分数,时序模型与深度学习模型在这道小数据时序问题上并不适用,又考虑到工业环境中模型越少,越简单越好,因此复赛时,我们只使用了差异性足够大的lgb与rule两个模型。

format,png

抑制误差传递

直接使用鱼佬的框架能带来相当不错的效果,但是可以发现,越往后的月份误差的累计会越来越严重,因此在模型中,我们只拼接了1月份预测出来的值。

format,png

特征分析

在构造特征之前,对特征一些分析。

画出省份销量的热力图可以发现销量与省份的发达程度,临海程度是成一定正相关的,这与我们的直觉相符。因此各省份销量的差异明显,建模时必须对省份进行区别。

对于同一个月份,2016年与2017年的销量类似,即销量有周期性变化的特性。而且对于宏观变化而言,2017年的销量较2016年销量呈现下降趋势。

春节月的销量较低,春节后逐渐上升,年末达到最高。

format,png

特征工程

这一块是本次工作的重头戏,也是我们花费了最多时间的地方,最终,我们的模型特征由以下几部分组成。

考虑到春节等节假日,我们构造了与节假日相关的一些特征。

考虑到每个月的天数,工作日不同,我们构造了相关的特征。

由于是个时序问题,因此历史销量与销量的变化趋势是我们应该考虑的重点。针对此,我们在多个不同粒度下构造了历史平移特征,差分特征,同比/环比特征与趋势特征。

不过经过我们的尝试,同比的效果不怎么好。

更加详细的内容请看代码。

format,png

特征选择

我们所构造的特征实际上不止这些,不过由于信息重叠与毒特等原因,我们使用了一些方法对特征进行筛选。

我们使用了树模型的特征重要性排序,均值判断与SHAP进行特征筛选。

特征重要性排序:根据树模型输出的特征重要性进行筛选,去掉重要性低的特征。

均值判断:由于本道赛题中,1234月具有相对固定的均值比例与均值大小,因此可以通过添加/删除特征后1234月的平均均值来大概判断特征的好坏。

SHAP:利用了组合博弈论的知识,防止因为信息重叠而导致的特征重要度不公平的情况。

format,png

初赛LGB的构建流程

初赛时lgb做的一些操作与对应的分数如下

format,png

统计规则

规则部分的框架是使用历史同期销量,历史最近销量与指数平滑进行加权得到一个初步预测销量,然后用上下半年的销量变化趋势与平滑构造年度销量变化趋势,最后两者相乘即可得到规则的预测结果。

format,png format,png format,png format,png

由此可见,规则带有相当多的超参数。据我了解不少团队复赛时规则血崩,这也是时序题里面规则的泛性问题。我们初赛时规则可以达到0.633,是一个绝对的主力,复赛提交次数太少,最终规则也只有0.598,只能以lgb为主,规则为辅。

模型融合

因为只有两个模型,所以模型融合基本上不用考虑太多,直接进行简单的算数/几何加权即可,由于几何加权可以使预测值偏小,而2018年的销量理应是较之前低的,所以我们使用了几何加权进行融合。

另外1234月分开进行融合,可以带来微小的提升。

format,png

总结

这里特别提一下模型的数量与运行时间的优点,据我们决赛观察,大多数队伍都有超过2个的模型,而且有的队伍需要超过一个小时的运行时间。从工业角度来讲,我们的方案应该是更加适用的。

format,png

不过还有很多可以提升的地方,比如评论,评价的使用方式,规则中超参数过多问题,从某个时间点开始的某项政策对后续的影响等。如果赛题能提供更多的特征与数据,相信可做的地方还有相当多。

写在最后

以上就是本次赛题我们团队的解决方案了。

乘用车销量预测这道赛题我觉得是2019 CCF BDCI的13道赛题里相对简单的一道,我们所使用的方案也很简单,没有涉及到复杂的方法。在13道赛题的冠军的综合评审中,我们也没有能够表现得很好,未来还有很长的路要走,与你共勉。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值