

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

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

# Amazon Forecast 演算法
<a name="aws-forecast-choosing-recipes"></a>

Amazon Forecast 預測器使用演算法來訓練具有時間序列資料集的模型。然後，訓練的模型會用來產生指標和預測。

 如果您不確定要使用哪種演算法來訓練模型，請在建立預測器時選擇 AutoML，並讓預測人員訓練資料集的最佳模型。否則，您可以手動選取其中一個 Amazon Forecast 演算法。

**Python 筆記本**  
如需使用 AutoML step-by-step指南，請參閱 [ AutoML 入門](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Getting_started_with_AutoML/Getting_started_with_AutoML.ipynb)。

## 內建預測演算法
<a name="forecast-algos"></a>

 Amazon Forecast 提供六個內建演算法供您選擇。這些範圍包括常用的統計演算法，例如 Autoregressive Integrated Moving Average (ARIMA)，以及複雜的神經網路演算法，例如 CNN-QR 和 DeepAR\$1。

### [CNN-QR](aws-forecast-algo-cnnqr.md)
<a name="cnnqr"></a>

 `arn:aws:forecast:::algorithm/CNN-QR` 

 Amazon Forecast CNN-QR，卷積神經網路 - 量化迴歸，是一種專有的機器學習演算法，用於使用因果卷積神經網路 (CNNs) 預測時間序列。CNN-QR 最適合包含數百個時間序列的大型資料集。它接受項目中繼資料，並且是唯一接受相關時間序列資料的預測演算法，而沒有未來的值。

### [DeepAR\$1](aws-forecast-recipe-deeparplus.md)
<a name="deeparplus"></a>

`arn:aws:forecast:::algorithm/Deep_AR_Plus`

 Amazon Forecast DeepAR\$1 是一種專有的機器學習演算法，用於使用遞歸神經網路 (RNNs) 預測時間序列。DeepAR\$1 最適合包含數百個特徵時間序列的大型資料集。演算法接受前瞻相關時間序列和項目中繼資料。

### [Prophet](aws-forecast-recipe-prophet.md)
<a name="prophet"></a>

`arn:aws:forecast:::algorithm/Prophet`

 Prophet 是一種時間序列預測演算法，以附加模型為基礎，其中非線性趨勢符合每年、每週和每日季節性。它最適合具有強烈季節性效果和數個季節歷史資料的時間序列。

### [NPTS](aws-forecast-recipe-npts.md)
<a name="npts"></a>

`arn:aws:forecast:::algorithm/NPTS`

 Amazon Forecast 非參數時間序列 (NPTS) 專屬演算法是可擴展、概率的基準預測器。NPTS 在處理稀疏或間歇時間序列時特別有用。預測提供四種演算法變體：標準 NPTS、季節性 NPTS、氣候預測器和季節性氣候預測器。

### [ARIMA](aws-forecast-recipe-arima.md)
<a name="arima"></a>

`arn:aws:forecast:::algorithm/ARIMA`

 自動迴歸整合移動平均 (ARIMA) 是一種常用的統計演算法，用於時間序列預測。此演算法對於具有低於 100 個時間序列的簡單資料集特別有用。

### [ETS](aws-forecast-recipe-ets.md)
<a name="ets"></a>

`arn:aws:forecast:::algorithm/ETS`

 指數平滑 (ETS) 是用於時間序列預測的常用統計演算法。該演算法對於具有 100 個時間序列以下的簡單資料集以及具有季節性模式的資料集特別有用。ETS 計算時間序列資料集中所有觀測值的加權平均值作為其預測，權重隨著時間的推移呈指數下降。

## 比較預測演算法
<a name="comparing-algos"></a>

 使用下表尋找時間序列資料集的最佳選項。


|  | 神經網路 | 彈性本機演算法 | 基準演算法 |  | CNN-QR | DeepAR\$1 | Prophet | NPTS | ARIMA | ETS | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 運算密集的訓練程序 | 高 | 高 | 中 | 低 | 低 | 低 | 
| 接受歷史相關時間序列\$1 | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | 
| 接受前瞻相關時間序列\$1 | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | 
| 接受項目中繼資料 （產品顏色、品牌等） | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | 
| 接受內建特徵化的天氣索引 | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | 
| 適用於稀疏資料集 | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | 
| 執行超參數最佳化 (HPO) | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | 
| 允許覆寫預設超參數值  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/icon-no.png)  | 

\$1如需相關時間序列的詳細資訊，請參閱[相關時間序列](related-time-series-datasets.md)。

# 整合移動平均自回歸模型 (ARIMA) 演算法
<a name="aws-forecast-recipe-arima"></a>

整合移動自回歸模型 ([ARIMA](https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average)) 是一種常用的本機統計演算法針對時間序列預測。ARIMA 擷取輸入資料集內的標準時間結構 (規律的時間組織)。Amazon Forecast ARIMA 演算法會在 Comprehensive R Archive Network (CRAN) `Package 'forecast'`的 中呼叫 [Arima 函數](https://cran.r-project.org/web/packages/forecast/forecast.pdf#Rfn.Arima.1)。

## ARIMA 的運作方式
<a name="aws-forecast-recipe-arima-how-it-works"></a>

ARIMA 演算法特別適用於可對應到固定時間序列的資料集。固定的時間序列的統計屬性，例如自回歸模型，與時間無關。資料集的固定時間序列通常由信號和雜訊組成。信號有可能呈現正弦振盪模式或具有季節性成分。ARIMA 的作用類似於過濾器，可將信號與雜訊分離，然後推導未來的信號以進行預測。

## ARIMA 的超參數和調校
<a name="aws-forecast-recipe-arima-hyperparamters"></a>

如需有關 ARIMA 超參數和調校的資訊，請參閱 [CRAN](https://cran.r-project.org) [套件「預測」](https://cran.r-project.org/web/packages/forecast/forecast.pdf)中的`Arima`函數文件。

Amazon Forecast 會使用下表，將 [CreateDataset](API_CreateDataset.md)操作中指定的 `DataFrequency` 參數轉換為 R [ts](https://www.rdocumentation.org/packages/stats/versions/3.6.1/topics/ts) 函數的 `frequency` 參數：


| DataFrequency (字串) | R ts frequency (整數) | 
| --- | --- | 
| Y | 1 | 
| M | 12 | 
| W | 52 | 
| D | 7 | 
| H | 24 | 
| 30min | 2 | 
| 15min | 4 | 
| 10min | 6 | 
| 5min | 12 | 
| 1min | 60 | 

對於小於 24 或短時間序列的頻率，會使用 `Package 'forecast'` [CRAN](https://cran.r-project.org) 的 `auto.arima`函數設定超參數。對於大於或等於 24 的頻率和長時間序列，我們使用 Fourier 序列與 K = 4，如這裡所述，[以長季節期間預測](https://robjhyndman.com/hyndsight/longseasonality/)。

不在資料表中的支援資料頻率預設為 1 的 `ts` 頻率。

# CNN-QR 演算法
<a name="aws-forecast-algo-cnnqr"></a>

 Amazon Forecast CNN-QR，卷積神經網路 - 量化迴歸，是一種專有的機器學習演算法，用於使用因果卷積神經網路 (CNNs) 預測純量 （一維） 時間序列。此監督式學習演算法會從大量時間序列中訓練一個全域模型，並使用四分位數解碼器進行概率預測。

**Topics**
+ [CNN-QR 入門](#aws-forecast-algo-cnnqr-getting-started)
+ [CNN-QR 的運作方式](#aws-forecast-algo-cnnqr-how-it-works)
+ [搭配 CNN-QR 使用相關資料](#aws-forecast-algo-cnnqr-using-rts)
+ [CNN-QR 超參數](#aws-forecast-algo-cnnqr-hyperparameters)
+ [使用秘訣與最佳實務](#aws-forecast-algo-cnnqr-tips)

## CNN-QR 入門
<a name="aws-forecast-algo-cnnqr-getting-started"></a>

 您可以透過兩種方式使用 CNN-QR 訓練預測器：

1. 手動選取 CNN-QR 演算法。

1. 選擇 AutoML (CNN-QR 是 AutoML 的一部分）。

 如果您不確定要使用哪種演算法，建議您選取 AutoML，如果 CNN-QR 是資料最準確的演算法，則預測會選取 CNN-QR。若要查看是否已選取 CNN-QR 做為最準確的模型，請使用 [DescribePredictor](https://docs.aws.amazon.com/forecast/latest/dg/API_DescribePredictor.html) API 或在主控台中選擇預測器名稱。

以下是 CNN-QR 的一些關鍵使用案例：
+  **使用大型且複雜的資料集進行預測** - CNN-QR 在使用大型且複雜的資料集進行訓練時，效果最佳。神經網路可以跨許多資料集學習，當您有相關的時間序列和項目中繼資料時，這很有用。
+  **具有歷史相關時間序列的預測** - CNN-QR 不需要相關時間序列，即可在預測期間包含資料點。此增加的彈性可讓您包含更廣泛的相關時間序列和項目中繼資料，例如項目價格、事件、Web 指標和產品類別。

## CNN-QR 的運作方式
<a name="aws-forecast-algo-cnnqr-how-it-works"></a>

CNN-QR 是一種sequence-to-sequence(Seq2Seq) 模型，用於概率預測，以編碼序列為條件，測試預測重建解碼序列的能力。

演算法允許編碼和解碼序列中的不同功能，因此您可以在編碼器中使用相關的時間序列，並從解碼器中省略它 （反之亦然）。根據預設，編碼器和解碼器中都會包含預測期間具有資料點的相關時間序列。沒有預測期間資料點的相關時間序列只會包含在編碼器中。

CNN-QR 會執行四分位數迴歸，並以階層式因果 CNN 做為可學習的特徵擷取器。

為了促進學習與時間相關的模式，例如週末的尖峰，CNN-QR 會根據時間序列精細程度自動建立特徵時間序列。例如，CNN-QR 會以每週時間序列頻率建立兩個特徵時間序列 (day-of-monthday-of-year。演算法使用這些衍生特徵時間序列，以及訓練和推論期間提供的自訂特徵時間序列。下列範例顯示目標時間序列、 `zi,t`和兩個衍生的時間序列功能： `ui,1,t`代表一天的小時， `ui,2,t`代表一週的一天。

![\[\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/cnnqr-time-frequencies.PNG)


CNN-QR 會根據資料頻率和訓練資料的大小，自動包含這些特徵時間序列。下表列出可針對每個支援的基本時間頻率衍生的特徵。


****  

| 時間序列的頻率 | 衍生特徵 | 
| --- | --- | 
| 分鐘 | 小時中的分鐘、一天的幾時、星期幾、月中的日、年中的日 | 
| 小時 | 一天的幾時、星期幾、月中的日、年中的日 | 
| 天 | 星期幾、月中的日、年中的日 | 
| 週 | week-of-month、week-of-year | 
| 月 | 年中的月 | 

在訓練期間，訓練資料集中的每個時間序列都包含一組相鄰的內容和預測時段，具有固定的預先定義長度。這會顯示在下圖中，其中內容視窗以綠色表示，而預測視窗以藍色表示。

您可以使用在指定訓練集上訓練的模型，為訓練集中的時間序列以及其他時間序列產生預測。訓練資料集包含目標時間序列，可能與相關時間序列和項目中繼資料的清單相關聯。

下圖顯示這對於 編製索引之訓練資料集的 元素如何運作`i`。訓練資料集包含目標時間序列、 `zi,t`和兩個相關聯的時間序列，`xi,1,t`以及 `xi,2,t`。第一個相關的時間序列 `xi,1,t`是前瞻性的時間序列，第二個 `xi,2,t`是歷史時間序列。

![\[\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/cnnqr-short-long-rts.png)


CNN-QR 會跨目標時間序列、 `zi,t`和相關時間序列，`xi,1,t`以及 學習`xi,2,t`，以在預測視窗中產生預測，以橘色行表示。

## 搭配 CNN-QR 使用相關資料
<a name="aws-forecast-algo-cnnqr-using-rts"></a>

 CNNQR 同時支援歷史和未來相關時間序列資料集。如果您提供前瞻相關時間序列資料集，則任何遺失值都會使用[未來的填充方法來](howitworks-missing-values.md)填充。如需歷史和未來相關時間序列的詳細資訊，請參閱[使用相關時間序列資料集](related-time-series-datasets.md)。

您也可以搭配 CNN-QR 使用項目中繼資料資料集。這些是具有目標時間序列中項目靜態資訊的資料集。項目中繼資料對於冷啟動預測案例特別有用，其中幾乎沒有歷史資料。如需項目中繼資料的詳細資訊，請參閱[項目中繼資料。](item-metadata-datasets.md)

## CNN-QR 超參數
<a name="aws-forecast-algo-cnnqr-hyperparameters"></a>

 Amazon Forecast 會在選取的超參數上最佳化 CNN-QR 模型。手動選取 CNN-QR 時，您可以選擇傳遞這些超參數的訓練參數。下表列出 CNN-QR 演算法的可調校超參數。


| 參數名稱 | 值 | 描述 | 
| --- | --- | --- | 
| context\$1length |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  |  模型在進行預測之前讀取的時間點數量。一般而言，CNN-QR 的值`context_length`大於 DeepAR\$1，因為 CNN-QR 不會使用延遲來查看進一步的歷史資料。 如果 的值`context_length`在預先定義的範圍之外，CNN-QR 會自動將預設值設為`context_length`適當的值。  | 
| use\$1related\$1data |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  |  決定要包含在模型中的相關時間序列資料類型。 選擇四個選項之一： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-algo-cnnqr.html) `HISTORICAL` 包含所有歷史相關時間序列，並`FORWARD_LOOKING`包含所有前瞻相關時間序列。您無法選擇 `HISTORICAL`或`FORWARD_LOOKING`相關時間序列的子集。  | 
| use\$1item\$1metadata |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  |  決定模型是否包含項目中繼資料。 選擇兩個選項之一： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-algo-cnnqr.html) `use_item_metadata` 包含所有提供的項目中繼資料或無。您無法選擇項目中繼資料的子集。  | 
| epochs |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  |  通過訓練資料的完成次數。較小的資料集需要更多 epoch。 對於 `ForecastHorizon`和 的大型值`context_length`，請考慮減少 epoch，以改善訓練時間。  | 

### 超參數最佳化 (HPO)
<a name="aws-forecast-algo-cnnqr-hpo"></a>

超參數最佳化 (HPO) 是為特定學習目標選取最佳超參數值的任務。使用預測，您可以透過兩種方式自動化此程序：

1. 選擇 AutoML 和 HPO 會自動執行 CNN-QR。

1. 手動選取 CNN-QR 並設定 `PerformHPO = TRUE`。

其他相關的時間序列和項目中繼資料不一定能改善 CNN-QR 模型的準確性。當您執行 AutoML 或啟用 HPO 時，CNN-QR 會使用和不使用提供的相關時間序列和項目中繼資料來測試模型的準確性，並選取具有最高準確性的模型。

Amazon Forecast 會在 HPO 期間自動最佳化下列三個超參數，並提供您最終訓練的值：
+ **context\$1length** - 決定網路可看到的過去距離。HPO 程序會自動設定 的值`context_length`，以最大化模型準確性，同時考慮訓練時間。
+ **use\$1related\$1data** - 決定要包含在模型中的相關時間序列資料形式。HPO 程序會自動檢查您的相關時間序列資料是否改善模型，並選取最佳設定。
+ **use\$1item\$1metadata** - 決定是否在模型中包含項目中繼資料。HPO 程序會自動檢查您的項目中繼資料是否改善模型，並選擇最佳設定。

**注意**  
如果 `use_related_data` 設為 `NONE`或選取`Holiday`補充功能`HISTORICAL`時，這表示包含假日資料不會改善模型準確性。

如果您在手動選取`PerformHPO = TRUE`期間設定 ，則可以設定`context_length`超參數的 HPO 組態。不過，如果您選擇 AutoML，則無法變更 HPO 組態的任何層面。如需 HPO 組態的詳細資訊，請參閱 [IntergerParameterRange](https://docs.aws.amazon.com/forecast/latest/dg/API_IntegerParameterRange.html) API。

## 使用秘訣與最佳實務
<a name="aws-forecast-algo-cnnqr-tips"></a>

 **避免 ForecastHorizon 的大型值** - 針對 使用超過 100 的值`ForecastHorizon`，將增加訓練時間並降低模型準確度。如果您想要進一步預測未來，請考慮彙總到更高的頻率。例如，使用 `5min` 代替 `1min`。

 **CNNs更高的內容長度** - 使用 CNN-QR，您可以設定`context_length`略高於 DeepAR\$1 的 ，因為 CNNs通常比 RNNs 更有效率。

 **相關資料的功能工程** - 訓練模型時，使用相關時間序列和項目中繼資料的不同組合進行實驗，並評估額外資訊是否可提高準確性。相關時間序列和項目中繼資料的不同組合和轉換將提供不同的結果。

 **CNN-QR 不會在平均四分位數進行預測 ** – 當您`mean`使用 [ CreateForecast](https://docs.aws.amazon.com/forecast/latest/dg/API_CreateForecast.html) API 將 `ForecastTypes`設為 時，預測會在中位數四分位數 (`0.5` 或 ) 產生`P50`。

# DeepAR\$1 演算法
<a name="aws-forecast-recipe-deeparplus"></a>

Amazon Forecast DeepAR\$1 是一種監督式學習演算法，利用遞歸神經網路 (RNNs) 來預測純量 (單一維度) 時間序列。古典的預測方法，例如整合移動平均自回歸模型 (ARIMA) 或指數平滑法 (ETS)，針對每個個別的時間序列採用單一模型，然後使用該模型來推算未來的時間序列。但是在許多應用程式中，您在一組橫截面單位會有許多類似的時間序列。這些時間序列分組需要不同的產品、伺服器負載和網頁請求。在這種情況下，針對所有時間序列，來聯合訓練單一模型，可以帶來效益。DeepAR\$1 採用此方法。當您的資料集包含數百個特徵時間序列，DeepAR\$1 演算法優於標準 ARIMA 和 ETS 方法。您也可以使用訓練模型來對類似其已訓練過的新時間序列產生預測。

**Python 筆記本**  
如需使用 DeepAR\$1 step-by-step指南，請參閱 [ DeepAR\$1 入門](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Getting_started_with_DeepAR%2B/Getting_started_with_DeepAR%2B.ipynb)。

**Topics**
+ [DeepAR\$1 運作方式](#aws-forecast-recipe-deeparplus-how-it-works)
+ [DeepAR\$1 超參數](#aws-forecast-recipe-deeparplus-hyperparameters)
+ [調校 DeepAR\$1 模型](#aws-forecast-recipe-deeparplus-tune-model)

## DeepAR\$1 運作方式
<a name="aws-forecast-recipe-deeparplus-how-it-works"></a>

在訓練期間，DeepAR\$1 使用訓練資料集和選用的測試資料集。它使用測試資料集來評估訓練模型。一般而言，訓練和測試資料集不必包含相同的時間序列。您可以使用對指定訓練集進行訓練的模型，對訓練集中時間序列的未來以及其他時間序列產生預測。訓練和測試資料集都包含 (最好不只一個) 目標時間序列。或者，它們可以與特徵時間序列的向量和分類特徵的向量相關聯 （如需詳細資訊，請參閱 *SageMaker AI 開發人員指南*中的 [DeepAR 輸入/輸出界面](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html#deepar-inputoutput))。以下範例顯示其對於依據 `i` 編製索引之訓練資料集元素的運作方式。訓練資料集包含目標時間序列 `zi,t`，以及兩個關聯特徵時間序列 `xi,1,t` 和 `xi,2,t`。

![\[\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.base.png)


目標時間序列可能包含遺漏值 (在圖中以時間序列的中斷點表示)。DeepAR\$1 僅支援未來已知的特徵時間序列。這可讓您執行反事實的「what-if」案例。例如，「如果我以某種方式變更產品的價格，會發生什麼事？」 

每個目標時間序列也可以與多個分類特徵建立關聯。您可以使用這些來編碼時間序列屬於特定群組。使用類別特徵可讓模型了解這些分組的典型行為，以提高準確性。模型透過學習每個群組的內嵌向量 (用於擷取群組中所有時間序列的共通屬性) 來實作這件事。

為了促進學習時間相依模式，例如週末的尖峰值，DeepAR\$1 會根據時間序列精細程度自動建立特徵時間序列。例如，DeepAR\$1 會以每週時間序列的頻率，建立兩個特徵時間序列 (一個月的某一天和一年的某一天)。它會使用這些衍生特徵時間序列搭配您在訓練和推論期間提供的自訂特徵時間序列。以下範例顯示兩個衍生時間序列特徵：`ui,1,t` 代表一天中小時，而 `ui,2,t` 代表星期幾。

![\[\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.derived.png)


DeepAR\$1 會根據資料頻率和訓練資料的大小，自動包含這些特徵時間序列。下表列出可針對每個支援的基本時間頻率衍生的特徵。


****  

| 時間序列的頻率 | 衍生特徵 | 
| --- | --- | 
| 分鐘 | 小時中的分鐘、一天的幾時、星期幾、月中的日、年中的日 | 
| 小時 | 一天的幾時、星期幾、月中的日、年中的日 | 
| 天 | 星期幾、月中的日、年中的日 | 
| 週 | week-of-month、week-of-year | 
| 月 | 年中的月 | 

DeepAR\$1 模型透過從訓練資料集的每個時間序列隨機取樣數個訓練範例來接受訓練。每個訓練範例都包括一對相鄰內容和具有固定預先定義長度的預測視窗。`context_length` 超參數控制網路可以看到多遠的過去，而 `ForecastHorizon` 參數控制可對多遠的未來進行預測。在訓練期間，Amazon Forecast 會忽略訓練資料集內時間序列短於指定預測長度的元素。以下範例顯示從元素 `i` 提取的五個範例，其文本內容長度 (以綠色醒目顯示) 為 12 小時、預測長度 (以藍色醒目顯示) 為 6 小時。為求簡潔，我們排除了特徵時間序列 `xi,1,t` 和 `ui,2,t`。

![\[\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.sampled.png)


為了擷取季節性模式，DeepAR\$1 也會從目標時間序列自動傳送延遲 (過去期間) 值。在我們每小時取樣一次的範例中，對於每個時間索引 `t = T`，模型會公開 `zi,t` 值 (發生在過去大約一天、兩天和三天，以粉紅色醒目顯示)。

![\[\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.lags.png)


進行推論時，訓練過的模型會接受目標時間序列做為輸入 (這些時間序列在訓練時不一定使用過)，並預測下一個 `ForecastHorizon` 值的概率分佈。由於 DeepAR\$1 是以整個資料集進行訓練，因此預測會將來自類似時間序列的學會模式列入考慮。

如需 DeepAR\$1 背後數學的相關資訊，請參閱康乃爾大學圖書館網站上的 [DeepAR：利用遞歸神經網路來進行機率預測](https://arxiv.org/abs/1704.04110)。

## DeepAR\$1 超參數
<a name="aws-forecast-recipe-deeparplus-hyperparameters"></a>

下表列出您可用於 DeepAR\$1 演算法中的超參數。粗體參數會參與超參數最佳化 (HPO)。


| 參數名稱 | Description | 
| --- | --- | 
| context\$1length |  模型在進行預測之前所讀取時間點的數量。此參數的值應和 `ForecastHorizon` 大致相同。模型也會從目標接收到延遲的輸入，因此 `context_length` 可能會比典型的季節週期小上許多。例如，每日時間序列可以有每年季節性。模型會自動包含一年的延遲年，因此內容的長度可能會比一年短。模型所選擇的延遲值，取決於時間序列的頻率。例如，每日頻率的延遲值為：前一週、2 週、3 週、4 週和一年。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| epochs |  針對培訓資料的最高傳遞次數。最佳值取決於您的資料大小和學習速率。較小的資料集和較低的學習率都需要更多 epoch，才能獲得良好的結果。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| learning\$1rate |  在訓練中所使用的學習率。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| learning\$1rate\$1decay |  學習率下降的速率。學習率最多可降低 `max_learning_rate_decays` 次，接著訓練停止。只有在 `max_learning_rate_decays` 大於 0 時，才會使用此參數。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| likelihood |  此模型會產生機率預測，並可提供分佈的分位數並傳回樣本。根據您的資料，選擇適合用來估計不確定性的可能性 (雜訊模型)。 有效值 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| max\$1learning\$1rate\$1decays |  應發生的學習率降低數上限。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html) | 
| num\$1averaged\$1models |  在 DeepAR\$1 中，訓練軌跡可以遇到多個模型。每個模型可能會有不同的預測優點和缺點。DeepAR\$1 可以平均模型行為，以利用所有模型的優點。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| num\$1cells |  要在 RNN 的每個隱藏層中使用的單元數。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| num\$1layers |  RNN 中隱藏層的數量。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 

## 調校 DeepAR\$1 模型
<a name="aws-forecast-recipe-deeparplus-tune-model"></a>

若要調校 Amazon Forecast DeepAR\$1 模型，請依照下列建議以最佳化訓練程序和硬體組態。

### 程序最佳化的最佳實務
<a name="aws-forecast-recipe-deeparplus-best-practices"></a>

 為了獲得最佳結果，請遵循以下建議：
+ 除了分割訓練和測試資料集以外，一律提供整個時間序列用於訓練和測試，以及呼叫模型以進行推論時。無論您如何設定 `context_length`，都不要分割時間序列或只提供一部分。對於延遲值特徵，模型將使用比 `context_length` 更往前的資料點。
+ 對於模型調校，您可以將資料集分割成訓練和測試資料集。在典型評估案例中，您應該在用於訓練的相同時間序列上測試模型，但是使用訓練期間可見的最後一個時間點之後的未來 `ForecastHorizon` 時間點。若要建立滿足這些條件的訓練和測試資料集，請使用整個資料集 (所有時間序列) 做為測試資料集，並從每個時間序列移除最後的 `ForecastHorizon` 點以用於訓練。這樣，在訓練期間，模型就看不到測試期間它所評估時間點的目標值。在測試階段，會保留測試資料集中每個時間序列最後的 `ForecastHorizon` 點，並產生預測。接著，會將預測值與最後 `ForecastHorizon` 點的實際值進行比較。您可以多次重複測試資料集內的時間序列，但在不同的終點切斷它們，藉以建立更複雜的評估。這會產生從不同時間點的多個預測進行平均的準確性指標。
+ 避免對 `ForecastHorizon` 使用非常大的值 (> 400)，因為這樣會使模型變慢而且較不準確。如果您想要進一步預測未來，請考慮彙總到更高的頻率。例如，使用 `5min` 代替 `1min`。
+ 由於延遲，模型可以比 `context_length` 看得更往前一點。因此，您不必將此參數設為大的值。此參數的良好起點是 `ForecastHorizon` 的相同值。
+ 使用盡可能多的時間序列來訓練 DeepAR\$1 模型。雖然在單一時間序列上訓練的 DeepAR\$1 模型可能已能良好運作，但標準預測方法 (例如 ARIMA 或 ETS) 可能更準確也更適合用於此使用案例。當您的資料集包含數百個特徵時間序列時，DeepAR\$1 會開始優於標準方法。目前，DeepAR\$1 要求所有訓練時間序列中可用的觀測總數至少為 300。

# 指數平滑法 (ETS) 演算法
<a name="aws-forecast-recipe-ets"></a>

指數平滑法 [(ETS)](https://en.wikipedia.org/wiki/Exponential_smoothing) 是一種常用的本機統計演算法針對時間序列預測。Amazon Forecast ETS 演算法會在 Comprehensive R Archive Network (CRAN) `Package 'forecast'`的 中呼叫 [ets 函數](https://cran.r-project.org/web/packages/forecast/forecast.pdf#Rfn.ets.1)。

## ETS 的運作方式
<a name="aws-forecast-recipe-ets-how-it-works"></a>

ETS 演算法特別適用於具備季節性和其他先前假設資料的資料集。ETS 會計算所有觀測的輸入時間序列資料集加權平均數，作為其預測。加權會隨著時間而逐漸下降，而不是簡單移動平均的常數加權平均法。加權取決於常數參數的值，這也稱為平滑參數。

## ETS 超參數和調校
<a name="aws-forecast-recipe-ets-hyperparamters"></a>

如需 ETS 超參數和調校的相關資訊，請參閱 [CRAN](https://cran.r-project.org) [套件預測](https://cran.r-project.org/web/packages/forecast/forecast.pdf)中的`ets`函數文件。

Amazon Forecast 會使用下表，將 [CreateDataset](API_CreateDataset.md)操作中指定的`DataFrequency`參數轉換為 R [ts](https://www.rdocumentation.org/packages/stats/versions/3.6.1/topics/ts) 函數的`frequency`參數：


| DataFrequency (字串) | R ts frequency (整數) | 
| --- | --- | 
| Y | 1 | 
| M | 12 | 
| W | 52 | 
| D | 7 | 
| H | 24 | 
| 30min | 2 | 
| 15min | 4 | 
| 10min | 6 | 
| 5min | 12 | 
| 1min | 60 | 

不在資料表中的支援資料頻率預設為 1 的 `ts` 頻率。

# 非參數時間序列 (NPTS) 演算法
<a name="aws-forecast-recipe-npts"></a>

Amazon Forecast 非參數時間序列 (NPTS) 演算法是一種可擴展的概率基線預測器。它透過從過去的觀察中抽樣來預測特定時間序列的未來值分佈。預測結果受到觀察值的限制。當時間序列是間歇性 (或稀疏的，包含許多 0) 和突增時，NPTS 會特別有用。例如，對於時間序列有很多低計數的個別項目，預測其需求。Amazon Forecast 提供 NPTS 的變體，它們對於採樣哪些過去的觀察值及採樣方式有所不同。若要使用 NPTS 變體，請選擇超參數設定。

## NPTS 的運作方式
<a name="aws-forecast-recipe-npts-how-it-works"></a>

與古典預測方法 (例如指數平滑法 (ETS) 和整合移動平均自回歸模型 (ARIMA)) 類似，NPTS 會為每個時間序列個別產生預測。資料集中的時間序列可以有不同的長度。有可用觀察值的時間點稱為訓練範圍，而期望預測的時間點稱為預測範圍。

Amazon Forecast NPTS 預測器提供下列變體：NTPS、季節性 NTPS、氣候預測器和季節性氣候預測器。

**Topics**
+ [NPTS](#aws-forecast-recipe-npts-variants-npts)
+ [季節性 NPTS](#aws-forecast-recipe-npts-variants-seasonal)
+ [氣候預測器](#aws-forecast-recipe-npts-variants-climatological)
+ [季節性氣候預測器](#aws-forecast-recipe-npts-variants-seasonal-climatological)
+ [季節性特徵](#aws-forecast-recipe-npts-seasonal-features)
+ [最佳實務](#aws-forecast-recipe-npts-recommended-practices)

### NPTS
<a name="aws-forecast-recipe-npts-variants-npts"></a>

在這個變體中，透過對時間序列訓練範圍內的所有觀察值進行採樣來產生預測。不過，這個變體不是從所有觀察中統一抽樣，而是根據與需要預測之目前時階距離多遠，來為每個過去的觀察值分配權重。特別是，它使用的權重會根據過去觀察值的距離呈指數衰減。利用這種方式，來自最近過去的觀察值的採樣機率，遠高於來自遙遠過去的觀察值。這裡假設近期過去比遙遠的過去更能預示未來。您可以使用 `exp_kernel_weights` 超參數來控制加權的衰減量。

若要在 Amazon Forecast 中使用此 NPTS 變體，請將 `use_seasonal_model` 超參數設為 `False` 並接受所有其他預設設定。

### 季節性 NPTS
<a name="aws-forecast-recipe-npts-variants-seasonal"></a>

季節性 NPTS 與 NPTS 類似，差別在於它不是從所有觀察中抽樣，而是僅使用過去*幾季*的觀察值。在預設情況下，季節取決於時間序列的精細程度。例如，對於每小時時間序列，若要預測第 *t* 小時，這個變體會從對應於前幾天的第 *t* 小時觀察中採樣。與 NPTS 類似的是，前一天第 *t* 小時的觀察值，會給予比更早幾天第 *t* 小時觀察值更多的權重。如需如何時間序列的精細程度來判斷季節性的詳細資訊，請參閱[季節性特徵](#aws-forecast-recipe-npts-seasonal-features)。

### 氣候預測器
<a name="aws-forecast-recipe-npts-variants-climatological"></a>

氣候預測器變體會以均勻機率對所有過去的觀察結果進行採樣。

若要使用氣候預測器，請將 `kernel_type` 超參數設定為 `uniform` 並將 `use_seasonal_model` 超參數設定為 `False`。對於所有其他超參數，接受預設設定。

### 季節性氣候預測器
<a name="aws-forecast-recipe-npts-variants-seasonal-climatological"></a>

與季節性 NPTS 類似，季節性氣候預測器會對過去幾季的觀察結果進行抽樣，但會以均勻機率來抽樣。

若要使用季節性氣候預測器，請將 `kernel_type` 超參數設定為 `uniform`。對於所有其他超參數，請接受所有其他預設設定。

### 季節性特徵
<a name="aws-forecast-recipe-npts-seasonal-features"></a>

若要判斷哪些項目對應至季節性 NPTS 和季節性氣候預測器的季節，請使用下表所列的特徵。下表根據精細程度，列出所支援基本時間頻率的衍生特徵。Amazon Forecast 包含這些特徵時間序列，因此您不需要提供。


****  

| 時間序列的頻率 | 決定季節性的特徵 | 
| --- | --- | 
| 分鐘 | 小時中的分鐘 | 
| 小時 | 一天的幾時 | 
| 天 | 週中的日 | 
| 週 | 月中的日 | 
| 月 | 年中的月 | 

### 最佳實務
<a name="aws-forecast-recipe-npts-recommended-practices"></a>

使用 Amazon Forecast NPTS 演算法時，請考慮準備資料和獲得最佳結果的以下最佳實務：
+ 由於 NPTS 會為每個時間序列個別產生預測結果，因此在呼叫模型以進行預測時，請提供整個時間序列。此外，也請接受 `context_length` 超參數的預設值。這會讓演算法使用整個時間序列。
+  如果您變更 `context_length` (因為訓練資料太長)，請確認它的大小足夠，可涵蓋多個過去季節。例如，對於每日時間序列，這個值必須至少有 365 天 (假設您擁有這麼多數量的資料)。

## NPTS 超參數
<a name="aws-forecast-recipe-npts-hyperparamters"></a>

下表列出您可用於 NPTS 演算法中的超參數。


| 參數名稱 | Description | 
| --- | --- | 
| context\$1length | 模型用於進行預測的過去時間點數量。在預設情況下，它會使用訓練範圍內的所有時間點。一般而言，這個超參數的值應該很大，也應該涵蓋多個過去的季節。例如，對於每日時間序列，這個值必須至少有 365 天。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| kernel\$1type | 核心，用來定義對過去觀察值進行採樣的權重。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| exp\$1kernel\$1weights |  只有在 `kernel_type` 為 `exponential` 時有效。 核心的擴展參數。如需對在遙遠過去的觀察值所給予權重的更快 (指數) 衰減，請使用大數值。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| use\$1seasonal\$1model | 是否使用季節性變體。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| use\$1default\$1time\$1features |  僅適用於*季節性 NPTS* 和*季節性氣候預測器*變體。 是否使用根據時間序列之精細程度的季節性特徵來判斷季節性。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 

# Prophet 演算法
<a name="aws-forecast-recipe-prophet"></a>

[Prophet](https://facebook.github.io/prophet/) 是一種熱門的本機 Bayesian 貝式結構時間序列模型。Amazon Forecast Prophet 演算法使用 [Prophet Python 實作的 Prophet 類別](https://facebook.github.io/prophet/docs/quick_start.html#python-ap)。

## Prophet 的運作方式
<a name="aws-forecast-recipe-prophet-how-it-works"></a>

Prophet 特別適用於資料集具備：
+ 包含很長時間 (數月或數年) 的詳細歷史觀察 (每小時、每天或每週)
+ 有多個強烈的季節性
+ 包括之前已知的重要 (但不規則) 的事件
+ 有遺漏的資料點或大型極端值
+ 有接近極限的非線性成長趨勢

Prophet 是附加的回歸模型，具備分段線性或邏輯成長曲線趨勢。它包含使用傅立葉序列的每年季節性元件模型，以及使用 dummy 變數的每週使用季節元件模型。

如需詳細資訊，請參閱 [Prophet：預測的比例](https://research.facebook.com/blog/2017/2/prophet-forecasting-at-scale/)。

## Prophet 超參數和相關時間序列
<a name="aws-forecast-recipe-prophet-hyperparamters"></a>

Amazon Forecast 使用預設的 Prophet [超參數](https://facebook.github.io/prophet/docs/quick_start.html#python-ap)。Prophet 也支援相關時間序列做為功能，在相關時間序列 CSV 檔案中提供給 Amazon Forecast。