https://www.leiphone.com/news/201803/fPnpTdrkvUHf7uAj.html

雷锋网 AI 研习社消息,Kaggle 上 Corporación Favorita 主办的商品销量预测比赛于两个月前落下帷幕,此次比赛的奖金池共计三万美元,吸引到 1675 支队伍参赛。

近日,Private Leaderboard 上的亚军 SoLucky 团队在 arxiv 上发表了一篇论文,阐述了其获胜方案,雷锋网 AI 研习社对论文内容进行编译整理如下:

作者参加了在 Kaggle 上举办的 Corporacion Favorita Grocery Sales Forecasting 销量预测比赛,并取得了第二名的成绩。

这场比赛是基于时间序列数据的基础机器学习问题,论文中阐明了总体分析和解决方案。

作者的方法基于空洞卷积神经网络(dilated convolutional neural network)并进行了改善,来对时间序列进行预测。利用这种技术,在 n 个示例批次中不断迭代,能够快速和准确地对大量时间序列数据进行处理。

比赛背景

Kaggle 等竞赛平台举办的时间序列比赛目前已经成为机器学习流行赛事,这些竞赛有助于推进机器学习顶尖技术的发展,将其用于实际领域。

时间序列是不太为人所知的分析领域。由于数据存在着季节性、动态性和周期性的特征,数据序列是非线性的,并存在噪声,因此很难准确进行识别和预测。

神经网络在近几年的热度急剧增长,这使人们对预测有了截然不同的理解。硬件的进步使得我们能够在一定时间内利用深度神经网络解决问题。目前,深度学习是一个可行的解决方案,利用这项技术,近年来研究者们在基准数据集的分类精度上打破了很多记录。

作者在本文中讨论了解决 Corporacion Favorita Grocery Sales Forecasting 商品销量预测问题的方法,描述并分析了将卷积神经网络应用于时间序列数据。

数据集描述

数据被分为两部分——训练数据和测试数据。训练数据用于模型训练,测试数据被分为几部分,分别用于在公共和私人的排行榜上进行模型的准确性评估。这场比赛中,Corporacion Favorita 提供 125,497,040 个训练观察值和 3370,464 个测试观察值。

数据集由按日销售额、商店编号、商品编号和促销信息组成。此外,主办方还提供交易信息、石油价格、商店信息和假期。

该竞赛使用 NWRMSLE(标准化加权均方根对数误差)作为评价指标。

问题定义

实体店中的采购和销售需要保持平衡。稍微将销售预测过量,店里就会积存许多货物,要是积压了不易储存的商品会更加糟糕。而要是将销量预测过低,设想一下,当顾客把钱都付了,却发现没货,那这家店的口碑将会急剧下降。

此外,随着零售商增加新的门店,那里的顾客又可能存在独特的需求,比如他们想要新的产品,口味随季节而变化,那问题将变得更加复杂,产品市场如何真的很难预知。

在这次比赛中,主办方希望参赛者建立一个更准确的预测产品销量的模型。作者的目标是建立一个可能应用于实际,并具有最高准确度的销量预测模型。

主要存在如下三种挑战:

  • 噪声数据:尽管组织者尽力准备并提供了大量数据,但其中存在有噪声标签的数据。有些数据(石油价格、假期、交易)与目标没有关联,在之后根本不会使用。

  • 不可见数据:有这样一种情况,在测试集中出现了不可见的数据。由于存在这类不可见的商店/商品数据,模型的行为将不可预测。原因如下:训练集中不包括销售额为 0 的记录,但是测试集包含所有的商店/商品组合(不管商店此前是否销售该商品)。最后,作者假设这些不可见的组合只是零销售额数据,用 0 来进行替换。

  • 准确度:因为这个实验是严格按照比赛规则进行的,作者尝试了所有可能用来提高预测准确度的方法。

可选方案

下面的这些架构基于神经网络,但在这个比赛中,最终结果不如作者最后使用的 WaveNet 模型,但他们相信这种架构可以提供一种完全不同的方法来解决问题,产生出一些有趣的洞见,甚至在其他比赛中超越 WaveNet。

循环神经网络

循环神经网络(RNN)可以将当前节点的输出作为下一个节点的输入,可以如下描述:相较于其他深度学习算法,RNN 已经被广泛用于预测时间序列问题,并被定位为预测此类数据数组问题的最先进的方法。

这些网络的效率可以通过重复的连接来解释,这些连接允许网络访问以前的时间序列值的整个历史。

可以将 RNN 看成同一个网络的多个副本,每个副本会传递消息给后续副本。由于自身属性,RNN 与序列和列表密切相关。在过去的几年中,将 RNN 应用于时间序列预测问题上已经取得了惊人的成果。

其中具有象征意义的是 LSTMs,这是一种非常特殊的 RNN,在许多任务上,它比标准 RNN 的表现要好得多。

GRU 架构也可以作为解决当前问题的方法,它们与 LSTMs 相似,结构更简。

作者的方法

基于 WaveNet CNN 网络并做了一些额外的扩展和修改。

近年来,深度学习技术的发展促使研究人员探索出各种时间序列预测方法,其中就有 WaveNet。WaveNet 是一个生成模型,这意味着模型可以针对一些条件输入生成实值数据(real-valued data)序列。

该架构背后的核心思想是空洞因果卷积(dilated causal convolutions)。由于没有循环连接和跳跃步骤,空洞卷积训练起来比 RNN 要快。

目前,因果卷积存在的问题之一是:为了增大感受野,需要用到多层卷积或者或很多大滤波器。

空洞卷积不存在这些问题,它使用上采样滤波器代替特征映射(feature maps)。换句话说,空洞卷积允许只增加核的视野在层间维持特征映射的大小,另外,可以用更少的参数捕获输入的全局视图。

为了能够产生 16 天的预测值,作者对模型进行了修改。因为训练使用的是下一步预测值,错误会持续累积。为了解决这个问题,他们使用 sequence to sequence 方法,编码器和解码器不会共享参数。解码器将会在产生长序列时处理累积的噪声。这里还用了亚当优化器更新网络权重。数据是通过小批次产生的,随机采样 128 个序列。

由于整个数据集大约包含 17 万序列 x 365 天,所以在每次训练迭代中都能向模型输入不同的数据。考虑到这一点,该模型能很好地处理过拟合问题。

在训练过程中,学习率衰减系数设置为 0.0005。作者将过去 16 天的训练数据做成一个集合,并将其用于验证。销售量的变化和促销信息可以用来生成的季度和年度模型。

在最后若干个上千或上万的的小批次中,模型会稍微出现过拟合,所以结果会有一点波动。

为了解决过拟合问题,平滑短期波动,着重于长期的动态性和周期性趋势,作者用到移动平均法(Moving average)。在 5000 次小批量迭代之后,模型开始预测,之后每过 2000 次迭代产生预测。在特定的迭代之后,如下图所示,5 个模型的平均性能优于单个模型。为了将模型准确性进一步提高,最终,作者使用指数移动平均法(exponential moving average),利用局部交叉验证(local cross-validation)计算出平滑因子(smooth factor)。

该模型有很好的捕获时间序列数据规律的能力,因此很多特性都没有被使用。其中一些是单位产品销售额和促销信息。

总结

企业面临一个明显的问题——市场是不可预测的。任何销售预测,无论你的分析条件多么严谨,都可能是完全错误的。如果市场状况保持相对不变,一种可靠的预测方法就是使用历史数据。作者的经验表明,卷积神经网络非常善于处理历史数据,捕捉季节性的趋势、周期和无规律的趋势,如下图所示。

他们描述了一种使用 CNN WaveNet 的方法,这是一个 sequence to sequence 架构,在销售预测方面,它是解决时间序列预测问题的有效方法(如下图)。

在未来,需要对层数更多的 CNN 进行更深入的研究,以完成更复杂的任务。为了训练更深的网络,需要大量的数据。在未来,对不同类型和领域的数据进行分析可能是另一个有趣的方向。此外,将不同技术融合起来也能获得相当的准确性。

比赛地址:https://www.kaggle.com/c/favorita-grocery-sales-forecasting

论文地址:https://arxiv.org/pdf/1803.04037.pdf

雷锋网(公众号:雷锋网) AI 研习社编译整理。

雷锋网版权文章,未经授权禁止转载。详情见转载须知

Kaggle 商品销量预测季军方案出炉,应对时间序列问题有何妙招的更多相关文章

  1. 2017 Gartner数据科学魔力象限出炉,16位上榜公司花落谁家?

    https://www.leiphone.com/news/201703/iZGuGfnER4Sv2zRe.html 2017年Gartner数据科学平台(在2016年被称作“高级分析平台”)的魔力象 ...

  2. Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测

    Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测 2017年12月13日 17:39:11 机器之心V 阅读数:5931   近日,Artur Suilin 等人发布了 Kaggl ...

  3. 【旧文章搬运】PE感染逆向之修复(Serverx.exe专杀工具出炉手记)

    原文发表于百度空间,2008-10-4看雪论坛发表地址:https://bbs.pediy.com/thread-73948.htm================================== ...

  4. 用Python爬取分析【某东618】畅销商品销量数据,带你看看大家都喜欢买什么!

    618购物节,辰哥准备分析一波购物节大家都喜欢买什么?本文以某东为例,Python爬取618活动的畅销商品数据,并进行数据清洗,最后以可视化的方式从不同角度去了解畅销商品中,名列前茅的商品是哪些?销售 ...

  5. 微信小程序开发视频教程新鲜出炉

    微信小程序开发公测了,可是对于新手来说,不同的框架不同的开发机制,如何快速适应呢?微信小程序开发视频教程新鲜出炉了,从零开始一步一步搭建微信小程序,每个章节都会涉及到不同的知识点,等教程学习完你不但掌 ...

  6. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.

    刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.

  7. 23套新鲜出炉的网站和手机界面 PSD 素材

    Web 用户界面,移动用户界面和线框套件对设计师很有用,因为这些套件让他们使用快速和有效的方式复制用户界面.这些类型的工具包提供了一个基本的用户界面元素,用于它们需要制作的网站或软件模型. 在这篇文章 ...

  8. 22套新鲜出炉的 Web & Mobile PSD 用户界面素材

    在这篇文章中,我们展示的是自由和清新的 UI 设计素材套件.这些线框图和 UI 设计工具包让设计师在设计用户界面原型的时候能够非常便利. Web 用户界面,移动用户界面和线框套件对设计师很有用,因为这 ...

  9. 20个新鲜出炉的网站模板【HTML & PSD】

    这里给大家分享20 个新鲜出炉的免费网站模板.这些设计元素将成为你下一个项目的重要素材,可以帮你节省很多的时间.与往常一样,我们经常漫游网络,寻找最好的资源, HTML.CSS 和 PSD 等等,记得 ...

随机推荐

  1. 马士兵hadoop第五课:java开发Map/Reduce

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  2. Fiddler_解决Fiddler查看Post参数中文乱码的问题

    解决Fiddler查看Post参数中文乱码的问题 今天一个同事问我,为什么用Fiddler查看Post的中文参数,是一堆乱码,如下: 需要在注册表中增加一个键值: HKEY_CURRENT_USER\ ...

  3. 使用 IntraWeb (2) - Hello IntraWeb

    IntraWeb 比我相像中的更贴近 VCL, 传统的非可视组件在这里大都可用(其内部很多复合属性是 TStringList 类型的), 它的诸多可视控件也是从 TControl 继承下来的. 这或许 ...

  4. Revit手工创建族

    手工创建族 1.画两个参考平面. 图3001 2.点击族类型,添加参数. 图3002,3003 3.添加类型,为类型赋值. 3004 4.创建拉伸截面,完成后,可以三维查看. 3005 5.创建对齐, ...

  5. 一个button导致的慘案

    Win8名存实亡,Win9未出已亡.Win10会如何呢? 微软于2014年北京时间10月1日凌晨在旧金山召开新品公布会,之前盛传所谓的"windows 9"变成了"Win ...

  6. 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

    什么是.NET? 起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service ...

  7. 解决ASP.NET MVC4中使用Html.DropDownListFor显示枚举值默认项问题

    从ASP.NET MVC 5开始,Html.DropDownListFor已经提供了对Enum的支持,但在这以前,需要通过帮助方法或扩展方法来让Html.DropDownListFor显示枚举值. 本 ...

  8. Net Framework 2.0 MSI returned error code 1603解决方法

    出现这种情况的原因,主要是用ghost做的系统,有很多系统中把ie给绑架了.下面的截图就是ghost做的系统中注册表的显示,通过上面的方法就可以解决这种Microsoft .NET Framework ...

  9. ECSHOP商城网站建设之自定义调用广告方法(二)

    原文地址:http://www.cnblogs.com/zgzy/p/3598991.html 使用ecshop进行商城网站建设时,ecshop默认的很多功能对于我们个性化设计之后不太使用.今天我们主 ...

  10. C#编程(四十)----------运算符重载

    运算符重载 所谓的运算符重载是指允许用户使用用户定义的类型编写表达式的能力. 例如,通常需要编写类似与以下内容的代码,入江两个数字相加,很明显,sum是两个数字之和. int i=5,j=4; int ...