使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。

使用 Amazon Forecast 在 Snowflake 中自动进行时间序列预测

这篇文章是与 Snowflake, Inc. 的 Andries Engelbrecht 和 James Sun 的联合合作。

云计算革命使企业能够在没有容量规划或数据保留限制的情况下捕获和保留公司和组织数据。 现在,随着纵向数据的多样化和大量储备,公司越来越能够找到新颖且有影响力的方法来使用其数字资产,从而在制定短期和长期规划决策时做出更好、更明智的决策。 时间序列预测是一门独特且必不可少的科学,它使公司能够做出手术计划决策,以帮助平衡客户服务水平与通常相互竞争的最佳盈利目标。

在 AWS,我们有时会与选择我们的技术合作伙伴的客户合作 雪花 提供云数据平台体验。 拥有一个可以回忆多年历史数据的平台是很强大的——但是您如何使用这些数据展望未来并使用昨天的证据来为明天做计划呢? 想象一下,不仅有雪花中发生的事情——你的单一事实版本——而且还有一组相邻的非孤立数据,这些数据提供未来几天、几周或几个月的概率预测。

在协作供应链中,合作伙伴之间共享信息可以提高绩效、提高竞争力并减少资源浪费。 可以通过以下方式促进分享您的未来预测 雪花数据共享,这使您能够安全地与业务合作伙伴无缝协作并识别业务洞察力。 如果许多合作伙伴分享他们的预测,它可以帮助控制互联供应链中的牛鞭效应。 您可以有效地使用 雪花市场 从生成的数据集中通过预测分析获利 亚马逊预报.

在这篇文章中,我们将讨论如何使用 Snowflake 和 Forecast 实施自动化时间序列预测解决方案。

支持此解决方案的基本 AWS 服务

Forecast 提供了几种最先进的时间序列算法,并管理足够的分布式计算能力的分配,以满足几乎任何工作负载的需求。 使用 Forecast,您不会得到一个模型; 您将获得许多模型的优势,这些模型进一步优化为集合中每个时间序列的唯一加权模型。 简而言之,该服务将所有科学、数据处理和资源管理交付到一个简单的 API 调用中。

AWS步骤功能 提供管理整个工作流程的流程编排机制。 该服务将 API 调用与 亚马逊雅典娜, AWS Lambda和 Forecast 来创建一个从 Snowflake 中收集数据的自动化解决方案,使用 Forecast 将历史数据转换为未来的预测,然后在 Snowflake 中创建数据。

Athena 联合查询可以连接到多个企业数据源,包括 Amazon DynamoDB, 亚马逊Redshift, 亚马逊开放搜索服务、MySQL、PostgreSQL、Redis 和其他流行的第三方数据存储,例如 Snowflake。 数据连接器作为 Lambda 函数运行——您可以使用此源代码来帮助启动 Amazon Athena Lambda 雪花连接器 并与之连接 AWS私有链接 或通过 NAT 网关。

解决方案概述

我们在 AWS 经常做的一件事是帮助客户实现他们的目标,同时消除无差别繁重工作的负担。 考虑到这一点,我们提出以下建议 方案, 协助 AWS 和 Snowflake 客户执行以下步骤:

  1. 从雪花中导出数据。 您可以使用灵活的元数据来卸载由现成工作流程驱动的必要历史数据。
  2. 将数据导入预测。 无论用例、行业或规模如何,导入准备好的数据输入都是简单且自动化的。
  3. 训练最先进的时间序列模型。 您可以自动化时间序列预测,而无需管理底层数据科学或硬件配置。
  4. 针对训练的模型生成推理。 预测产生的输出很容易用于任何目的。 它们以简单的 CSV 或 Parquet 文件的形式提供 亚马逊简单存储服务 (亚马逊S3)。
  5. 直接在 Snowflake 中并排使用历史和未来预测。

下图说明了如何实施自动化工作流程,使 Snowflake 客户能够从 AWS 托管服务 Forecast 支持的高度准确的时间序列预测中受益。 超越用例和行业,这里提供的设计首先从雪花中提取历史数据。 接下来,工作流提交准备好的数据以进行时间序列计算。 最后,未来时期预测可在 Snowflake 中本地使用,为 AWS 和 Snowflake 的联合客户创造无缝的用户体验。

尽管此架构仅突出关键技术细节,但解决方案很容易组合,有时只需 1-2 个工作日。 我们为您提供了工作示例代码,以帮助您消除单独创建解决方案的繁重工作,而无需先机。 在您了解如何为一个工作负载实施此模式后,您可以对 Snowflake 中保存的任何数据重复预测过程。 在接下来的部分中,我们概述了使您能够构建自动化管道的关键步骤。

从雪花中提取历史数据

在第一步中,您使用 SQL 定义您想要预测的数据,并让 Athena 联合查询连接到 Snowflake,运行您的自定义 SQL,并将结果记录集保存在 Amazon S3 上。 预测需要在提取之前在 Amazon S3 上提供历史训练数据; 因此,Amazon S3 充当 Snowflake 和 Forecast 之间的中间存储缓冲区。 我们在此设计中采用了 Athena,以启用 Snowflake 和其他异构数据源。 如果您愿意,另一种方法是使用 Snowflake COPY 命令和存储集成将查询结果写入 Amazon S3。

无论使用何种传输机制,我们现在概述预测所需的数据类型以及如何定义、准备和提取数据。 在接下来的部分中,我们将介绍如何将数据导入 Forecast。

以下屏幕截图描述了一组数据在其原生 Snowflake 架构中的样子。

使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。

尽管此屏幕截图显示了数据在自然状态下的样子,但 Forecast 要求将数据塑造成三个不同的数据集:

  • 目标时间序列 – 这是包含目标变量的必需数据集,用于训练和预测未来值。 该数据集单独用作单变量时间序列模型。
  • 相关时间序列 – 这是一个可选数据集,包含应与目标变量相关的时间变量。 示例包括可变定价、促销活动、超本地化活动流量、经济前景数据——任何您认为可能有助于解释目标时间序列差异并产生更好预测的东西。 相关的时间序列数据集将您的单变量模型转换为多变量模型,以帮助提高准确性。
  • 项目元数据 – 这是一个可选数据集,包含有关预测项目的分类数据。 项目元数据通常有助于提高新推出产品的性能,我们称之为 冷启动.

在定义了每个预测数据集的范围后,您可以在 Snowflake 中编写查询,这些查询使用适当的过滤器从必要的源表中获取正确的数据字段,以获得所需的数据子集。 以下是三个示例 SQL 查询,用于生成 Forecast 针对特定食品需求计划场景所需的每个数据集。

我们从目标时间序列查询开始:

select LOCATION_ID, ITEM_ID, 
DATE_DEMAND as TIMESTAMP, QTY_DEMAND as TARGET_VALUE 
from DEMO.FOOD_DEMAND

可选的相关时间序列查询提取价格和促销等协变量:

select LOCATION_ID,ITEM_ID, DATE_DEMAND as TIMESTAMP,
CHECKOUT_PRICE, BASE_PRICE,
EMAILER_FOR_PROMOTION, HOMEPAGE_FEATURED
from DEMO.FOOD_DEMAND

项目元数据查询获取不同的分类值,这些值有助于提供维度并进一步定义预测项目:

select DISTINCT ITEM_ID, FOOD_CATEGORY, FOOD_CUISINE
from DEMO.FOOD_DEMAND

定义好源查询后,我们可以通过 Athena 联合查询连接到 Snowflake 以提交查询并保存生成的数据集以供预测使用。 有关详细信息,请参阅 使用 Athena Federated Query 查询 Snowflake 并加入您的 Amazon S3 数据湖中的数据.

Athena Snowflake 连接器 GitHub 存储库 帮助安装 Snowflake 连接器。 这 预测 MLOps GitHub 存储库 帮助编排本文中定义的所有宏步骤,并使它们无需编写代码即可重复。

将数据导入 Forecast

完成上一步后,目标时间序列数据集位于 Amazon S3 中并准备好导入 Forecast。 此外,还可以准备可选的相关时间序列和项目元数据数据集并准备好进行摄取。 随着提供 预测 MLOps 解决方案,您在这里所要做的就是启动负责导入数据的 Step Functions 状态机——无需任何代码。 Forecast 为您提供的每个数据集启动一个集群,并使数据准备好供服务用于 ML 模型构建和模型推理。

创建具有准确度统计的时间序列 ML 模型

导入数据后,只需调用 API 即可创建高精度时序模型。 此步骤封装在 Step Functions 状态机中,该状态机启动 Forecast API 以开始模型训练。 训练预测器模型后,状态机将回测窗口期间的模型统计信息和预测导出到 Amazon S3。 回测导出可由 Snowflake 作为外部阶段进行查询,如以下屏幕截图所示。 如果您愿意,可以将数据存储在内部阶段。 关键是使用回测指标来评估您提供的数据集中时间序列的性能分布。

使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。

创建未来预测

使用上一步训练的模型,专门构建的 Step Functions 状态机调用预测 API 来创建未来日期预测。 Forecast 提供一个集群来执行推理,并通过在上一步中创建的命名预测器模型提取导入的目标时间序列、相关时间序列和项目元数据数据集。 生成预测后,状态机将它们写入 Amazon S3,在那里,它们可以再次作为 Snowflake 外部阶段就地进行查询,或者作为内部阶段移动到 Snowflake 中。

直接在 Snowflake 中使用未来日期的预测数据

AWS 尚未为此步骤构建完全自动化的解决方案; 但是,使用本文中的解决方案,Forecast 在前两个步骤中已经生成了数据。 您可以将输出视为可操作的事件或在数据上构建商业智能仪表板。 您还可以使用这些数据来创建未来的制造计划和采购订单、估计未来的收入、制定人员配备资源计划等等。 每个用例都不同,但此步骤的重点是将预测交付给您组织中或其他地方的正确消费系统。

以下代码片段显示了如何直接从 Snowflake 中查询 Amazon S3 数据:

CREATE or REPLACE FILE FORMAT mycsvformat
type = 'CSV'
field_delimiter = ','
empty_field_as_null = TRUE
ESCAPE_UNENCLOSED_FIELD = None
skip_header = 1;

CREATE or REPLACE STORAGE INTEGRATION amazon_forecast_integration
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = S3
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::nnnnnnnnnn:role/snowflake-forecast-poc-role'
ENABLED = true
STORAGE_ALLOWED_LOCATIONS = (
's3://bucket/folder/forecast',
's3://bucket/folder/backtest-export/accuracy-metrics-values',
's3://bucket/folder/backtest-export/forecasted-values';

CREATE or REPLACE STAGE backtest_accuracy_metrics
storage_integration = amazon_forecast_integration
url = 's3://bucket/folder/backtest-export/accuracy-metrics-values'
file_format = mycsvformat;

CREATE or REPLACE EXTERNAL TABLE FOOD_DEMAND_BACKTEST_ACCURACY_METRICS (
ITEM_ID varchar AS (value:c1::varchar),
LOCATION_ID varchar AS (value:c2::varchar),
backtest_window varchar AS (value:c3::varchar),
backtestwindow_start_time varchar AS (value:c4::varchar),
backtestwindow_end_time varchar AS (value:c5::varchar),
wQL_10 varchar AS (value:c6::varchar),
wQL_30 varchar AS (value:c7::varchar),
wQL_50 varchar AS (value:c8::varchar),
wQL_70 varchar AS (value:c9::varchar),
wQL_90 varchar AS (value:c10::varchar),
AVG_wQL varchar AS (value:c11::varchar),
RMSE varchar AS (value:c12::varchar),
WAPE varchar AS (value:c13::varchar),
MAPE varchar AS (value:c14::varchar),
MASE varchar AS (value:c15::varchar)
)
with location = @backtest_accuracy_metrics
FILE_FORMAT = (TYPE = CSV FIELD_DELIMITER = ',' SKIP_HEADER = 1);

有关设置权限的更多信息,请参阅 选项 1:配置雪花存储集成以访问 Amazon S3. 此外,您可以使用 AWS服务目录 配置 Amazon S3 存储集成; 更多信息可在 GitHub回购.

启动基于计划或基于事件的工作流程

在为您的特定工作负载安装解决方案后,您的最后一步是按照对您的独特要求有意义的时间表(例如每天或每周)自动执行该过程。 最主要的是决定如何开始这个过程。 一种方法是使用 Snowflake 调用 Step Functions 状态机,然后按顺序编排这些步骤。 另一种方法是将状态机链接在一起并通过一个 亚马逊EventBridge 规则,您可以将其配置为从事件或计划任务运行 - 例如,格林威治标准时间晚上 9 点每周日晚上 00:8。

结论

经验最丰富; 最可靠、可扩展和安全的云; 以及最全面的服务和解决方案集,AWS 是从您的数据中释放价值并将其转化为洞察力的最佳场所。 在这篇文章中,我们向您展示了如何创建一个自动化的时间序列预测工作流程。 更好的预测可以带来更高的客户服务成果、更少的浪费、更少的闲置库存以及资产负债表上的更多现金。

如果您准备好自动化和改进预测,我们随时为您提供支持。 联系您的 AWS 或 Snowflake 客户团队以立即开始,并要求参加预测研讨会,以了解您可以从数据中释放什么样的价值。


作者简介

使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。博斯科阿尔伯克基 是 AWS 的高级合作伙伴解决方案架构师,在使用企业数据库供应商和云提供商的数据库和分析产品方面拥有 20 多年的经验。 他曾帮助科技公司设计和实施数据分析解决方案和产品。

使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。弗兰克·达莱佐特 是 AWS 的高级解决方案架构师,热衷于与独立软件供应商合作,在 AWS 上设计和构建可扩展的应用程序。 他拥有创建软件、实施构建管道以及在云中部署这些解决方案的经验。

使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。安德里斯·恩格尔布雷希特 是 Snowflake 的首席合作伙伴解决方案架构师,并与战略合作伙伴合作。 他积极与 AWS 等战略合作伙伴合作,支持产品和服务集成,并与合作伙伴开发联合解决方案。 Andries 在数据和分析领域拥有超过 20 年的经验。

使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。查尔斯·劳克林 是首席 AI/ML 专家解决方案架构师,在 AWS 的时间序列 ML 团队工作。 他帮助制定 Amazon Forecast 服务路线图,并每天与不同的 AWS 客户合作,利用尖端的 AWS 技术和思想领导力帮助他们转变业务。 Charles 拥有供应链管理硕士学位,过去十年一直在消费品行业工作。

使用 Amazon Forecast PlatoBlockchain 数据智能在 Snowflake 中自动进行时间序列预测。 垂直搜索。 哎呀。 是 Snowflake 的高级合作伙伴解决方案架构师。 James 在存储和数据分析方面拥有超过 20 年的经验。 在加入 Snowflake 之前,他曾在 AWS 和 MapR 担任多个高级技术职位。 詹姆斯拥有斯坦福大学的博士学位。

时间戳记:

更多来自 AWS机器学习