

 Amazon Forecast 不再提供給新客戶。Amazon Forecast 的現有客戶可以繼續正常使用服務。[進一步了解」](https://aws.amazon.com/blogs/machine-learning/transition-your-amazon-forecast-usage-to-amazon-sagemaker-canvas/)

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 入門 (AWS CLI)
<a name="gs-cli"></a>

在本練習中，您可以使用 AWS Command Line Interface (AWS CLI) 來探索 Amazon Forecast。您可以建立 Amazon Forecast 資料集、訓練預測器，並使用產生的預測器來產生預測。開始之前，請確認您有 AWS 帳戶 且已設定 AWS CLI。如需詳細資訊，請參閱[設定](setup.md)。

**注意**  
此練習中的 AWS CLI 命令已在 Linux 上測試。如需在 Windows 上使用 AWS CLI 命令的相關資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[為 指定參數值 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html)。

## 步驟 1：匯入訓練資料
<a name="gs-create-ds"></a>

首先建立資料集，並匯入用電量資料。

**建立 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\$1TRAFFIC 等資料集網域都不適用於此資料，因此請選擇自訂網域。
   + 目標時間序列類型 – 資料是時間序列，因為它會追蹤一段時間內的用電量。它還包含我們希望預測的*目標* (欄 2，用電量)。因此，選擇目標時間序列資料集類型。

     若要了解為什麼您選擇此類型，請參閱[預先定義的資料集網域和資料集類型](howitworks-domains-ds-types.md)。

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

   [CUSTOM 網域](custom-domain.md) 的目標時間序列類型需要這些欄位；`timestamp`、`target_value` 和 `item_id`。`target_value` 欄位是目標。Amazon Forecast 會產生此欄位的預測。

   若要將必要欄位映射至資料中的欄，您需要建立結構描述。結構描述中的每個*屬性*都會映射到資料中的欄位。
**重要**  
結構描述中屬性的順序必須符合訓練資料中欄位的順序。

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

   您現在擁有建立資料集以及匯入資料所需的資訊。

1. 建立資料集。

   ```
   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-frequency` 值 `H` 代表每小時一次的資料收集頻率。以下是回應範例。

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

   如需此操作的詳細資訊，請參閱[CreateDataset](API_CreateDataset.md)。

1. (選用) 取得資料集的描述。

   ```
   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"
   }
   ```
**注意**  
回應中鍵值對的順序是任意的。

1. 建立資料集群組並將資料集新增至其中。`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](API_CreateDatasetGroup.md)。

1. (選用) 取得資料集群組的描述。

   ```
   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"
   }
   ```

1. 將電力用量訓練資料從 Amazon S3 儲存貯體匯入資料集。您提供的 IAM 角色必須具有從 S3 儲存貯體讀取資料的許可。如需如何建立 IAM 角色的資訊，請參閱 [建立 Amazon Forecast 的 IAM 角色 (AWS CLI)](aws-forecast-iam-roles.md#aws-forecast-create-iam-role-with-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](API_CreateDatasetImportJob.md)。

1. 檢查匯入狀態。

   ```
   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](API_DescribeDatasetImportJob.md)。

## 步驟 2：建立預測器
<a name="gs-create-predictor"></a>

若要建立預測器，您可以使用 [CreateAutoPredictor](API_CreateAutoPredictor.md) 操作，並提供下列資訊。
+ **預測器名稱** – 為預測器命名，以便與其他預測器區分開來
+ **資料集群組** – 您在上一個步驟中建立資料集群組。
+ **預測頻率** – 預測的精細程度 （每小時、每日、每週等）。
+ **預測時間範圍** – 預測的步驟次數。

建立預測器後，您將檢閱 Amazon Forecast 所產生的準確性指標。此指標可協助您決定是否要使用該預測器來產生預測。如需預測器的詳細資訊，請參閱[訓練預測器](howitworks-predictor.md)。

**建立預測器和檢閱準確性指標**

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"
   }
   ```

1. 取得預測器的狀態。

   ```
   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 之前不要繼續。

1. 取得預測器的準確性指標。

   ```
   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](API_GetAccuracyMetrics.md)。

## 步驟 3：建立預測
<a name="gs-create-campaign"></a>

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](API_CreateForecast.md)。

1. 擷取 `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-date` 和 `end-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` – 對於特定日期和時間，平均值是客戶的預測平均用電量值。
   + `p90`、 `p50`和 `p10`- 指定在指定日期和時間，實際值將低於所列值的可信度等級。例如，在 2015-01-01T01：00：00，Amazon Forecast 有 90% 的信心電力用量會低於 24.5。Amazon Forecast 50% 的確信用量會低於 20.8，而 10% 的確信用量會低於 18.5。

   如需此操作的詳細資訊，請參閱[QueryForecast](API_forecastquery_QueryForecast.md)。

1. 將完整預測匯出至 Amazon S3 儲存貯體。您提供的 IAM 角色必須具有將資料寫入 S3 儲存貯體的許可。如需如何建立 IAM 角色的資訊，請參閱 [建立 Amazon Forecast 的 IAM 角色 (AWS CLI)](aws-forecast-iam-roles.md#aws-forecast-create-iam-role-with-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](API_CreateForecastExportJob.md)。

1. 取得匯出任務的狀態。

   ```
   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 儲存貯體中找到預測檔案。