关于人工智能:数值缺失的情况下如何进行机器学习预测Amazon-Forecast帮你来补全

7次阅读

共计 4788 个字符,预计需要花费 12 分钟才能阅读完成。


在应用机器学习技术进行预测时,最麻烦的问题莫过于数据缺失导致的预测后果不精确。但如果你的预测零碎应用了 Amazon Forecast,那就简略了,利用该服务自带的缺失补全性能,数据问题迎刃而解。

Amazon Forecast 是一项全托管服务,应用机器学习技术生成高准确性预测,且使用者无需具备任何固有机器学习教训。Forecast 实用于多种用例,包含估算产品需要、供应链优化、资源布局、能源需求预测以及计算云基础设施应用状况等。

借助 Forecast,咱们无需配置服务器或者手动构建机器学习模型,即可享有弱小的预测能力。此外,只须要为本人理论应用的资源付费,其中不存在任何最低老本或事后应用承诺。要应用 Forecast,咱们只须要提供待预测变量的历史数据,以及可能影响预测后果的任何可选相干数据。其中后一部分数据能够包含随工夫变动的数据(例如价格、事件与天气),以及分类数据(例如色彩、类型或地区等)。该服务会依据您的数据主动训练并部署机器学习模型,同时提供 API 以检索预测后果。

在事实预测场当中,咱们往往会发现原始数据中存在重大的数值缺失。历史数据(或者工夫序列)中短少值,则代表其无奈在各个时间段内提供实在的对应值。这种数值缺失情况可能出自多种起因,例如在特定时间段内并没有对应交易,也可能是存在采样谬误或者采样无奈失常进行。

Forecast 反对对相干及指标工夫序列数据集、乃至历史与预测时间段内的缺失值(包含现有的 NaN 值)进行主动估算。相干工夫序列(RTS)数据中通常涵盖促销、价格或与目标值(产品需求量)等相干的缺失信息,在补全之后将显著进步预测准确率。大家能够应用多种缺失值逻辑,包含 value、median、min、max、zero、mean 与 nan(仅实用于指标工夫序列)等,具体取决于理论用例。大家能够在 CreatePredictor API 中通过 FeaturizationConfig 应用 Forecast 提供的这项性能。

本文将应用 Forecast GitHub repo 中的 Notebook 示例,向大家展现为相干及指标工夫序列(TTS)数据集进行缺失值补全的性能。

在 Forecast 中解决缺失值

工夫序列中的缺失值,代表因为多种起因而无奈应用实在对应值实现进一步解决的状况。对于代表产品销售状况的工夫序列,这些缺失值可能意味着该产品在特定时段内无奈上架销售 —— 例如产品公布之前、产品淘汰之后,或者产品临时不可用(临时缺货)。当然,缺失值也可能意味着咱们在这段时间之内没有记录下销售数据。

即便是在「无奈销售」并导致目标值为零的状况下,咱们面对的缺失值实际上也提醒出其余一些信息。例如,咱们正在销售、但以后库存为零所造成的缺失值示意为 zero,而产品基本没有正式上市所引发的缺失值通常示意为 nan。正因为如此,如果在指标工夫序列中填充 zero,则可能导致变量预测值产生适度偏移;而填充 nan 则可能与售出「零」个商品条目标理论状况不符,同样有可能导致预测变量适度偏移。

以下工夫序列图,展现了抉择谬误的填充值如何重大影响模型的准确性。图 A 与图 B 别离代表缺货商品的需要,黑线代表理论销售数据。A1 中的缺失值被填充为 zero,这导致 A2 中的预测后果绝对偏低(由虚线示意)。同样的,B1 中的缺失值用 nan 填充,因而在 B2 中的预测后果更贴近理论值。

Forecast 提供多种填充办法,用于解决 TTS 与 RTS 数据集中的缺失值。所谓填充,是将标准化值增加至数据集中缺失条目标过程。在回溯测试期间,预测会将填充的值(除 NaN 以外)假设为实在值,并将其用于评估指标。Forecast 反对以下几种填充办法:

  • 两头填充 —— 填充条目开始日期与完结日期之间的所有缺失值。
  • 回溯填充 —— 填充条目最初记录的数据点与数据集全局完结日期(所有条目标最初完结日期)之间的所有缺失值。
  • 将来填充(仅实用于 RTS)—— 填充数据集全局完结日期与预测范畴起点之间的所有缺失值。

下图所示,直观展示了这几种不同的填充办法。

下表列出了每种办法所反对的不同填充选项。对于更多详细信息,请参阅解决缺失值。

获取数据

咱们首先须要为 TTS 与 RTS 导入数据。在本用例中,应用的数据文件为 tts.csv 与 rts.csv。其中 tts.cv 会按月对多个商品的需要进行跟踪,而 rts.csv 文件则跟踪各商品的每月平均价格。这就模拟出了一种相当常见的批发场景。接下来,咱们应用 Forecast 中的填充办法与逻辑,对这些数据集中的缺失值进行填充。首先,应用以下 Python 示例代码对示例商品(item_001)的需要进行可视化:

df = pd.read_csv(“./data/tts.csv”)

df[df[“item_id”]==”item_001″ ].plot(x=”timestamp”)

创立数据集组与数据集

当初,咱们须要创立一个数据集组,并通过以下操作步骤向其中增加 TTS 与 RTS 数据集:

  • 在 Forecast 管制台上的 Dataset groups 下,抉择 Create dataset group。
  • 在 Dataset group name 局部,输出 filling_analysis_v1。
  • 在 Forecasting domain 局部,抉择 Retail。
  • 抉择 Next。

  • 在 Dataset name 局部,输出 filling_analysis_v1_tts。
  • 在 Data schema 局部,输出以下代码:
{
 "Attributes": [
 {
 "AttributeName": "item_id",
 "AttributeType": "string"
 },
 "AttributeName": "timestamp",

 "AttributeType": "timestamp"
 },
 {
 "AttributeName": "demand",
 "AttributeType": "float"
 }
 ]
 }
  • l 抉择 Next。

  • 在 Dataset import name 局部,输出
filling_analysis_v1_tts_dsi。
  • 在 Timestamp format 局部,输出 yyyy-MM-dd。
  • 在 IAM role 局部,抉择 AmazonForecast-ExecutionRole。
  • 抉择 Create dataset import。

要导入 RTS 数据集,请反复以上步骤,并在 schema 中应用以下代码:

{
 "Attributes": [
 {
 "AttributeName": "item_id",
 "AttributeType": "string"
 },
 {
 "AttributeName": "timestamp",
 "AttributeType": "timestamp"
 },
 {
 "AttributeName": "price",
 "AttributeType": "float"
 }
 ]
 }

模型创立与推理

在导入数据之后,咱们能够训练模型并生成准确率指标。Forecast 提供五种内置算法;咱们能够抉择特定算法,也能够间接抉择 Auto-ML 以使 Forecast 抉择服务中最适宜指标性能的算法。对于更多详细信息,请参阅抉择 Amazon Forecast 算法。

在本用例中,咱们将应用 DeepAR+,因为这里要解决的是 300 种彼此独立、且各自领有两年历史数据的商品。当数据集中蕴含成千盈百个工夫序列时,DeepAR + 算法的性能会优于规范 ARIMA 与 ETS 办法。要训练预测模型,请实现以下操作步骤:

  • 在 Forecast 控制台的 Train a predictor 之下,抉择 Start。
  • 在 Predictor name 局部,输出 filling_analysis_v1。
  • 在 Forecast horizon 局部,输出 3。
  • 在 Forecast frequency 局部,抉择 month。
  • 在 Algorithm 局部,抉择 Deep_AR_Plus。
  • 在 Number of backtest windows 局部,输出 1。
  • 在 Backtest window offset 局部,输出 3。
  • 在 Training parameters 局部,输出以下代码:
{
 "context_length": "6",
 "epochs": "500",
 "learning_rate": "1E-3",
 "learning_rate_decay": "0.5",
 "likelihood": "student-t",
 "max_learning_rate_decays": "0",
 "num_averaged_models": "1",
 "num_cells": "40",
 "num_layers": "2",
 "prediction_length": "3"
}

当初,咱们能够为 TTS(需要)与 RTS(价格)设置缺失值逻辑了。在这里,咱们将为 TTS 与 RTS 的 middlefill 与 backfill 应用 mean 逻辑。对于 futurefill(用于在预测范畴内指定缺失值的逻辑),请在 RTS 中应用 min。另一种常见的预测状况,是评估预测期间内部变量(例如价格)的不同取值产生的理论影响。这将有助于晋升商品打算成果,使咱们无论面对哪种状况都能确保维持失当的库存程度。咱们能够通过更新数据并从新生成预测(对于具体阐明,请参阅 GitHub repo)、或者应用 futurefill 办法(同上)并为模型应用不同填充选项(例如 max)的形式,在 Forecast 中模仿这些具体指标场景。

  • 在 Featurizations 局部,输出以下代码:
"AttributeName": "demand",
 "FeaturizationPipeline": [
 {"FeaturizationMethodName": "filling",
 "FeaturizationMethodParameters": {
 "aggregation": "sum",
 "backfill": "mean",
 "frontfill": "none",
 "middlefill": "mean"
 }
 }
 ]
 },
 {
 "AttributeName": "price",
 "FeaturizationPipeline": [
 {"FeaturizationMethodName":"filling",
 "FeaturizationMethodParameters": {
 "backfill": "mean",
 "futurefill": "min",
 "middlefill": "mean"
 }
 }
 ]
 }
]

  • 抉择 Train predictor。

在模型训练实现后,咱们能够转至预测模型详细信息页面以评估相干指标。

创立预测

要创立一项预测,请实现以下操作步骤:

  • 在 Forecast 控制台的 Forecast generation 之下,抉择 Start。
  • 在 Forecast name 局部,输出 filling_analysis_v1_min。
  • 在 Predictor 局部,抉择 filling_analysis_v1。
  • 在 Forecast types 局部,输出心愿生成预测的分位数;例如.10,.50,.90,.99。
  • 抉择 Create a forecast。

预测查问与可视化

最初,咱们能够通过控制台利用 QueryForecast API 对以上创立的商品预测后果进行可视化解决。

要查问一项预测,请实现以下操作步骤:

  • 在 Forecast 管制台上返回 Dashboard,抉择 Lookup Forecast。
  • 在 Forecast 局部,抉择 filling_value_v1_min。
  • 在 Start date 局部,抉择 2019/07/01。
  • 在 End date 局部,抉择 2019/12/01。
  • 在 item_id 局部,抉择 item_269(能够在这里抉择任意条目) 而后点击 Get Forecast。

当初,咱们能够显示所选条目标预测需要与历史需要,如下图所示。

总结

本文介绍如何应用 Forecast 反对的办法选项填充 TTS 与 RTS 数据集中的缺失值。大家能够在提供 Forecast 服务的所有区域中立刻开始应用这项性能。

正文完
 0