入門 (AWS CLI) - Amazon Forecast

Amazon Forecast 不再提供給新客戶。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 值。

    對於此資料,選擇下列預先定義的資料集網域和資料集類型:

    • 自訂網域 — 沒有任何資料集網域 (例如指標、零售或 WEB_TRAVCESS) 適用於此資料,因此請選擇「自訂」網域。

    • 目標時間序列類型 — 資料是時間序列,因為它會追蹤一段時間的用電量。它還包含我們希望預測的目標 (欄 2,用電量)。因此,選擇目標時間序列資料集類型。

      若要了解為什麼您選擇此類型,請參閱預先定義的資料集網域和資料集類型

  2. 決定資料集的結構描述。

    CUSTOM網域 的目標時間序列類型需要這些欄位;timestamptarget_valueitem_id。該target_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 操作,並提供下列資訊。

  • 預測值名稱 — 為預測值提供一個名稱,以便您可以將其與其他預測值區分開來

  • 資料集群組 — 您在上一個步驟中建立了資料集群組。

  • Fo@@ recast 頻率 — 預測的粒度(每小時,每天,每週等)。

  • Forecast 總時程 — 預測的時間步長數。

建立預測值之後,您可以檢閱 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% 的誤差。量度也會顯示 root-mean-square 錯誤 (RMSE)。

    摘要指標會顯示在所有測試時段中運算的指標平均值。因為只有一個測試時段,因此摘要和運算的指標是相等的。

    如需此操作的詳細資訊,請參閱GetAccuracyMetrics

Amazon Forecast 會為資料集item_id中的每個唯一target_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 Resource Name (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— 指定要擷取電力預測的item_id過濾器client_1

      以下是 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— 就具體的日期和時間而言,平均數是客戶預測的平均用電量。

    • p90p50、和p10 — 指定在指定日期和時間,實際值將低於所列值的信賴等級。例如,在 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 儲存貯體中找到預測檔案。