本文說明 Azure Machine Learning 中的 AutoML 用來準備時間序列資料及建置預測模型的方法。
您將學到的內容:
- AutoML 如何利用時間序列模型與迴歸模型進行預測
- AutoML 如何從你的資料中準備和設計功能
- 有哪些預測模型可用,何時使用它們
如需在 AutoML 中訓練預測模型的指示和範例,請參閱設定 AutoML 以進行時間序列預測。
AutoML 中的預測方法
AutoML 使用數種方法來預測時間序列值。 你可以將這些方法歸類為兩類:
- 使用目標數量記錄值來預測未來的時間序列模型
- 使用預測器變數來預測目標值的迴歸或說明模型
接下來的步驟: 理解這些方法後,學習如何 配置你的預測工作 ,或探索 AutoML 如何選擇最佳模型。
假設您需要預測雜貨店中特定柳橙汁品牌的每日需求。 針對運算式,讓 $y_t$ 代表 $t$ 當天這個品牌的需求。 時間序列模型會使用具有下列運算式的一些歷史需求函式,以預測 $t+1$ 的需求:
$y_{t+1} = f(y_t, y_{t-1}, \ldots, y_{t-s})$
函式 $f$ 通常具有使用您過去觀察到的需求來微調的參數。 $f$ 用來進行預測 $s$ 的記錄數量,也可以視為模型的參數。
柳橙汁需求範例中的時間序列模型可能不夠準確,因為它只使用過去需求的相關資訊。 未來需求還受到許多其他因素影響,例如價格、星期幾和假期期間。 請考慮使用這些預測變數搭配下列運算式的迴歸模型:
$y = g(\text{price}, \text{day of week}, \text{holiday})$
同樣地,函式 $g$ 通常會有一組參數,包括控管正規化的值,其 AutoML 會使用過去的需求值和預測器來進行調整。 您省略運算式中的 $t$,強調迴歸模型會使用「同時」定義的變數之間的相互關聯模式來進行預測。 若要從 $g$ 預測 $y_{t+1}$ ,您必須知道一週中的哪一天對應至 $t+1$、當天是否為假日,以及 $t+1 當天的柳橙汁價格。 前兩項資訊很容易使用行事曆來識別。 零售價格通常會事先設定,因此柳橙汁的價格很可能會提前一天知道。 不過,未來 10 天的價格可能無法得知。 請務必了解,此迴歸的效用受限於您需要預測多久之後的未來,也就是預測範圍,以及您對預測器未來值的了解程度。
重要事項
AutoML 的預測迴歸模型假設你提供的所有特徵至少在預測視界內都是已知的。
你也可以擴充 AutoML 的預測迴歸模型,使用目標和預測器的歷史值。 結果將是具有時間序列模型特性和純迴歸模型的混合式模型。 歷史數量是迴歸中額外的預測器變數,稱為延隔數量。 延隔順序是指值已知的範圍。 例如,在柳橙汁需求範例中,目標順序二延隔的目前值是兩天前觀察到的果汁需求。
時間序列模型與迴歸模型之間的另一個顯著差異,就是其產生預測的方式。 遞迴關係通常用於定義時間序列模型,每次產生一個預測結果。 為了預測未來的多個期間,它們會逐一查看直到預測範圍,將先前的預測饋送回模型,視需要產生下一個提前一個期間的預測。 相反地,迴歸模型被視為直接預測器,將在一次嘗試中產生直到範圍為止的「所有」預測。 直接預測工具最好是遞迴方法,因為遞迴模型在將先前的預測饋送回模型時會產生遞迴預測錯誤。 包含延隔特徵時,AutoML 會對定型資料進行一些重要的修改,讓迴歸模型可以作為直接預測器。 如需詳細資訊,請參閱 AutoML 中時間序列預測的延隔功能。
AutoML 中的預測模型
Azure Machine Learning 中的 AutoML 實作了以下預測模型。 針對每個類別,模型會按照其能納入的模式複雜度大致列出,也稱為模型容量。 貝利模型用於預測最後一個觀察到的值,具有低容量,而時態性卷積網路 (TCNForecaster) 則是可能有數百萬個可調整參數的深度神經網路 (DNN),其容量很高。
了解更多關於深度學習模型的資訊:如果你在處理複雜的時間序列分析,請參考 AutoML 中的深度學習模型(DNN)以進行預測。
| 時間序列模型 | 迴歸模型 |
|---|---|
| 貝氏、季節性貝氏、平均法、季節性平均、ARIMA(X)、指數平滑法 | 線性 SGD、LARS LASSO、彈性網、Prophet、K 最接近像素、決策樹、隨機樹系、極端隨機樹系、漸層提升樹系、LightGBM、XGBoost、TCNForecaster |
AutoML 也包含集團模型,這些模型會建立最佳執行模型的加權組合,以進一步改善精確度。 預測時,使用 軟投票集合 ,透過 Caruana 集合選擇演算法來確定組成與權重。
附註
預測模型集團有兩個重要的注意事項:
- TCN目前無法被納入合奏團。
- 根據預設,AutoML 會停用堆疊集團方法,其隨附於 AutoML 中的預設迴歸和分類工作中。 堆疊集團符合最佳模型預測的中繼模型,可用於尋找集團加權。 在內部基準測試中,此策略更容易過度擬合時間序列資料。 此結果可能導致泛化不佳,因此堆疊集合預設被禁用。 您可以視需要在 AutoML 設定中啟用集團。
AutoML 如何使用您的資料
AutoML 接受表格式「寬」格式的時間序列資料。 每個變數都必須有自己的對應資料行。 AutoML 需要一個資料行成為預測問題的時間軸。 此資料行必須可剖析為日期時間類型。 最簡單的時間序列資料集包含時間資料行和數值的目標資料行。 目標是您想要預測未來的變數。 下表顯示此格式的範例值:
| 時間戳記 | quantity |
|---|---|
| 2012-01-01 | 100 |
| 2012-01-02 | 97 |
| 2012-01-03 | 106 |
| ... | ... |
| 2013-12-31 | 347 |
在更複雜的情況下,資料集可能包含與時間索引對齊的其他資料行:
| 時間戳記 | SKU | price | 公告 | quantity |
|---|---|---|---|---|
| 2012-01-01 | JUICE1 | 3.5 | 0 | 100 |
| 2012-01-01 | BREAD3 | 5.76 | 0 | 47 |
| 2012-01-02 | JUICE1 | 3.5 | 0 | 97 |
| 2012-01-02 | BREAD3 | 5.5 | 1 | 68 |
| ... | ... | ... | ... | ... |
| 2013-12-31 | JUICE1 | 3.75 | 0 | 347 |
第二個範例包含 SKU、零售價格和旗標,以指出除了時間戳記和目標數量之外,是否要廣告了商品。 第二個資料集會顯示兩個序列:一個用於 JUICE1 SKU,另一個用於 BREAD3 SKU。 [SKU] 資料行是時間序列識別碼資料行,因為依這些資料行值分組時會產生兩個群組,每個群組都包含單一序列。 在模型掃掠之前,AutoML 會先對輸入設定和資料進行基本驗證,並新增設計的功能。
資料長度需求
要訓練預測模型,你需要足夠的歷史資料。 所需的數量會依訓練配置而異。 如果您提供驗證資料,則每個時間序列所需的訓練觀察數目下限如下所示:
$T_{\text{user validation}} = H + \text{max}(l_{\text{max}}, s_{\text{window}}) + 1$
在此運算式中,$H$ 為預測範圍,$l_{\text{max}}$ 為最大延隔順序,而 $s_{\text{window}}$ 為滾動彙總功能的時段大小。 如果您使用交叉驗證,則會以下列方式表示最小觀察數目:
$T_{\text{CV}} = 2H + (n_{\text{CV}} - 1) n_{\text{step}} + \text{max}(l_{\text{max}}, s_{\text{window}}) + 1$
在此版本中,$n_{\text{CV}}$ 為交叉驗證摺疊的數目,而 $n_{\text{step}}$ 為 CV 步驟大小,或 CV 摺疊之間的位移。 這些公式背後的基本邏輯是,您應該一律在每個時間序列中至少要有定型觀察的範圍,包括延隔和交叉驗證分割的一些填補。 如需預測交叉驗證的詳細資訊,請參閱 AutoML 中的模型選取。
遺漏資料處理
AutoML 中的時間序列模型需要及時定期間隔的觀察,其中包括每月或每年觀察的案例,其中觀察之間的天數可能會有所不同。 在建模過程開始前,AutoML 會確保沒有遺漏的序列值 ,且 觀測值是規則性的。
AutoML 處理兩種缺失資料:
- 缺失的格子值: 表格資料中缺少某個儲存格的值
- 缺失的行數: 缺少一列對應於時間序列頻率下預期觀測值的列
AutoML 會自動偵測並代入這兩種缺失的資料。
在第一個案例中,AutoML 使用一般、可設定的技術來插補遺漏的值。 下表顯示遺漏預期資料列的範例:
| 時間戳記 | quantity |
|---|---|
| 2012-01-01 | 100 |
| 2012-01-03 | 106 |
| 2012-01-04 | 103 |
| ... | ... |
| 2013-12-31 | 347 |
這個序列表面上有每天的頻率,但沒有 2012 年 1 月 2 日 (2012-01-02) 的觀察。 在此情況下,AutoML 會藉由新增遺漏值的新資料列,嘗試填入資料。
quantity 資料行的新值,以及資料中的其他任何資料行,接著會像其他遺漏值一樣進行插補。 為了執行此程序,AutoML 必須辨識序列頻率,才能如此案例所示填入觀察間距。 AutoML 會自動偵測這個頻率,或者你可以選擇在設定中提供這個頻率。
你可以 設定 補補方法來補足輸入的缺失值。 下表列出預設方法:
| 資料行類型 | 預設插補方法 |
|---|---|
| 標的 | 前方填滿 (最後一次觀察往前推) |
| 數值功能 | 中位數 |
AutoML 在數值編碼過程中,透過包含另一個對應缺失值的類別來處理類別特徵的缺失值。 在此案例中,插補是隱含的。
自動化特徵工程
AutoML 通常會新增欄位以提升建模準確度。 工程功能可以包含預設或選擇性項目。
預設工程功能:
- 衍生自時間索引的行事曆功能,例如星期
- 衍生自時間序列識別碼的類別特徵
- 將類別類型編碼為數值類型
選擇性的工程功能:
- 與指定區域相關聯的假日指標功能
- 目標數量延隔
- 特徵資料行延隔
- 目標數量的滾動時段彙總,例如移動平均
- 季節性分解 ((使用 Loess 的季節性和趨勢分解 (STL))
您可以從 AutoML SDK 透過 ForecastingJob 類別,或從 Azure Machine Learning 工作室 Web 介面設定特徵化。
非恆定時間序列偵測與處理
一個平均值與變異數隨時間變化的時間序列稱為 非平穩序列。 表現出隨機趨勢的時間序列本質上不是恆定的。
下圖顯示此案例的視覺效果。 圖表繪製一個通常趨勢向上的序列。 如果您計算並比較序列前半和後半部分的平均 (平均值) 值,您可以識別出差異。 繪圖前半部序列的平均值小於後半部序列的平均值。 序列的平均值取決於檢閱的時間間隔,也就是時間變化動差的範例。 在此案例中,序列的平均值是第一階矩。
下一張影像顯示圖表,以第一個差異繪製原始序列 $\Delta y_{t} = y_t - y_{t-1}$。 序列的平均值在時間範圍內大致是常數,而變異數似乎有所不同。 此案例示範第一個順序固定時間序列的範例:
AutoML 迴歸模型原本就無法處理隨機趨勢,或與非恆定時間序列相關的其他已知問題。 因此,存在這類趨勢時,其樣本外預測精確度就會「不佳」。
AutoML 會自動分析時間序列資料集,以判斷其層級或是否恆定。 當偵測到非平穩時間序列時,AutoML 會自動應用差分轉換以減輕非平穩行為的影響。
模型掃掠
在準備遺漏資料處理和特徵工程的資料之後,AutoML 會使用 模型建議服務來掃掠一組模型和超參數。
模型依據驗證或交叉驗證指標進行排名。 你可以選擇性地在整體模型中使用頂尖的模特兒。 你可以檢查、下載或部署最佳模型或任何訓練好的模型,根據需要產生預測。 如需詳細資訊,請參閱 AutoML 中預測的模型掃掠和選取項目。
模型群組
當一個資料集包含多個時間序列時,你可以用不同方式來建模資料。 你可以依 照時間序列 ID 欄位 將資料分組,並為每個系列訓練獨立的模型。 更一般的方法是將資料劃分為包含多個(可能相關)系列的群組,並為每個群組訓練模型。
根據預設,AutoML 預測會使用混合方法來建立群組模型。 時間序列模型,加上 ARIMAX 和 Prophet,會將一個序列分配給一組。 其他迴歸模型則將所有系列分配到同一群。
以下是每個模型類型使用群組的方式:
個別群組中的每個序列 (1:1):貝氏、季節性貝氏、平均法、季節性平均、指數平滑法、ARIMA、ARIMAX、Prophet
相同群組中的所有序列 (N:1):線性 SGD、LARS LASSO、彈性網、K 最接近像素、決策樹、隨機樹系、極端隨機樹系、漸層提升樹系、LightGBM、XGBoost、TCNForecaster
你可以在 AutoML 裡用多模型解決方案來做更一般的模型分組。 如需詳細資訊,請參閱許多模型 - 自動化 ML 筆記本。