在应用机器学习技术进行预测时,最麻烦的问题莫过于数据缺失导致的预测后果不精确。但如果你的预测零碎应用了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服务的所有区域中立刻开始应用这项性能。