2019-CCF-BDCI-乘用车细分市场销量预测-top3赛后分享

诗人藏夜里团队
写在前面,2019BDCI已经落幕数月,之前队友已做过分享,但我想这毕竟是我竞赛生涯为数不多的高光时刻,并且在今年BDCI竞赛中倾注了大量心血(比赛周期持续了三个月),再者很久没有写过博客了。好事多磨,从一开始担心进不了top到比赛中期霸榜之后对比赛的倦怠,再到复赛的跌跌撞撞、一路坎坷,没想到最终有幸取得top3,实属不易。感谢队友的永不言弃,也感谢比赛群中各位大佬的技术分享,也感谢曾经奋力拼搏的自己,感谢!本文将以答辩PPT为主线展开讲解。


团队简介

本团队5位成员分别来自湖南大学、西南交通大学、重庆邮电大学。正所谓,兄弟同心,其利断金;实践出真知,本团队的成绩归功于模型好而不同,并且将模型融合发挥得淋漓尽致。


赛题分析

首先我们先来看下赛题描述,更多详情请见比赛官网
赛题简介
本赛题提供了82个车型在22个省份的2016年1月到2017年12月每月的销量、搜索量、评论量等数据,让我们预测该82个车型在22个省份2018年1月至2018年4月每月的销量;评价指标采用的是NRMSE。


接下来我们对训练集中全部数据的销量和搜索量进行了可视化分析,如下图所示:
数据分析
我们对销量和搜索量做了一个简单的可视化,红色表示销量,蓝色表示搜索量。分割线以前的数据是初赛60款车型,之后是复赛新增22款车型。很明显可以从上图看出左边车型的销量普遍大于右边的车型销量,而左边的搜索量远小于右边的搜索量。因此我们采用初赛车型和复赛新增车型单独建模的方式。从上图可以看到,不论是销量还是搜索量,都存在部分极端值影响,因此我们在提取特征之前对销量和搜索量进行了log平滑。


通常来说同一车型在不同省份销量是不一样的,但趋势应大致保持一致,于是我们对不同车型在每个省份的销量进行了可视化,并放在同一图中进行对比,如下图所示:
数据可视化分析
我们对每个车型在每个省份的销量按照时间先后顺序作了一个可视化,随机选取了其中两个不同车型进行展示,如上图所示。我们发现相同车型的销量在不同省份分布趋同,并且具有一定的周期性,因此我们使用神经网络分车型建模


算法设计

接下来介绍我们团队的整体方案,如下图所示:
整体方案
我们团队构建了多个机器学习模型和深度学习模型,最后分月线性加权融合得到最终结果。


接下来介绍我们团队的特征工程,如下图所示:
特征工程
特征工程
该题目是一个典型的时间序列问题,因此特征工程主要从时间相关特征入手。蓝色标注特征是比较重要的特征,简要分析如下:

  • 销量环比:反映当前与历史前n个月的销量变化幅度
  • 销量同比:反映当前与历史同期的销量变化幅度
  • 历史销量:反映历史前n月销量大小
  • 省份、车型、月份编码特征:可以很好地对每个样本进行表征
  • 差分特征:反应过去到现在的销量变化多少

该题目预测难点在于一月和二月,因为2016年和2018年的春节在二月,而2017年春节在一月。因此对春节所在月份进行了标记,还有当前月距离最近的春节间隔了几个月。


特征工程完成之后接下来就是模型设计,本题有很多种建模方式,我们共采用了三种建模方式:

  1. 逐月预测-预测结果当标签使用
  2. 逐月预测-打标分别间隔1、2、3、4个月
  3. 神经网络-分车型建模

第一种方案参考了鱼佬的建模方法,第二种方式在第一种的基础上有所改进,避免了误差传递,第三种方式对3、4月预测效果好。

建模方式-1

这种方式采用逐月预测的方式,即先预测出2018年1月的销量,然后把它加入到训练集再预测2018年2月的销量,以此类推继续预测后续的3月和4月的销量。这种方式存在一个缺陷就是会有误差传递
建模方式-2
我们团队提出了另一种建模方式-2,该方法与方式-1类似,不同在于打标间隔月数。比如要预测1月的销量,则滑窗时用下一个月的销量对其进行打标;预测二月时,打标的时候要再间隔1个月;预测三月时,打标的时候要再间隔2个月;预测四月时,打标的时候要再间隔3个月。这种建模方式就有效避免了误差传递。


机器学习模型
以上两种建模方式用于机器学习模型,在此基础上我们还对做了数据预处理、标签平滑等操作。为了得到多个异构模型,我们还对LightGBM进行了参数扰动,作用在不同的特征子集、建模方式、特征窗口大小、训练集历史窗口大小,以增大模型之间的差异。


接下来介绍建模方式-3,使用神经网络分车型建模预测,下图是数据构造方式示意图:
一月
这是预测一月构造数据的示意图;其大致思想就是利用前n个月的销量预测当月销量,n为序列长度。
二月
这是预测二月的示意图,方式跟一月一样,唯一不同的是打标的时候间隔了1个月。
三月
同理,这是预测三月的示意图,打标的时候间隔了2个月。
四月
这是预测四月的示意图,打标的时候间隔了3个月。


数据构造完成之后,接下来介绍我们团队使用的深度学习模型,其网络结构和一些小技巧如下图所示:
深度学习模型
大部分团队都没有用到神经网络,或者浅尝辄止;因为这个题目数据量较小,容易产生过拟合;但是我们一直坚持做深度学习,因为当前只给了部分数据,当数据量达到一定规模的时候,深度学习的价值更能体现出来,在大数据量的情况下,深度学习往往比机器学习效果更优。好在风雨之后终于见到彩虹。这是我们团队搭建的神经网络模型,第一种是比较常见的一种结构,我们在此基础上增加了一端销量差序列输入,让模型可以学习到高层销量差分特征。左下角是一些训练模型的技巧。


神经网络具有超强的拟合能力,加上这题数据量较小,数据分布有些特殊,因此需要在防止模型过拟合上下点功夫。该题是一个回归问题并且评价指标使用的RMSE,预测结果对模型结构以及网络权重极其敏感,我们除了使用Dropout和EarlyStopping外,还尝试了SWA1 这种模型优化方法。
SWA
SWA是一种基于权重空间进行加权的思想。左边这幅图中的W1,W2和W3 代表了3个独立训练的网络,Wswa是它们的平均;右图中Wswa与Wsgd相比,Wswa 在测试集上产生了更优越的性能。


最后是模型融合方案,示意图如下所示:
模型融合
不同模型对不同月份预测效果不一样,LSTM对3、4月预测更为精准,融合收益特别高,初赛时LGB2+LSTMs能到0.63+。最终模型融合采用的分月融合策略。


方案总结

方案总结

  • 第一、我们团队从实际业务场景出发,构造出多样、可解释强的特征
  • 第二、采用深度学习方法分车型建模,有效地增加模型差异度
  • 第三、使用神经网络模型优化方法SWA,减小模型误差

代码开源

https://github.com/rogeroyer/2019-CCF-BDCI-Car-Sales-Forecast

参考文献

[1] Izmailov P, Podoprikhin D, Garipov T, et al. Averaging weights leads to wider optima and better generalization[C]. Conference on Uncertainty in Artificial Intelligence, 2018.


  1. 1 ↩︎

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值