阅读我们的文章

.

如何选择正确的可视化方法并在 Streamlit 中实施,以更好地调试预测模型

译者注

在处理预测模型时,最好的方法往往是不断迭代,增加一些 data 来源,改进特征工程,调整模型参数......大多数时候,Data 科学家往往只固定在一个 KPI 上 (即. RMSE、预测准确率......)。在这些 KPI 背后往往还有更多信息需要分析,以改进预测。建立适当的可视化工具是深入研究模型行为、快速发现模型痛点、从而有效提高准确性的重要手段。.

本文将提出在评估预测模型时应该问自己的关键问题,然后介绍回答这些问题的必备可视化方法,最后提出在统一工具下使用 Streamlit 收集所有这些可视化方法的快速实现方法。.

背景

本文总结了我们在建立统一的可视化工具,帮助 Data 科学家、软件工程师、产品负责人和需求规划师(业务专家)为一家食品饮料公司的 10 多个业务部门开发售入预测模型过程中的心得体会。我们的模型在每日 x 仓库 x 产品层面对未来 14 周进行预测。这些模型是使用提升方法开发的,并考虑了产品特性、历史销售情况、事件和促销 data。.

评估预测模型时要问的关键问题

1.与基线相比,模型是否良好?
获取同一范围内的当前预测(如需求计划人员预测)非常有帮助。通过它可以很好地了解特定时期、产品或地点的业务行为。对业务的访谈越多,就能获得越多的洞察力,也就越能实施正确的功能。.

2.追逐预测过高或过低以及预测准确率的下降
必须要问的问题有我是否抓住了全球趋势?模型是否能捕捉到已知的经常性事件,如节假日、仓库关闭、学校放假?特定时期的准确率会下降吗?
为什么重要?

  • 如果模型预测过高,就会导致库存增加,从而产生库存成本。.
  • 如果模型预测不足,就会导致缺货期,从而错失销售机会,降低客户满意度。.

发现这类事件是有效实现更准确预测的好方法。需求规划人员通常对这些事件了如指掌,只要掌握相关信息,在模型中实施起来也非常简单。例如,在我们的许多业务部门,有些产品是为学校午餐而销售的。引入并准备一个代表学校假期的特征后,我们对这些特殊时期的预测准确性大大提高。.

3.处理产品特性
我的产品品牌/系列的业绩是否相同?我的产品之间是否存在其他区别(仅在促销期间销售的产品、畅销产品与低销量产品、产品)?
为什么重要?

  • 验证模型在整个范围内的良好性能根据业务需要,可以对整个范围的精确度提出最低要求。.
  • 确定关键产品,对其进行更精确的分析,从而提高准确性。.

这些问题有助于您更准确地了解业务。例如,根据产品在销量方面的重要性拆分模型往往会提高业绩。事实上,常规产品的需求与促销产品或不常见产品的需求截然不同,后者可能与促销期高度相关,或者销售情况非常稀少。在大多数情况下,我们针对这些不同类型的产品训练了不同的模型。.

4.是否正确考虑了构成效应?
模型是否正确捕捉了促销效应?是否存在蚕食效应?模型是否能很好地适应外生现象(如罢工)?
为什么重要?

  • 在大多数情况下,促销是拉动需求的一个重要环节,可以使销售额大幅飙升 data。.
  • 这会导致严重的浪费/缺货现象。.
  • 考虑到复杂效应的更现实的模型更有可能被未来的用户所采用。.

请随时参阅我们预测系列的上一篇文章,了解促销 data: 更好地考虑促销 data 的 5 个技巧

如何分析预测模型:从宏观关键绩效指标到特定范围的评估

哪些是必备的可视化内容?
要构建评估工具,必须将以下两个要素结合起来:.....:

  • 用于评估特定范围性能的过滤器部件
  • 一套快速发现改进轴的可视化方法

过滤部分必须允许在几个轴上进行过滤:分析时间段、地点(零售商、仓库......)、产品(一组产品),最后是产品类别。.
我们建议至少采用以下 4 种可视化方式:

  • 首先是 预测体积的变化, ,以及真实销售信息。这是最容易理解的,也是首先要看的。它可以帮助你了解你的模型:我的模型是否抓住了全球趋势?预测过度还是不足?我是否捕捉到了高峰和低谷?

  • 其次 预测精度的演变. .根据预测准确度的计算方法,这个数字可能是完成第一个数字所必需的。这个数字可以帮助您快速发现预测中的痛点时期,从而告诉您应该在哪个时期进行深入研究。.
  • 第三,一些具有代表性的关键绩效指标 在不同范围内计算您的预测精度. .我们建议将准确性分为不同层次:仓库、产品类别层次、产品,甚至混合这些分析轴(例如,创建每个仓库 x 产品类别的预测准确性热图)。同样,这也有助于您找到关键的本地化或产品。.
  • 最后一个是 贡献评估. .要准确了解模型的工作原理,您需要评估最常用的特征。经典的 TS 模型(ARIMA & Co.对于提升方法(XGBoost、CatBoost、LightGBM......)框架,如 SHAP 对于精确模拟每个特征的行为非常有用。将这些贡献体现在周期上,有助于您评估哪种现象在哪一时刻推动了您的预测。.

如何开始使用 Streamlit 创建预测工作室仪表板?

Streamlit 是一个开源的 python 库,可在几分钟内创建可共享的网络应用程序,目前仍在 Data 科学社区广受欢迎。在本文中,我们将不介绍该工具,因为已经有很多相关文章,但我们将重点介绍一个可视化的简单实现。.
之所以选择使用 Streamlit 来开展此类项目,是因为有几个先决条件:

  • Streamlit 让 MVP 仪表板的设置变得非常简单。.
  • 可在 Data 科学项目中完全整合。由于您的 Streamlit 页面将使用 Python 编写,因此您可以使用核心项目的功能。例如,如果您开发了一个库来访问您的 data 准备、参考表和预测,您就可以在仪表板代码中直接使用它们。.
  • 通过在远程机器的端口上公开仪表板,或在 App Engine、Cloud Run 等解决方案上部署仪表板,可与众多用户共享。

1.预测仪表板的总体结构
在深入实施之前,构建仪表盘的先决条件是绘制应用程序的各个部分。.

为了实现简洁,可以将代码分为几个部分:

  • 您可以使用以下功能启动核心仪表板 streamlit run forecasting_studio_app.py
  • 不同的页面(对您的训练 dataset 进行简单的 EDA、预测分析、特征贡献......)
  • Lib 脚本为每页收集 data 准备工作/数据

├── config.py
预测工作室
│ ├── 预测分析
│ │ └── fig_forecast_analysis.py
│ └── 页码
│ └── forecast_analysis.py
└── forecasting_studio_app.py

主页面将设置应用程序的全局结构,即应用程序的全局布局:在我们的例子中是宽布局,侧边栏显示应用程序名称和可用页面。.

舶来品 流光溢彩 作为
预测工作室.页面 舶来品 预测分析
页数 =
捍卫 write_page(页码):
页码.写道()
捍卫 主要():
.侧栏.标题("预测工作室")
挑选 = .侧栏.选择框("", 清单(页数.钥匙()))
页码 = 页数[挑选]
write_page(页码)
如果 姓名____ == "__main__":
.设置页面配置(设计="宽")
主要()

配置文件,用于收集 Plotly 图形的颜色和不同配置。.

x_axis_template = 口述(节目单=正确,
显示网格=假的,
显示标签=正确,
线色=“灰色”,
线宽=2,
虱子=“外面”,
tickfont=口述(家庭=“Arial”, 尺寸=12, 颜色=“rgb(82, 82, 82)”))
y_axis_template = 口述(节目单=正确,
显示网格=正确,
线色=“灰色”,
网格色=“浅灰色”)
图例 = 口述(方向=“h”, =“底部”, y=1.02, xanchor=“对”, x=1)
COLORDISCRETE = [“#002244”, “#ff0066”, “#66cccc”, “#ff9933”, “#337788”,
“#429e79”, “#474747”, “#f7d126”, “#ee5eab”, “#b8b8b8”]

2.Building “Evolution of Forecast Accuracy visualization” (预测精度可视化的演变”
首先,我们将在一个脚本中收集我们的 Plotly 数据:

舶来品 大熊猫 作为 pd
分型 舶来品 列表
舶来品 图谋.图形对象 作为
配置 舶来品 COLORDISCRETE, 图例, x_axis_template, y_axis_template
捍卫 FA的演变(每目标日期预测数: pd.DataFrame,
活动: 列表 = ) -> .:
“””图示预测准确率的变化情况
在回测期
参数
----
每目标日期预测:pd.DataFrame
预报 dataset 至少包含 3 个列 :
- 目标日期‘:您预测的日期
- 预测准确性‘:您的准确性关键绩效指标
- week_nb‘ : 星期 ID(从 0 到 52)
- 可选)‘需求规划器预测精度’:您的基准预测值
主键:‘target_date’
事件 :列表,可选
代表时期的几个日期的列表,默认为 "无"。
“””
图fa_score = .()
图fa_score.add_trace(
.散射(
名字=“模型预测准确性”,
x=每目标日期预测数[‘目标日期’],
y=每目标日期预测数[‘预测精度’],
悬浮文字=每目标日期预测数[‘week_nb’],
标记颜色=COLORDISCRETE[0]))
# 如果您有基线,您可以在您的
# data 设置为在折线图上显示
如果 ‘需求预测准确性’ 每目标日期预测数.专栏:
图fa_score.add_trace(
.散射(
名字=“需求规划人员的预测准确性”,
x=每目标日期预测数[‘目标日期’],
y=每目标日期预测数[‘需求预测准确性’],
悬浮文字=每目标日期预测数[‘week_nb’],
标记颜色=COLORDISCRETE[2]))
图fa_score.更新轴(范围=(分钟(每目标日期预测数[‘目标日期’]),
最大(每目标日期预测数[‘目标日期’])))
图fa_score.更新跟踪(模式=‘线条+标记’, 线形=‘样条’)
图fa_score.更新布局(
x 轴标题=“目标日期”,
yaxis_title=“FA 评分”,
plot_bgcolor=‘白色’,
神话=图例,
x 轴=x_axis_template,
yaxis=y_axis_template)
如果 活动:
图fa_score.更新布局(
外形=[获取垂直填充区域(分部[0], 分部[1], ‘RGB(102, 204, 204)’)
对于 分部 活动])
返回 图fa_score
捍卫 获取垂直填充区域(启动: 浮动, 最后: 浮动, 颜色: 字符串 = “蓝色”) -> 口述:
“””返回一个情节性的垂直形状指令,用于突出显示数字上的事件”””
返回 口述(类型=“矩形”,
xref=“x”,
yref=“纸”,
x0=启动,
y0=0,
x1=最后,
y1=1,
填充颜色=颜色,
层次=“以下”,
线宽=0,
不透明度=0.5)

最后,我们将实现预测分析页面,该页面将加载我们的 dataset,将数据分布在不同的列上,...

舶来品 大熊猫 作为 pd
舶来品 流光溢彩 作为
预测工作室.预测分析.预测分析 舶来品 FA的演变
捍卫 写道() -> :
.标题(‘预测分析’)
df = pd.read_csv(‘your_dataset.csv’)
# 您可以在此加载一些自定义事件来显示
# ex : 事件 = [(‘2019-07-01’, ‘2019-09-01’), (‘2020-07-01’, ‘2020-09-01’)]
活动 =
evo_cont1, evo_cont2 = .beta_columns(2)
evo_cont1.副标题(‘预测准确性的演变’)
无花果 = FA的演变(df, 活动)
evo_cont1.plolty_fig(无花果)
如果 姓名____ == “__main__”:
写道()

Tadam !这是我们的应用程序 :

让我们来看看这幅图。关于我们前面讨论的要点,下面是我们这幅图的关键点:

  • 首先,它可以让我们迅速发现我们的模型不准确的几周:12 月份的预测似乎比较复杂。回溯测试期的结束对我们的模型来说也是一个问题。我们需要与企业进行讨论,以了解哪些影响会对这几周造成影响,并对模型进行相应的调整。.
  • 该图还有一个名为 “事件 ”的参数,这是一个日期对列表,代表全球事件,允许我们突出显示学校假期等事件。我们很快就能发现,最糟糕的一周是假期周。也许有些仓库在此期间关闭了,或者客户为了准备开年而订购了比平时更多的产品......同样,企业主一定可以在这几周增加一个外部监控。.
  • 您可以看到显示了两个序列。在我们的案例中,它代表了我们的模型和 Demand Planners 的模型在同一时期的准确性。从图中可以看出,对 Demand Planners 而言,最差的几周也是复杂的几周。我们的模型很好地预测了 4 月份的最大跌幅。对于我们的模型来说,回溯测试期的末尾似乎更加复杂,而需求规划者的准确性似乎比较稳定。.

结论

  • EDA 是评估预测模型的关键
  • 在独特的仪表板中归纳所有数据,让您专注于迭代,从而提高效率
  • 通过仪表盘,您可以关注关键范围,快速发现改进轴心。.
  • 您刚刚实施了仪表盘的核心结构,现在可以继续添加新数据!

建立可视化工具后,就该部署它了。这里有一个很好的资源来分享你的应用程序: 如何在 GCP 中部署 Streamlit 应用程序并确保其安全?

感谢您阅读到这里,如有任何问题,请随时联系我们。您可以访问我们的 博客.

中号 Blog by Artefact。.

本文最初发表于 Medium.com.
在我们的 Medium Blog 上关注我们!