开源!2019CCF BDCI 乘用车销量预测 冠军方案

作者:楼观白楼

出处:https://zhuanlan.zhihu.com/p/98926322

写在前面

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

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

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

团队介绍

秋名山车神

梁晨 重庆邮电大学 研一

陈暄群 华南理工大学 研二

梁汐然 北京大学 大四

徐巍 重庆邮电大学 研二

王猛旗 重庆邮电大学 研一

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第1张图片

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

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

感谢开源

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

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

代码

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

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

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

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第2张图片

赛题介绍

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的销量。

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第3张图片

数据分析

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第4张图片

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

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

数据预处理

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第5张图片

算法整体方案

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第6张图片

抑制误差传递

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第7张图片

特征分析

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

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

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

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第8张图片

特征工程

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

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

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

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

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

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第9张图片

特征选择

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

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

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

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

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第10张图片

初赛LGB的构建流程

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第11张图片

统计规则

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第12张图片 开源!2019CCF BDCI 乘用车销量预测 冠军方案_第13张图片 开源!2019CCF BDCI 乘用车销量预测 冠军方案_第14张图片 开源!2019CCF BDCI 乘用车销量预测 冠军方案_第15张图片

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

模型融合

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

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第16张图片

总结

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

开源!2019CCF BDCI 乘用车销量预测 冠军方案_第17张图片

备注:公众号菜单包含了整理了一本AI小抄非常适合在通勤路上用学习

往期精彩回顾

那些年做的学术公益-你不是一个人在战斗适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(第一部分)备注:加入本站微信群或者qq群,请回复“加群”加入知识星球(4500+用户,ID:92416895),请回复“知识星球”

喜欢文章,点个在看

你可能感兴趣的:(开源!2019CCF BDCI 乘用车销量预测 冠军方案)