Part.01丨赛题背景

组织方:微软加速器

上海站真实数据来源:百威英博(命题,并提供脱敏的业务数据

提出三个问题:

1.库存需求预测

2.销售数量预测

3.经销商违规行为检测

数据大致的情况——原始数据中,大致包含了百威全国400多家门店的数据,商品的种类800多个,一整年历史销售数据,精确到每日,数据400多万行。需要预测未来一个月内未来商品的销量。

Part.02丨探索性数据分析

先进行数据探索,理解一下数据的分布,和大致的特征。后面怎么样去做你的模型。数值分布,统计检验。不可能上来就跑个模型,看效果。

常用方法:数值分布,统计检验,左边直方图,即数据的分布情况,皮尔森相关性检验(Pearson correlation coefficient),就是特征之间的相关度是什么样的。

观察缺失值的情况。因为百威提供的数据质量很高,所以不需要考虑填充缺失值。(下图白色Unnamed:3为缺失值)

预处理方法

方法一:历史数据用折线图等形式画出来,从历史中寻找商品和门店的行为规律。有的有规律性,有的没有。如下图:

所以各个商品之间行为的模式(pattern)不一样。

这样的分析有什么好处呢?通过分析发现,有的商品数据点很稀少。需要分别建立模型,有些不需要建立模型。历史上出现一两次的情况,可以历史平均和预测为零来处理。不用极端数据影响整体的效果。

方法二:正则化。基于统计规则,历史上某些值的平均值,比他两三个标准差偏差还要多的话,会认为异常值,我们会把这些值缩小一下。

方法三:基于模型预测,先构建一个简单的模型,训练后,跑一下模型,观察误差特别大的点,也有可能是离群值或者异常值。这样就可以针对他们做一些处理。

方法四:对数据进行log的预处理。

Log预处理是时间序列和线性模型中经常会遇到。很多情况下,会要求你的时间序列的值是稳定的,有时也会对预测值做Log处理,有时也会做差分处理。还有一些线性模型对残差,大多数假设是一个正态分布的残差。如果数值分布的偏度很高,也会有问题,会用log来做预处理。

另:日期对齐也是时间序列预测问题中常见的技术。比如中国春节在一月或者二月,需要考虑历史数据上春节的月份和今年春节的时间点是不是对的上。如果对不上是预处理,会提高预测的精度。还有一些业务相关的逻辑。比如销量为零,售价不为零之类。也需要做处理。

以上是数据探索的过程。

Part.03丨特征工程的构建

加入地理位置,门店当地的经济指数,当时气温、赛事、节假日、促销活动等。

聚类方法:用无监督的方法,对原始数据进行聚类,把想象的门店或者产品放在一起。分别来做子模型,或者把标签当做特征加进去。

基础特征方面,百威提供原始数据集的特征,在此基础上做了一些各维度的统计聚合,需要各维度聚合——时间、门店、商品。

比如,日期衍生(是否是节假日,本周的节假日有几天,距离下一个工作日有几天)、商品、门店属性、各类高级计算。新商品从第一天开始售卖,累计的销售天数。

高级的特征处理方式:

GBDT生成特征

2014年Facebook在论文中提出的方法——GBDT生成特征,论文认为决策树的模型可以自动做一些特征的组合和转换。

说白了就是把Input放进去之后,看每一棵树,落在每一个叶子的节点上,以此做一个新的特征,原始论文中,把特征放在一个逻辑回归的模型中去做,当然你也可以把输出的特征和原始的特征加在一起,放在XGBoost、或者FM(Factorization Machine 因子分解机,又称分解机器,旨在解决大规模稀疏数据下的特征组合问题)。

Embedding的方法

图片是Embedding的方法,因为深度学习的应用比较火的结果,大家都有兴趣把深度学习的模型,应用到商业分析里面。这个借鉴了word2vec的方法,让相近的门店与产品,本来是稀疏的特征,希望通过一系列的Embedding转换之后,转换到稠密的向量空间中,一些相近的商品门店,在向量空间中距离比较近,这样起到了特征转换。

在比赛中,我们用Keras做了Embedding实现,把商品、日期、门店做了Embedding,套几个全连接的层,加一些东西,一直到输出到结果。

t-SNE降维处理

画在二维的图标上面:

左边月份的聚类,7、8、9月热,距离在图上近,天气比较冷的月份在图中距离差的比较远。

右边t-SNE图是所有门店的图,因为得到的数据门店都用的ID(全数字)来表示,所以只能推测是行为模式比较像、或者地理位置比较近的门店是脱敏数据,所以没有办法检验。

Part.04:模型调优

基线: 历史平均(一般来说对复杂的,实际数据的预测问题,对历史销量平均做预测值)

时间序列: SARIMAX, tbats, generalized additive model(广义加性模型)自回归/移动平均是时间序列数据处理的基本模型。

树模型: Random Forest, XGBoost, LightGBM。树模型是数据科学比赛常用的,XGBoost、随机森林、因为是微软的比赛,我们尝试了微软的LightGBM看看实现效果如何。还尝试了深度学习的模型embedding、wide and deep learning, LSTM等模型。

深度学习:embedding, wide and deep,LSTM在特征工程之后,我们会做一些模型的选择。

MAPE(MeanAbsolute PercentageError)是衡量模型好坏的一种方式。

比赛中MAPE: 0.744,这个数值为后续服务,模型调优的基线。

时间序列

时间预测模型的示意图:GAM库,时间预测模型比较简单、预测值稳定,可解释性强,黑点是真实值,深蓝色预测值,淡蓝色是置信区间。因为有很多点捕捉不到,所以误差会大。

时间序列的可解释性

趋势:7、8、9月天气热,啤酒销量好;节假日、周末周期性强。

树模型

优点:

对于离群值的鲁棒性较好

数据分布要求低(不需要做预测力,神经网络一般会要求做归一化,让数据的分布一致一些,否则模型效果会差。)

可解释性强(每个节点都会告诉你,分裂的规则)

可以用于特征选择(训练完会告诉你权重,可以依次来选择一些特征,把精简之后的特征喂给其他的模型,比如线性回归等简单的模型)

这次比赛,主要用XGBoost、LightGBM库对比。

XGBoost——Train time: 487.68 seconds,MAPE: 0.251

LightGBM(虽然需要指定超参数、但是效果很好)——Train time: 19.19 seconds,MAPE: 0.256

深度学习

我们把预测值销量归一化,Embedding网络示意图,计算资源需求较大。超参数调优、网络结构。

Embedding size

Dropout

MAPE: 0.654

赛题中400万的数据,跑起来非常慢,因为比赛中没有使用GPU所以训练的时间还是比较久的。

另外一点,Embedding把原始的特征输入,虽然特征工程少一些,但网络的超参数需要调整,而且很多然而没有理论依据,说白了就是尝试,一直尝试哪个会比较好,MAPE: 0.654比平均值稍微好一点。比起XGBoost的基准线还是差了很多。

把线性模型的东西加进来,可以两个模型一起训练,线性模型主要做记忆功能,历史上出现的模式可以通过线性模型,记忆下来。

Deep Models提升泛化能力。下图是用TensorFlow来实现wide and deep models。

左边是deep model的实现,右边是线性模型(wide层)。

图中为原始论文中的特征的构建方式,deep models那层要求输入是密集型的,稀疏是不能直接做输入的,所以要做转换,有的用Embedding等来做转换。

模型选择完后,需要进行模型的训练和调优,其中重要的一步是交叉验证,在时间序列中,交叉验证有一个重点——构建与真实场景一致的切分方式。在时间序列中用一个连续的一段时间去预测紧接着的时间一个时间切分,切分方式与真实场景一致,随机切分不是在真实场景中的切分方式。会影响效果。

超参数的调整

1.启发式调优

用经验。比较简单的是用启发式的调优,先固定一个比较大的learning rate去调树的数量、树的深度、叶子节点分页需要的条件之类的。

2.网格搜索

把所有想要尝试的参数写下来。网格搜索自动把所有的组合尝试一遍,帮你找到最优的组合,把最优的结果返回给你。

3.贝叶斯优化

把超参数搜索的过程看成高斯过程,库会自动尝试不同参数,然后寻找下一个最可能出现比较低的loss的尝试,搜索空间的计算量比网格搜索小很多。

模型融合

模型融合的方法来做效果提升。做完这个超参数调整之后,一般来说,最后用模型融合的方法来做效果提升,首先保证模型具有一定的差异性,可以选择不同随机数种子,生成不同的预测结果,最后再把各个模型融合起来。

比较常见的模型融合的方法是Blending和Stacking。是现在有很多库已经实现了,调用非常方便。Stacking就是把各个模型的预测值预测出来,把预测值作为特征输入下一层模型中,下一层自动选择最好的融合参数,有的模型权重高,有的权重低。把最后融合好的预测值给输出。

误差分析

预测结束后,会对模型做最终的调优。主要看模型会在哪些点上产生误差。如何通过各种方法产生大的误差,误差最大的点要进行细致深入的分析,为什么会出现这样的误差。日后我们通过各种方法去解决大误差。一个新产品,第一次在要预测的月份售卖。卖出了几千份。用历史数据很难预测准确。所以会产生误差。

这种情况可以建立子模型专门去新品销售数量的预测。融合模型:用了三个XGBoost、LightGBM、Random Forest,其实也可以用时间序列和神经网络,但是主要是因为计算资源有限,所以没有观察最终融合的效果。最后得到的MAPE: 0.236。比起基准线,好了很多。

以上内容为观远数据技术合伙人周远技术公开课分享笔记,未能与周远确认所有细节,仅供参考。该赛事为微软大中华区智能零售(Smart Retail)解决方案新创企业黑客松上海站。(完)

亲爱的数据

出品:谭婧

审稿:张卓婧 、姜瑛凯

美编:陈泓宇

预测不了世界杯比分,就预测百威啤酒销量,送数据竞赛冠军笔记相关推荐

  1. 如何预测百威啤酒销量?数据竞赛冠军笔记分享 思路

    转载: http://dy.163.com/v2/article/detail/DHALCA3N0511VFT2.html 赛题背景 组织方:微软加速器 真实数据来源:几家顶级快消品牌 上海站:百威英 ...

  2. 【12月17日更新决赛预测】用二元泊松模型预测2022年世界杯淘汰赛结果

    用二元泊松模型预测2022年世界杯淘汰赛结果 网上有很多文章用双泊松(Double Poisson)模型来预测世界杯比赛结果.但是双泊松模型有一个严重的缺陷,那就是它假设比赛中两队的比分是条件独立的. ...

  3. ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍

    ML之预测:玩转2018世界杯-采用机器学习预测小组赛.十六比赛.四决赛.半决赛.决赛以及世界杯总冠军的各个队伍 导读       机器学习预测.玩转2018世界杯-采用机器学习预测小组赛.十六比赛. ...

  4. 预测2018年世界杯决赛_2018年5个电子商务预测

    预测2018年世界杯决赛 2018 is with us already and it's important in the current competitive market that eComm ...

  5. 以数字化视角看世界杯,我预测荷兰夺冠

    编者按:2022世界杯隆重开幕!各路英豪齐聚卡塔尔!让我们从一个ITer的角度,用数字化的视角,看看谁能最后夺冠! 本文已经得到原作者张戈授权,在此表示感谢! 真不是嘚瑟. 我是有40年球龄伪球迷⚽️ ...

  6. AI模型神预测谁是卡塔尔世界杯冠军

    推荐教程:AI模型神预测谁是冠军 2022年卡塔尔世界杯 猜猜他们是谁?   谁是最后的冠军? 2022年FIFA世界杯已经拉开帷幕,全世界的球迷都热切地想要知道:谁将获得那梦寐以求的 大力神杯? 2 ...

  7. 2018世界杯赛程PHP源码,PHP-ML机器学习预测2018俄罗斯世界杯比赛结果

    前言: 根据2014年巴西世界杯的小组赛比赛结果和赔率数据简单预测2018世界杯比赛结果,比赛的赔率我们可以事先知道,所以可以使用赔率作为预测数据 技术: PHP ML库 贝叶斯分类器 样本数据:20 ...

  8. 【Python项目】用Python采集球员信息,成功预测到了世界杯球赛胜负?

    前言 halo,包子们上午好 世界杯都买了吧,球赛反着买,别墅靠大海 用Python采集球员信息,成功预测到了世界杯球赛胜负? 废话不多说,直接开整 相关文件 关注小编,私信小编领取哟! 当然别忘了一 ...

  9. 使用机器学习预测2018年世界杯足球赛

    2018年世界杯正进行的如火如荼,日本.塞内加尔相继爆冷战胜了强大的对手,东道主俄罗斯依旧保持开挂状态,碾压拥有萨拉赫的埃及队,豪取两连胜.在足球的世界里,没有强者恒强的定律,这或许也是足球的魅力所在 ...

最新文章

  1. teamviewer 可用设备上限_2020推荐香河气压罐专业供水设备
  2. mysql text 不可指定默认值
  3. php拆分数字字符串方法
  4. jsf标签_多个动态包含一个JSF标签
  5. 2017.10.9 找相同字符 失败总结
  6. [Angularjs] 第一步开始一个项目
  7. 你向 MySQL 插入 100万 条数据用了多久?
  8. NPAPI中返回一个字串的正确做法
  9. DELL VENUE 11 7130解锁功耗墙总结
  10. carry函数在C语言中用法,动词carry用法小归纳
  11. swiper去除左右滑动设置(去除左右滑动切换)
  12. VirtualBox虚拟机全屏显示
  13. namecheap 邮件服务器,NameCheap域名邮局/企业邮局开通与初始设置
  14. windows10获取超级管理员权限
  15. ios-AddressBook框架
  16. 商务个人邮箱、VIP邮箱哪个最好用?外贸安全邮箱又怎么选?
  17. 敏捷开发松结对编程系列:L型代码结构案例StatusFiltersDropdownList(下)
  18. MEDICI仿真NMOS器件晶体管语法笔记
  19. 【转】Robot Framework作者建议如何选择自动化测试框架
  20. 用定制标签库和配置文件实现对JSP页面元素的访问控制

热门文章

  1. android iphone css,css能判断手机是安卓还是ios吗?
  2. 电脑端压缩工具哪个好用
  3. 浅析-微服务3搭建框架
  4. PHP 日本商标查询,文字商标查询是否侵权
  5. 茂名天源石化等一批项目开工 广东5大炼化基地发展重点确定
  6. Flume 数据采集组件
  7. 【报告分享】2021懂车帝经销商直播价值白皮书-懂车帝x巨量算数(附下载)
  8. 五年级上册分数计算机,分数计算题 五年级上册分数加减法计算题(100道)
  9. 【C语言小题】分数求和
  10. 【vue2】中 谷歌 Chrome 实现自定义页眉页脚打印