工程的博客

如何使用Azure Databricks将需求规划从4.5小时加速到1小时以下

分享这篇文章

供应链分析的重要性

消费者购买行为的快速变化会对供应链计划、库存管理和业务结果产生重大影响。对消费者驱动需求的准确预测只是优化盈利能力和其他业务成果的起点。快速调整整个分销网络的库存对于确保供应满足需求,同时最大限度地降低消费者的运输成本至关重要。此外,消费者还会兑换季节性优惠、购买附加服务和订阅服务,这些都会影响产品供应和物流计划。

ButcherBox的供应链分析

ButcherBox面临着极其复杂的需求规划,因为它试图确保库存有足够的交货时间,满足高度可变的客户订单偏好,引导不可预测的客户注册和管理配送物流。它需要一个可预测的解决方案来应对这些挑战,快速适应并与其他Azure数据资产紧密集成。

ButcherBox数据主管Jimmy Cooper表示:“尽管ButcherBox诞生于云端,但我们所有的团队都使用电子表格。“正因为如此,从报告发布的那一刻起,我们就在使用过时的数据。现在我们正在与Azure Databricks合作,这是一个非常不同的世界。”

ButcherBox如何简化供应链分析

ButcherBox使用Azure砖以生成其需求计划。当Azure数据工厂(ADF)触发需求计划运行时,Azure Databricks处理来自Azure数据湖、供应商数据和Hive缓存的供应链数据。新的输出存储在数据湖中,然后Azure Synapse更新需求计划生产可视化。

使用Azure Databricks进行批处理/微批处理
使用Azure Databricks进行批处理/微批处理编制

ButcherBox利用Azure Databricks从供应商、内部数据源和历史数据中摄取所有实时原始数据流。Azure Databricks将这些数据整理成商品、箱子和分发级别,供用户查看来年的需求。然后,这些数据用于用户留存建模,并推送到Azure Synapse进行历史比较。

Apache Spark SQL在Azure Databricks被设计为兼容Apache蜂巢.ButcherBox使用Hive缓存CSV文件中的数据,然后在Azure Databricks中处理缓存的数据,使Demand Plan的计算时间从4.5小时缩短到1小时以内。这使得业务用户每天早上都可以使用更新的需求计划来辅助决策。这些数据流的摄入还创建了可信赖的数据集,供其他流程和活动使用。这些新工具和功能帮助ButcherBox快速了解并适应会员行为的变化,特别是在COVID-19大流行期间。

使用Azure Databricks创建您的第一个需求预测

要开始使用Azure Databricks进行需求预测,请下载这个笔记本样本并将其导入Azure Databricks工作区。

步骤1:加载商店项目销售数据
我们的训练数据集是10个不同商店5年的交易数据。我们将定义一个模式,将数据读入一个DataFrame,然后为后续查询创建一个临时视图。

pyspark.sql.types进口#训练数据集的结构train_schema = StructType([StructField (“日期”DateType ()),StructField (“存储”IntegerType ()),StructField (“项目”IntegerType ()),StructField (“销售”IntegerType ())])#将训练文件读入数据框架Train = spark.read.csv(' / FileStore /表/ demand_forecast /火车/ train.csv”头=真正的模式= train_schema#使dataframe可作为临时视图查询train.createOrReplaceTempView (“火车”

步骤2:检查数据
在月份级别上聚合数据,我们可以观察到一个可识别的年度季节性模式,它随着时间的推移而增长。我们可以选择重新构造查询,以查找其他模式,例如每周季节性和总体销售增长。

步骤3:组装历史数据集
从我们之前加载的数据中,我们可以通过查询“train”临时视图来构建Pandas DataFrame,然后删除任何缺失的值。

#查询聚合数据到日期(ds)级别sql_statement =“‘选择CAST(date as date) as ds,销售额为y从火车WHERE store=1 AND item=1按ds排序“‘#在Pandas数据框架中组装数据集history_pd = spark.sql(sql_statement).toPandas()#删除任何丢失的记录History_pd = History_pd .dropna()

步骤4:建立模型

基于对数据的探索,我们将根据观察到的增长和季节模式设置模型参数。因此,我们选择了线性增长模式,并启用了每周和每年的季节性模式的评估。一旦我们的模型参数设置好了,我们就可以很容易地将模型与历史数据进行匹配。

#设置模型参数模型=先知(interval_width =0.95增长=“线性”daily_seasonality =weekly_seasonality =真正的yearly_seasonality =真正的seasonality_mode =“乘法”#拟合模型到历史数据model.fit (history_pd)

第五步:使用训练过的模型建立90天的预测

由于我们的模型经过训练,我们可以用它来建立一个类似于ButcherBox在他们的需求计划中使用的预测。这可以使用历史数据快速完成,如下所示。

#定义一个数据集,包括历史日期和最后可用日期后90天Future_pd = model.make_future_dataframe(时间=90频率=' d 'include_history =真正的#预测数据集Forecast_pd = model.predict(future_pd)
              显示器(forecast_pd)

一旦我们预测了未来的数据集,我们就可以在我们的模型中以图表的形式产生一般的和季节性的趋势(如下所示)。

Trends_fig = model.plot_components(forecast_pd)显示器(trends_fig)

一般和季节趋势图

BOB低频彩通过加入我们了解更多Azure databrick事件马上开始做这个三部分培训系列

免费试用Databricks
看到所有工程的博客的帖子