如何选择正确的可视化方法并在 Streamlit 中实施,以更好地调试预测模型
译者注
在处理预测模型时,最好的方法往往是不断迭代,增加一些 data 来源,改进特征工程,调整模型参数......大多数时候,Data 科学家往往只固定在一个 KPI 上 (即. RMSE、预测准确率......)。在这些 KPI 背后往往还有更多信息需要分析,以改进预测。建立适当的可视化工具是深入研究模型行为、快速发现模型痛点、从而有效提高准确性的重要手段。.
本文将提出在评估预测模型时应该问自己的关键问题,然后介绍回答这些问题的必备可视化方法,最后提出在统一工具下使用 Streamlit 收集所有这些可视化方法的快速实现方法。.
背景
本文总结了我们在建立统一的可视化工具,帮助 Data 科学家、软件工程师、产品负责人和需求规划师(业务专家)为一家食品饮料公司的 10 多个业务部门开发售入预测模型过程中的心得体会。我们的模型在每日 x 仓库 x 产品层面对未来 14 周进行预测。这些模型是使用提升方法开发的,并考虑了产品特性、历史销售情况、事件和促销 data。.
评估预测模型时要问的关键问题
1.与基线相比,模型是否良好?
获取同一范围内的当前预测(如需求计划人员预测)非常有帮助。通过它可以很好地了解特定时期、产品或地点的业务行为。对业务的访谈越多,就能获得越多的洞察力,也就越能实施正确的功能。.
2.追逐预测过高或过低以及预测准确率的下降
必须要问的问题有我是否抓住了全球趋势?模型是否能捕捉到已知的经常性事件,如节假日、仓库关闭、学校放假?特定时期的准确率会下降吗?
为什么重要?
发现这类事件是有效实现更准确预测的好方法。需求规划人员通常对这些事件了如指掌,只要掌握相关信息,在模型中实施起来也非常简单。例如,在我们的许多业务部门,有些产品是为学校午餐而销售的。引入并准备一个代表学校假期的特征后,我们对这些特殊时期的预测准确性大大提高。.
3.处理产品特性
我的产品品牌/系列的业绩是否相同?我的产品之间是否存在其他区别(仅在促销期间销售的产品、畅销产品与低销量产品、产品)?
为什么重要?
这些问题有助于您更准确地了解业务。例如,根据产品在销量方面的重要性拆分模型往往会提高业绩。事实上,常规产品的需求与促销产品或不常见产品的需求截然不同,后者可能与促销期高度相关,或者销售情况非常稀少。在大多数情况下,我们针对这些不同类型的产品训练了不同的模型。.
4.是否正确考虑了构成效应?
模型是否正确捕捉了促销效应?是否存在蚕食效应?模型是否能很好地适应外生现象(如罢工)?
为什么重要?
请随时参阅我们预测系列的上一篇文章,了解促销 data: 更好地考虑促销 data 的 5 个技巧
如何分析预测模型:从宏观关键绩效指标到特定范围的评估
哪些是必备的可视化内容?
要构建评估工具,必须将以下两个要素结合起来:.....:

过滤部分必须允许在几个轴上进行过滤:分析时间段、地点(零售商、仓库......)、产品(一组产品),最后是产品类别。.
我们建议至少采用以下 4 种可视化方式:
如何开始使用 Streamlit 创建预测工作室仪表板?
Streamlit 是一个开源的 python 库,可在几分钟内创建可共享的网络应用程序,目前仍在 Data 科学社区广受欢迎。在本文中,我们将不介绍该工具,因为已经有很多相关文章,但我们将重点介绍一个可视化的简单实现。.
之所以选择使用 Streamlit 来开展此类项目,是因为有几个先决条件:
1.预测仪表板的总体结构
在深入实施之前,构建仪表盘的先决条件是绘制应用程序的各个部分。.
为了实现简洁,可以将代码分为几个部分:
| ├── config.py | ||
| 预测工作室 | ||
| │ ├── 预测分析 | ||
| │ │ └── fig_forecast_analysis.py | ||
| │ └── 页码 | ||
| │ └── forecast_analysis.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 !这是我们的应用程序 :

让我们来看看这幅图。关于我们前面讨论的要点,下面是我们这幅图的关键点:
结论
建立可视化工具后,就该部署它了。这里有一个很好的资源来分享你的应用程序: 如何在 GCP 中部署 Streamlit 应用程序并确保其安全?
感谢您阅读到这里,如有任何问题,请随时联系我们。您可以访问我们的 博客.

博客







