简介:本文从零售业需求预测痛点、商店商品模型预测的实际演示,介绍Databricks如何助力零售商进行需要、库存预测,实现老本把控和营收增长。
作者:李锦桂 阿里云开源大数据平台开发工程师
本文从零售业需求预测痛点、商店商品模型预测的实际演示,介绍Databricks如何助力零售商进行需要、库存预测,实现老本把控和营收增长。
本文分为以下四局部:
1.消费者需求预测对零售业的重要性
2.数据的筹备与可视化
3.基于DDI建设预测单个商店-商品模型
4.将预测模型扩大到每个商店-商品的预测
一、消费者需求预测对零售业的重要性
首先,需求预测对零售商至关重要。如果商店的商品过多,货架和仓库的空间缓和,产品容易过期,财务资源被库存解放。零售商无奈利用制造商带来的新机会,从而错过生产模式的转变。
因为商店内商品过少,客户无奈从上商店内买到须要的商品。岂但会造成零售商的支出损失,而且随着工夫的推移,消费者的悲观情绪,会驱使消费者转向竞争对手。
综上所述,预测消费者需要的准确性和及时性,对零售商十分重要。
二、数据的筹备与可视化
上面咱们应用批发数据模仿如何应用DDI的notebook和Facebook prophet来对消费者的需要进行建模和预测。
当初咱们须要的数据曾经上传到了OSS的Bucket外面,接下来,开始对消费者的需要进行建模和预测。当数据上传到OSS上之后,能够在DDI的Notebook上对数据进行剖析和建模。
本次应用的数据集是2012年到2017年,10个商店中的50商品销售数据。数据蕴含四列。第一列是日期;第二列是商店的ID(1-10);第三列是商品的ID(1-50);第四列是当日商品的销售量。
试验目标是预测将来三个月,这些商品在各个商店的销量,对商店将来的库存备货提供领导。
在默认配置下,YARN调配的executor CPU为1core,memory为2G,为了让咱们的剖析更快一些,咱们能够适度调高调配的cpu外围数和调配的内存大小。
通常,在读取大量CSV格局的数据之前,会事后定义Schema。这项简略预处理,能够免去Spark主动揣测数据类型的沉重工作,让Spark更加疾速的读入数据。
定义Schema之后,将训练数据读取到spark的DataFrame中。
读取DataFrame之后,通过相熟的SQL语句对数据进行剖析,能够应用dataframe的createOrReplaceTempView办法,创立一个长期的视图。
创立view之后,对dataframe中的数据进行剖析。首先剖析销售数据随年份的走势。从图表能够看出,在过来几年,商店的销售额稳步增长,总体出现线性增长的趋势。在预测下一年的销售额时,能够参考过来几年的增长率。
三、基于DDI建设预测单个商店-商品模型
与此同时,商品销售往往有很强的季节性,特地是服装行业。T恤在冬季的销售额必定高于羽绒服的销售额。因而,在预测商品的销售额时,季节性是不可疏忽的因素。
如上图所示,从2013年到2017年,商品销量一直上涨。一年之中,商品的销售额出现很强的周期性。
在12月或1月时,商品销量达到波谷,随着月份一直攀升,7月销量达到波峰。所以在进行建模时,月份是很重要的特色之一。
在上图中,0代表的周一,1代表周二……销售额在每周七天,也呈现出很强的周期性,在周日的销售额达到最高,周一跌到最低,而后缓缓回到高位。
Prophet是facebook开源的一个工夫序列预测算法。Prophet的应用非常简单,只须要输出已知的工夫序列的工夫戳和相应的值以及须要预测的工夫序列的长度,Prophet就能输入将来的工夫序列走势。
接下来,对所有商店和商品的组合进行预测之前。先抉择store 1和item 1进行预测,相熟Prophet的应用。
预测第一步,组装历史数据用于模型训练。Prophet的模型比较简单,相当于Prophet的对象。在这个对象里,把growth定义为线性。
在数据摸索阶段,失去的论断是,一个商品的销量,岂但有周与周之间的周期性,而且有月份之间的周期性。所以weekly,yearly作为true。而后应用fit办法,对模型进行训练。
训练之后,能够应用这个模型预测将来90天的走势。
从上图能够看到,商品整体销量呈逐年减少的趋势。商品销量受节令和节假日变动影响显著。
最初,把实在数据和将来90天的预测数据它拼接到一起。实在数据从2017年到2018年的1月。将来90天的预测数据,从2018年1月到4月。如上图所示,带有黑点的数据是实在数据。
通过获取历史数据和预测数据的准确性。能够预测一些准确性指标,比方MAE、MSE和RMSE。
四、将预测模型扩大到每个商店-商品的预测
接下来,开始建设更加欠缺的模型对商店(10个商店)和商品(50件商品)的所有组合进行预测。建设模型的第一步是筹备数据。
训练数据次要有四列。对应的是每一种商店商品的组合,在特定日期的销量。而后,针对这些数据进行建模。
创立一个Prophet对象,建设模型。weekly和yearly被设为true,而后预测将来90天的趋势。
从预测数据中,抽取出一些须要的字段和历史数据。将历史数据和预测数据拼接到一起,设置后果数据中的商店ID和商品ID,返回数据集。将模型训练利用到每个商店和商品组合,将预测后果写入OSS。
接下来,把OSS中的预测后果,加载到spark里。抉择工夫戳,商店和的预测值。抉择日期应大于2018年1月1号。依据工夫和商店组合。预测的商店销售额,如上图所示。
接下来,开始计算每个模型的测试指标。首先,定义一个UDF用于计算模型的测试指标。获取训练日期,计算训练指标,进行组装。
上图是针对10家商店的50种商品造成的预测后果。最终实现了每个商店和商品的组合,以及销售额的模型建设与预测。
原文链接
本文为阿里云原创内容,未经容许不得转载。