入门 (AWS CLI) - Amazon Forecast

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

入门 (AWS CLI)

在本练习中,您将使用 AWS Command Line Interface(AWS CLI)探索 Amazon Forecast。您将创建 Amazon Forecast 数据集、训练预测器并使用生成的预测器生成预测。开始之前,请确保您已经有 AWS 账户 并且已设置 AWS CLI。有关更多信息,请参阅设置

注意

本练习中的 AWS CLI 命令在 Linux 上进行了测试。有关在 Windows 上使用 AWS CLI 命令的信息,请参阅 AWS Command Line Interface 用户指南中的为 AWS Command Line Interface 指定参数值

首先创建数据集并将用电量数据导入其中。

创建 Amazon Forecast 数据集
  1. 确定哪些域和数据集类型合适。

    您将导入数据集的训练数据会影响您选择的数据集域和类型。现在,让我们看一看用电量数据的一些示例行。

    2014-01-01 01:00:00, 2.53807106598985, client_0 2014-01-01 01:00:00, 23.648648648648624, client_1 2014-01-01 02:00:00, 9.648648648612345, client_0

    数据格式为 CSV(逗号分隔值),数据每小时收集一次(如时间戳所示)。它包含以下列:

    • 列 1 – 记录用电量时显示的时间戳。

    • 列 2 – 每小时用电量值(请注意时间戳值按小时增加的方式)。

    • 列 3 – 标识使用电力的客户的客户端 ID 值。

    对于此数据,请选择以下预定义的数据集域和数据集类型:

    • 自定义域 – METRICS、RETAIL 或 WEB_TRAFFIC 等数据集域均不适用于此数据,因此请选择自定义域。

    • 目标时间序列类型 – 该数据是时间序列,因为它跟踪用电量随时间的变化情况。它还包含我们要预测的目标(列 2,用电量)。因此,请选择目标时间序列数据集类型。

      要了解您为何选择此类型,请参阅预定义数据集域和数据集类型

  2. 确定数据集架构。

    针对 CUSTOM 域的目标时间序列类型需要以下字段:timestamptarget_valueitem_idtarget_value 字段为目标。Amazon Forecast 为该字段生成预测。

    要将必填字段映射到您数据中的列,您应创建架构。架构中的每个属性都映射到数据中的一个字段。

    重要

    架构中属性的顺序必须与训练数据中字段的顺序匹配。

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

    现在,您具有创建数据集并将数据导入其中所需的信息。

  3. 创建数据集。

    aws forecast create-dataset \ --dataset-name electricity_demand_ds \ --domain CUSTOM \ --dataset-type TARGET_TIME_SERIES \ --data-frequency H \ --schema '{ "Attributes": [ { "AttributeName": "timestamp", "AttributeType": "timestamp" }, { "AttributeName": "target_value", "AttributeType": "float" }, { "AttributeName": "item_id", "AttributeType": "string" } ] }'

    在请求中,data-frequencyH 表示每小时的数据收集频率。以下为响应示例。

    { "DatasetArn": "arn:aws:forecast:us-west-2:acct-id:dataset/electricity_demand_ds" }

    有关此操作的更多信息,请参阅CreateDataset

  4. (可选)获取数据集的描述。

    aws forecast describe-dataset \ --dataset-arn arn:aws:forecast:us-west-2:acct-id:dataset/electricity_demand_ds

    以下为响应示例。

    { "DatasetName": "electricity_demand_ds", "DatasetArn": "arn:aws:forecast:us-west-2:acct-id:dataset/electricity_demand_ds", "CreationTime": 1564533087.907, "LastModificationTime": 1564533087.907, "Domain": "CUSTOM", "DatasetType": "TARGET_TIME_SERIES", "DataFrequency": "H", "Schema": { ... }, "EncryptionConfig": {}, "Status": "ACTIVE" }
    注意

    响应中密钥值对的顺序是任意的。

  5. 创建数据集组并向该组添加数据集。domain 参数的值必须与数据集的 domain 相匹配。

    aws forecast create-dataset-group \ --dataset-group-name electricity_ds_group \ --dataset-arns arn:aws:forecast:us-west-2:acct-id:dataset/electricity_demand_ds \ --domain CUSTOM

    以下为响应示例。

    { "DatasetGroupArn": "arn:aws:forecast:us-west-2:acct-id:dataset-group/electricity_ds_group" }

    有关此操作的更多信息,请参阅CreateDatasetGroup

  6. (可选)获取数据集组的描述。

    aws forecast describe-dataset-group \ --dataset-group-arn arn:aws:forecast:us-west-2:acct-id:dataset-group/electricity_ds_group

    以下为响应示例。

    { "DatasetGroupName": "electricity_ds_group", "DatasetGroupArn": "arn:aws:forecast:us-west-2:acct-id:dataset-group/electricity_ds_group", "DatasetArns": [ "arn:aws:forecast:us-west-2:acct-id:dataset-group/electricity_ds_group" ], "Domain": "CUSTOM", "CreationTime": 1564533719.852, "LastModificationTime": 1564533719.852, "Status": "ACTIVE" }
  7. 将用电量训练数据从您的 Amazon S3 存储桶导入数据集。您提供的 IAM 角色必须有权从您的 S3 存储桶读取数据。有关如何创建 IAM 角色的信息,请参阅 为 Amazon Forecast 创建 IAM 角色 (AWS CLI)

    aws forecast create-dataset-import-job \ --dataset-arn arn:aws:forecast:us-west-2:acct-id:dataset/electricity_demand_ds \ --dataset-import-job-name electricity_ds_import_job \ --data-source '{ "S3Config": { "Path": "s3://bucket/electricityusagedata.csv", "RoleArn": "arn:aws:iam::acct-id:role/Role" } }'

    以下是 data-source 参数的缩写语法。

    --data-source S3Config="{Path='s3://bucket/electricityusagedata.csv',RoleArn='arn:aws:iam::acct-id:role/Role'}"

    以下为响应示例。

    { "DatasetImportJobArn": "arn:aws:forecast:us-west-2:acct-id:dataset-import-job/electricity_demand_ds/electricity_ds_import_job" }

    有关此操作的更多信息,请参阅CreateDatasetImportJob

  8. 检查导入状态。

    aws forecast describe-dataset-import-job \ --dataset-import-job-arn arn:aws:forecast:us-west-2:acct-id:dataset-import-job/electricity_demand_ds/electricity_ds_import_job

    以下为响应示例。

    { "DatasetImportJobName": "electricity_ds_import_job", "DatasetImportJobArn": "arn:aws:forecast:us-west-2:acct-id:dataset-import-job/electricity_demand_ds/electricity_ds_import_job", "DatasetArn": "arn:aws:forecast:us-west-2:acct-id:dataset/electricity_demand_ds", "DataSource": { "S3Config": { "Path": "s3://bucket/electricityusagedata.csv", "RoleArn": "arn:aws:iam::acct-id:role/ForecastRole" } }, "DataSize": 0.14639010466635227, "TimeStampFormat": "yyyy-MM-dd HH:mm:ss", "CreationTime": 1564537011.114, "LastModificationTime": 1564537028.223, "Status": "CREATE_IN_PROGRESS" }

    当所有数据已导入时,状态将变为 ACTIVE 并且响应将包含这些数据的统计信息,如以下示例所示。

    { "DatasetArn": "arn:aws:forecast:us-west-2:acct-id:dataset/electricity_demand_ds", "Status": "ACTIVE", "FieldStatistics": { "date": { "Min": "2014-01-01T01:00:00Z", "Max": "2015-01-01T00:00:00Z", "Count": 3241200, "CountDistinct": 8760, "CountNull": 0 }, "target": { "Min": "0.0", "Max": "168200.0", "Avg": 606.5167610461679, "Stddev": 3518.405223972031, "Count": 3241200, "CountDistinct": 1196961, "CountNull": 0, "CountNan": 0 }, "item": { "Count": 3241200, "CountDistinct": 370, "CountNull": 0 } }, ... }
    重要

    您必须等到状态变为 ACTIVE,然后再使用数据集组创建预测。

    有关此操作的更多信息,请参阅DescribeDatasetImportJob

要创建预测器,请使用CreateAutoPredictor操作并提供以下信息。

  • 预测器名称 - 为预测器命名,以便您可以将其与其他预测器区分开来

  • 数据集组 - 您在上述步骤中创建了该数据集组。

  • 预测频率 - 预测的粒度(每小时、每天、每周等)。

  • 预测范围 - 预测的时间步数。

创建预测器后,您将检查 Amazon Forecast 生成的准确性指标。这些指标可帮助您决定是否使用预测器来生成预测。有关预测器的更多信息,请参阅训练预测器

创建预测器并检查准确性指标
  1. 创建预测器。

    aws forecast create-predictor \ --predictor-name electricitypredictor \ --input-data-config DatasetGroupArn="arn:aws:forecast:us-west-2:acct-id:dsgroup/electricity_ds_group" \ --forecast-horizon 36 \ --forecast-frequency D

    以下为响应示例。

    { "PredictorArn": "arn:aws:forecast:us-west-2:acct-id:predictor/electricitypredictor" }
  2. 获取预测器的状态。

    aws forecast describe-predictor \ --predictor-arn arn:aws:forecast:us-west-2:acct-id:predictor/electricitypredictor

    以下为响应示例。

    { "PredictorArn": "arn:aws:forecast:<region>:<acct-num>:predictor/electricitypredictor", "PredictorName": "electricitypredictor", "ForecastHorizon": 36, "ForecastTypes": [ "0.1", "0.5", "0.9" ], "ForecastFrequency": "D", "DatasetImportJobArns": [ "arn:aws:forecast:<region>:<acct-num>:dataset-import-job/getting_started_dataset/gs_import" ], "DataConfig": { "DatasetGroupArn": "arn:aws:forecast:<region>:<acct-num>:dataset-group/getting_started", "AttributeConfigs": [ { "AttributeName": "target_value", "Transformations": { "aggregation": "sum", "backfill": "zero", "frontfill": "none", "middlefill": "zero" } } ] }, "EstimatedTimeRemainingInMinutes": 97, "Status": "CREATE_IN_PROGRESS", "CreationTime": "2022-02-23T09:26:24.643000-08:00", "LastModificationTime": "2022-02-23T09:49:26.899000-08:00", "ExplainabilityInfo": { "Status": "NOT_AVAILABLE" } }
    重要

    模型训练需要时间。在训练完成且预测器的状态变为 ACTIVE 之前,请勿继续操作。

  3. 获取预测器的准确性指标。

    aws forecast get-accuracy-metrics \ --predictor-arn arn:aws:forecast:us-west-2:acct-id:predictor/electricitypredictor

    以下为响应示例。

    { "PredictorEvaluationResults": [ { "TestWindows": [ { "EvaluationType": "SUMMARY", "Metrics": { "RMSE": 448.19602551622864, "WeightedQuantileLosses": [ { "Quantile": 0.9, "LossValue": 0.11574311406253326 }, { "Quantile": 0.5, "LossValue": 0.1706269067283527 }, { "Quantile": 0.1, "LossValue": 0.11724164222477837 } ] } }, { "EvaluationType": "COMPUTED", "Metrics": { "RMSE": 448.19602551622864, "WeightedQuantileLosses": [ { "Quantile": 0.9, "LossValue": 0.11574311406253326 }, { "Quantile": 0.5, "LossValue": 0.1706269067283527 }, { "Quantile": 0.1, "LossValue": 0.11724164222477837 } ] }, "TestWindowEnd": 1420070400.0, "TestWindowStart": 1420002000.0 } ] } ] }

    这些指标显示每个分位数的误差损失。例如,第一个分位数的误差为 11.7%。这些指标还显示均方根误差 (RMSE)。

    汇总指标显示所有测试窗口上的计算指标的平均值。由于只有一个测试窗口,因此汇总指标和计算指标相等。

    有关此操作的更多信息,请参阅GetAccuracyMetrics

Amazon Forecast 为数据集中每个唯一的 item_idtarget_value 字段(由数据集域和类型确定)创建预测。在本练习中,target_value 字段提供了用电量,item_id 提供了客户端 ID。您将获得客户的每小时用电量的预测。

在创建预测后,您可以查询单个项目或导出完整的预测。

创建、检索和导出预测
  1. 创建预测。

    aws forecast create-forecast \ --forecast-name electricityforecast \ --predictor-arn arn:aws:forecast:us-west-2:acct-id:predictor/electricitypredictor

    该操作使用预测器来创建预测。在响应中,您将获得预测的 Amazon 资源名称(ARN)。您可以使用此 ARN 来检索和导出预测。以下为响应示例。

    { "ForecastArn": "arn:aws:forecast:us-west-2:acct-id:forecast/electricityforecast" }

    有关此操作的更多信息,请参阅CreateForecast

  2. 检索 client_1 前两个小时的预测。

    注意

    服务名称 forecastquery 不同于其他地方使用的服务名称。

    aws forecastquery query-forecast \ --forecast-arn arn:aws:forecast:us-west-2:acct-id:forecast/electricityforecast \ --start-date 2015-01-01T00:00:00 \ --end-date 2015-01-01T02:00:00 \ --filters '{"item_id":"client_1"}'

    该操作包括以下参数。

    • start-dateend-date – 指定要为其检索预测的可选日期范围。如果您未指定这些参数,该操作将返回 client_1 的完整预测。

    • filters– 指定用于为 client_1 检索用电量预测的 item_id 筛选条件。

      以下是 filters 参数的缩写语法。

      --filters item_id="client_1"

    以下为响应示例。

    { "Forecast": { "Predictions": { "mean": [ { "Timestamp": "2015-01-01T01:00:00", "Value": 20.952411651611328 }, { "Timestamp": "2015-01-01T02:00:00", "Value": 19.11078453063965 } ], "p90": [ { "Timestamp": "2015-01-01T01:00:00", "Value": 24.524038314819336 }, { "Timestamp": "2015-01-01T02:00:00", "Value": 22.319091796875 } ], "p50": [ { "Timestamp": "2015-01-01T01:00:00", "Value": 20.7841739654541 }, { "Timestamp": "2015-01-01T02:00:00", "Value": 19.237524032592773 } ], "p10": [ { "Timestamp": "2015-01-01T01:00:00", "Value": 18.507278442382812 }, { "Timestamp": "2015-01-01T02:00:00", "Value": 16.15062141418457 } ] } } }

    由于这是一个每小时预测,因此响应将显示每小时预测值。在响应中,请注意以下内容:

    • mean – 对于特定日期和时间,均值是客户的预测平均用电量值。

    • p90p50p10 – 指定在指定日期和时间实际值将低于列出值的置信度。例如,在 2015-01-01T01:00:00,Amazon Forecast 有 90% 的信心认为用电量将低于 24.5。Amazon Forecast 有 50% 的信心认为用电量将低于 20.8,10% 的信心认为用电量将低于18.5。

    有关此操作的更多信息,请参阅QueryForecast

  3. 将完整预测导出到您的 Amazon S3 存储桶。您提供的 IAM 角色必须有权将数据写入您的 S3 存储桶。有关如何创建 IAM 角色的信息,请参阅 为 Amazon Forecast 创建 IAM 角色 (AWS CLI)

    创建预测导出作业。

    aws forecast create-forecast-export-job \ --forecast-export-job-name electricityforecast_exportjob \ --forecast-arn arn:aws:forecast:us-west-2:acct-id:forecast/electricityforecast \ --destination S3Config="{Path='s3://bucket',RoleArn='arn:aws:iam::acct-id:role/Role'}"

    以下为响应示例。

    { "ForecastExportJobArn": "arn:aws:forecast::us-west-2:acct-id:forecast-export/64bbc087" }

    有关此操作的更多信息,请参阅CreateForecastExportJob

  4. 获取导出作业的状态。

    aws forecast describe-forecast-export-job \ --forecast-export-job-arn arn:aws:forecast:us-west-2:acct-id:forecast/electricityforecast

    以下为响应示例。

    { "ForecastExportJobArn": "arn:aws:forecast::us-west-2:acct-id:forecast-export/64bbc087", "ForecastExportJobName": "electricityforecast_exportjob", "Status": "CREATE_IN_PROGRESS" }

    当状态为 ACTIVE 时,您可以查找指定 S3 存储桶中的预测文件。