AutoML 中的預測方法概觀
本文說明 Azure 機器學習 AutoML 用來準備時間序列數據及建置預測模型的方法。 如需 AutoML 中定型預測模型的指示和範例,請參閱 設定 AutoML 以進行時間序列預測。
AutoML 中的預測方法
AutoML 使用數種方法來預測時間序列值。 這些方法大致可以指派給兩個類別:
- 使用目標數量歷程記錄值來預測未來的時間序列模型
- 使用預測變數來預測目標值的回歸或解釋性模型
假設您需要從雜貨店預測特定品牌的橙汁每日需求。 針對表達式,let $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 的預測迴歸模型也可以擴增,以使用目標和預測器的記錄值。 結果將是具有時間序列模型特性和純迴歸模型的混合式模型。 歷程記錄數量是回歸中額外的預測變數,稱為 延隔數量。 延隔順序是指值已知的範圍。 例如,橙汁需求範例目標訂單 2 延遲的目前值是兩天前觀察到的果汁需求。
時間序列模型與回歸模型之間的另一個顯著差異是其產生預測的方式。 遞歸關聯性通常會定義產生一次預測的時間序列模型。 為了預測未來的多個期間,它們會逐一查看直到預測範圍,將先前的預測饋送回模型,視需要產生下一個提前一個期間的預測。 相反地,回歸模型會 被視為直接預測器 ,在單一嘗試中產生 所有 預測到地平線。 直接預測器最好使用遞歸方法,因為遞歸模型在將先前的預測送回模型時發生遞歸模型複合預測錯誤。 包含延隔功能時,AutoML 會對定型數據進行一些重要的修改,讓回歸模型可以做為直接預測器運作。 如需詳細資訊,請參閱 AutoML 中時間序列預測的延遲功能。
AutoML 中的預測模型
機器學習 中的 AutoML 會實作下列預測模型。 針對每個類別,模型會以可以納入的模式複雜度大致列出,也稱為 模型容量。 單純預測最後一個觀察到值的 Naive 模型具有低容量,而時態性卷積網路(TCNForecaster)則是具有數百萬個無法調整參數的深度神經網路(DNN),其容量很高。
時間序列模型 | 迴歸模型 |
---|---|
貝氏、季節性貝氏、平均法、季節性平均、ARIMA(X)、指數平滑法 | 線性 SGD、LARS LASSO、彈性網、Prophet、K 最接近像素、決策樹、隨機樹系、極端隨機樹系、漸層提升樹系、LightGBM、XGBoost、TCNForecaster |
AutoML 也包含 合奏 模型,可建立最佳執行模型的加權組合,以進一步改善精確度。 針對預測,您可以使用 軟投票合奏 ,其中使用 Caruana Ensemble 選取演算法找到 組合和權數。
注意
預測模型集團有兩個重要的注意事項:
- TCN 目前不能包含在集團中。
- 根據預設,AutoML 會 停用 Stack 合奏 方法,其包含在 AutoML 中的預設回歸和分類工作中。 堆疊集團符合最佳模型預測的中繼模型,可用於尋找集團加權。 在內部基準檢驗期間,此策略較適合時間序列數據的趨勢增加。 此結果可能會導致一般化不佳,因此預設會停用堆棧合奏。 您可以視需要在 AutoML 設定中啟用合奏。
AutoML 如何使用您的資料
AutoML 接受表格式「寬」格式的時間序列數據。 每個變數都必須有自己的對應數據行。 AutoML 需要一個數據行成為預測問題的時間軸。 此資料行必須可剖析為日期時間類型。 最簡單的時間序列數據集是由 時間數據行 和數值 目標數據行所組成。 目標是您想要預測未來的變數。 下表顯示此格式的範例值:
timestamp | 數量 |
---|---|
2012-01-01 | 100 |
2012-01-02 | 97 |
2012-01-03 | 106 |
... | ... |
2013-12-31 | 347 |
在更複雜的情況下,數據集可能包含與時間索引對齊的其他數據行:
timestamp | SKU | price | 公告 | 數量 |
---|---|---|---|---|
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 會使用常見的可設定技術來插補遺漏的值。 下表顯示遺漏預期數據列的範例:
timestamp | 數量 |
---|---|
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 會自動偵測此頻率,或由使用者在設定中提供。
您可以在 輸入中設定 提供遺漏值的插補方法。 下表列出預設方法:
欄類型 | 默認插補方法 |
---|---|
Target | 前方填滿 (最後一次觀察往前推) |
數值功能 | 中位數 |
類別特徵的遺漏值會在數值編碼期間處理,方法是包含對應至遺漏值的另一個類別。 在此案例中,插補是隱含的。
自動化特徵工程
AutoML 通常會將新的資料行新增至使用者資料,以提高模型化精確度。 工程功能可以包含預設或選擇性專案。
預設專案功能:
- 衍生自時間索引的行事曆功能 ,例如星期數
- 衍生自時間序列識別碼的類別特徵
- 將類別類型編碼為數值類型
選擇性的專案功能:
- 與指定區域相關聯的假日指標功能
- 目標數量延隔
- 特徵資料行延隔
- 滾動視窗匯總,例如目標數量的滾動平均
- 季節性分解(使用黃土(STL)的季節性和趨勢分解)
您可以使用ForecastingJob類別,或從Azure Machine Learning 工作室Web介面,從 AutoML SDK 設定特徵化。
非恆定時間序列偵測與處理
時間序列,其中平均數和變異數會隨著時間變化稱為非靜止。 表現出隨機趨勢的時間序列本質上是非靜止的。
下圖顯示此案例的視覺效果。 圖表繪製一個通常會向上趨勢的數列。 如果您計算並比較數列前半部的平均值(平均值)值,您可以識別差異。 上半部的數列平均值小於下半場的平均數。 數列的平均數取決於檢閱的時間間隔,是時間變化時刻的範例。 在此案例中,數列的平均數是第一個時刻。
下一張影像顯示圖表,以第一個差異繪製原始數列,$\Delta y_{t} = y_t - y_{t-1}$。 序列的平均值在時間範圍內大致是常數,而變異數似乎有所不同。 此案例示範第一個順序固定時間序列的範例:
AutoML 回歸模型原本無法處理隨機趨勢或其他與非靜止時間序列相關的已知問題。 因此,當這類趨勢存在時,取樣不足的預測精確度可能會很差。
AutoML 會自動分析時間序列數據集,以判斷其層級或靜止性。 偵測到非靜止時間序列時,AutoML 會自動套用差異轉換,以減輕非靜止行為的影響。
模型掃掠
在準備遺漏數據處理和特徵工程的數據之後,AutoML 會使用 模型建議服務來掃掠一組模型和超參數。
模型會根據驗證或交叉驗證計量進行排名,然後選擇性地在合奏模型中使用最上層模型。 您可以檢查、下載或部署最佳模型或任何定型模型,視需要產生預測。 如需詳細資訊,請參閱 AutoML 中預測的模型掃掠和選取專案。
模型群組
當數據集包含一個以上的時間序列時,有多種方式可建立數據模型。 您可以依時間序列標識碼數據行中的數據分組,並針對每個數位列定型獨立模型。 更一般的做法是將數據分割成群組,每個群組可以包含多個(可能相關)數列,併為每個群組定型模型。
根據預設,AutoML 預測會使用混合方法來建立群組模型。 時間序列模型加上 ARIMAX 和 Prophet,將一個序列指派給一個群組,而其他迴歸模型會將所有序列指派給單一群組。
以下是每個模型類型使用群組的方式:
個別群組中的每個數列 (1:1):天真、季節性天真、平均、季節性平均、指數平滑、ARIMA、ARIMAX、先知
相同群組中的所有數列 (N:1):線性新發幣、LARS LASSO、彈性網、K 近鄰、判定樹、隨機樹系、極端隨機樹狀結構、漸層提升樹狀結構、LightGBM、XGBoost、TCNForecaster
在 AutoML 中使用許多模型解決方案,可以進行更一般模型群組。 如需詳細資訊,請參閱 許多模型 - 自動化 ML 筆記本。