Microsoft時間序列演算法包含兩個不同的演算法,可用來分析時間序列:
在 SQL Server 2005 中引進的 ARTXP 演算法已針對預測數列中的下一個可能值進行優化。
ARIMA 演算法已在 SQL Server 2008 中新增,以改善長期預測的精確度。
根據預設,Analysis Services 會個別使用每個演算法來定型模型,然後混合結果以產生變數預測數的最佳預測。 您也可以根據數據和預測需求,選擇只使用其中一個演算法。 在 SQL Server 2008 Enterprise 中,您也可以自定義在預測期間控制演算法混合的截止點。
本主題提供如何實作每個演算法,以及如何設定參數來微調分析和預測結果,以自定義演算法的其他資訊。
Microsoft時間序列演算法的實施
Microsoft Research 開發了 SQL Server 2005 中使用的原始 ARTXP 演算法,其實作基於 Microsoft 決策樹演算法。 因此,ARTXP 演算法可以描述為代表定期時間序列數據的自動回歸樹狀結構模型。 此演算法會將過去專案的變數數目與所預測的每個目前專案產生關聯。 ARTXP 名稱衍生自自動回歸樹狀結構方法(ART 演算法)套用至多個未知先前狀態的事實。 如需 ARTXP 演算法的詳細說明,請參閱 Time-Series 分析的自動回歸樹狀結構模型。
ARIMA 演算法已新增至 SQL Server 2008 中Microsoft時間序列演算法,以改善長期預測。 這是 Box 和 Jenkins 所描述之自回歸整合移動平均模型的方法實作。 ARIMA 方法可讓您判斷依時間循序拍攝之觀察中的相依性,並可納入隨機衝擊作為模型的一部分。 ARIMA 方法也支援乘式季節性模式。 鼓勵想要深入瞭解 ARIMA 演算法的讀者閱讀 Box 和 Jenkins 的開創性作品:本節旨在提供有關 ARIMA 方法如何在Microsoft時間序列演算法中實作的特定詳細數據。
根據預設,Microsoft時間序列演算法會使用兩種方法 ARTXP 和 ARIMA,並混合結果以改善預測精確度。 如果您想要只使用特定方法,您可以將演算法參數設定為只使用 ARTXP 或只使用 ARIMA,或控制演算法結果的結合方式。 請注意,ARTXP 演算法支援交叉預測,但 ARIMA 演算法則不支援。 因此,只有在您使用演算法混合時,或將模型設定為只使用 ARTXP 時,才能使用交叉預測。
瞭解 ARIMA 差分階數
本節介紹瞭解 ARIMA 模型所需的一些術語,並討論Microsoft時間序列演算法中 差異 的特定實作。 如需這些詞彙和概念的完整說明,建議您檢閱Box和 Jenkins。
字詞是數學方程式的元件。 例如,多項式方程式中的字詞可能包含變數和常數的組合。
Microsoft時間序列演算法中包含的 ARIMA 公式會同時使用 自動回歸 和 移動平均 字詞。
時間序列模型可以是 靜止 或 非靜止模型。 靜止模型 是那些還原為平均值的模型,雖然它們可能有週期,但 非靜止 模型沒有平衡的焦點,而且受到 衝擊或外部變數引入的較大變異或變化的影響。
差分的目標是使時間序列穩定並成為平穩。
差異的順序代表計算時間序列各值之間差異的操作次數。
Microsoft時間序列演算法的運作方式是擷取資料序列中的值,並嘗試將數據放入模式。 如果數據系列尚未固定,則演算法會套用差異順序。 每個差異順序的增加往往使時間序列更靜止。
例如,如果您有時間序列 (z1, z2, ..., zn) 並使用一個差異順序執行計算,您會取得新的數列 (y1, y2,...., yn-1),其中 yi = zi+1-zi。 當差異順序為 2 時,演算法會根據衍生自第一個順序方程式的 y 數列產生另一個數列(x1、x2、...、xn-2)。 差異的正確數量取決於數據。 差異的單一順序在顯示常數趨勢的模型中最常見;差異的第二個順序可能表示隨著時間而變化的趨勢。
根據預設,Microsoft時間序列演算法中使用的差異順序為 -1,這表示演算法會自動偵測差異順序的最佳值。 一般而言,該最佳值為 1(需要差異時),但在某些情況下,演算法會將該值增加至最大值 2。
Microsoft時間序列演算法會使用自動回歸值來判斷最佳 ARIMA 差異順序。 演算法會檢查 AR 值,並設定隱藏的參數,ARIMA_AR_ORDER,代表 AR 詞彙的順序。 這個隱藏參數ARIMA_AR_ORDER,其值範圍從 -1 到8。 在預設值 -1,演算法會自動選取適當的差異順序。
每當ARIMA_AR_ORDER的值大於 1 時,演算法就會將時間序列乘以多項式詞彙。 如果多項式公式的其中一個項的求解結果為1或接近1的根,演算法會嘗試通過移除該項並將差異階數增加1來保持模型的穩定性。 如果差異順序已達到最大值,則會移除字詞,而差異順序不會變更。
例如,如果 AR = 2 的值,則產生的 AR 多項式字詞可能如下所示:1 - 1.4B + .45B^2 = (1- .9B) (1- 0.5B)。 請注意數學表達式 (1 - .9B),其根約為 0.9。 演算法會從多項式公式中排除這個詞彙,但無法將差異順序增加一個,因為它已經達到最大值 2。
請務必注意,您可以 強制 變更差異順序的唯一方式是使用不支持的參數,ARIMA_DIFFERENCE_ORDER。 這個隱藏參數可控制演算法在時間序列上執行差異的次數,而且可以藉由輸入自定義演算法參數來設定。 不過,除非您已準備好進行實驗並熟悉相關的計算,否則不建議您變更此值。 另請注意,目前沒有任何機制,包括隱藏的參數,可讓您控制觸發差異順序增加的臨界值。
最後,請注意,上述公式是簡化的案例,沒有季節性提示。 如果提供季節性指示,則會在每個季節性指示的方程的左側加入個別的AR多項式項,並套用相同的策略來消除可能導致差分序列不穩定的項。
自訂Microsoft時間序列演算法
Microsoft時間序列演算法支援下列參數,這些參數會影響結果採礦模型的行為、效能和精確度。
備註
Microsoft時間序列演演算法適用於所有版本的 SQL Server;不過,某些進階功能,包括自定義時間序列分析的參數,僅支援特定版本的 SQL Server。 如需 SQL Server 版本所支援的功能清單,請參閱 SQL Server 2012 版本支援的功能。
偵測季節性
ARIMA 和 ARTXP 演算法都支援偵測季節性或週期性。 Analysis Services 使用快速傅立葉變換來偵測訓練前的季節性。 不過,您可以藉由設定演算法參數,影響季節性偵測,以及時間序列分析的結果。
藉由變更 AUTODETECT_SEASONALITY的值,您可以影響產生的可能時間區段數目。
藉由設定 PERIODICITY_HINT的值或多個值,您可以為演算法提供數據中預期週期的相關信息,並可能會提高偵測的精確度。
備註
ARTXP 和 ARIMA 演算法對季節性提示非常敏感。 因此,提供錯誤的提示可能會對結果造成負面影響。
選擇演算法並指定演算法的混合
根據預設,或當您選取MIXED選項時,Analysis Services 會結合演算法並指派相等權數。 不過,在 SQL Server 2008 Enterprise 中,您可以指定特定演算法,或者透過設定參數來自定義每個演算法在結果中的比例,從而將結果加權偏向短期或長期預測。 根據預設, FORECAST_METHOD 參數會設定為MIXED,Analysis Services 會同時使用這兩種演算法,然後加權其值,以最大化每個演算法的優點。
若要控制演算法的選擇,您可以設定 FORECAST_METHOD 參數。
如果您想要使用交叉預測,您必須使用 ARTXP 或 MIXED 選項,因為 ARIMA 不支援交叉預測。
如果您想要偏好短期預測,請將 FORECAST_METHOD 設定為 ARTXP。
如果您想要改善長期預測,請將 FORECAST_METHOD 設定為 ARIMA。
在 SQL Server 2008 Enterprise 中,您也可以自定義 Analysis Services 如何混合 ARIMA 和 ARTXP 演算法的組合。 您可以藉由設定 PREDICTION_SMOOTHING 參數來控制混合的起點和變更速率:
如果您 將PREDICTION_SMOOTHING 設為 0,則模型只會使用 ARTXP。
如果您將 PREDICTION_SMOOTHING 設為 1,則模型只會使用 ARIMA。
如果您 將PREDICTION_SMOOTHING 設為介於 0 到 1 之間的值,模型會將 ARTXP 演算法加權為預測步驟的指數遞減函式。 同時,此模型也會將 ARIMA 演算法加權為 ARTXP 權數的互補部分。 模型會使用正規化和穩定常數來平滑曲線。
一般而言,如果您預測最多 5 個時間切片,ARTXP 幾乎總是較佳的選擇。 不過,當您增加要預測的時間配量數目時,ARIMA 通常會執行得更好。
下圖說明當 PREDICTION_SMOOTHING 設定為預設值 0.5 時,模型如何混合演算法。 ARIMA 和 ARTXP 一開始會同樣加權,但隨著預測步驟數目增加,ARIMA 的重量會比較重。
相較之下,下圖顯示當 PREDICTION_SMOOTHING 設定為0.2時,演算法的融合。 在步驟 0 中,模型會將 ARIMA 加權為 0.2,並將 ARTXP 加權為 0.8。 此後,ARIMA 的權數會以指數方式增加,而 ARTXP 的權數會以指數方式遞減。
設定演算法參數
下表描述可與Microsoft時間序列演算法搭配使用的參數。
| 參數 | 說明 |
|---|---|
| 自動檢測周期性 | 指定介於 0 到 1 之間的數值,以偵測週期性。 預設值為 0.6。 如果值接近 0,則只會針對強週期性數據偵測到週期性。 將此值設定為接近 1,有利於發現許多幾乎週期性的模式,並自動生成週期性提示。 注意:處理大量週期性提示可能會延長模型訓練時間,但可產生更精確的模型。 |
| 複雜性懲罰 | 控制決策樹的成長。 預設值為 0.1。 減少此值會增加分割的機會。 增加此值會降低分割的機會。 注意:此參數僅適用於某些版本的 SQL Server。 |
| 預測方法 | 指定要用於分析和預測的演算法。 可能的值為 ARTXP、ARIMA 或 MIXED。 預設值為MIXED。 |
| HISTORIC_MODEL_COUNT | 指定要建置的歷史模型數目。 預設值為 1。 注意:此參數僅適用於某些版本的 SQL Server。 |
| 歷史模型缺口 | 指定兩個連續歷史模型之間的時間延遲。 預設值為 10。 值代表一些時間單位,其中單位是由模型所定義。 例如,將此值設定為 g 會用於針對以 g、2*g、3*g 等間隔的時間片段截斷的數據建立歷史模型。 注意:此參數僅適用於某些版本的 SQL Server。 |
| 不穩定性敏感性 | 控制預測變數超過特定閾值的點,然後 ARTXP 演算法會抑制預測。 預設值為 1。 注意:此參數不適用於僅使用 ARIMA 的模型。 預設值 1 提供與 SQL Server 2005 中相同的行為。 Analysis Services 會監視每個預測的標準化標準偏差。 一旦此值超過任何預測的臨界值,時間序列演算法就會傳回NULL並停止預測程式。 值為 0 會停止不穩定偵測。 這表示不論變異數為何,您都可以建立無限數量的預測。 注意:此參數只能在 SQL Server Enterprise 中修改。 在 SQL Server Standard 中,Analysis Services 只會使用預設值 1。 |
| MAXIMUM_SERIES_VALUE | 指定要用於預測的最大值。 此參數會與 MINIMUM_SERIES_VALUE一起使用,將預測限製為一些預期的範圍。 例如,您可以指定任何一天的預測銷售數量不應超過庫存中的產品數目。 注意:此參數僅適用於某些版本的 SQL Server。 |
| MINIMUM_SERIES_VALUE | 指定可預測的最小值。 此參數會與 MAXIMUM_SERIES_VALUE一起使用,將預測限製為一些預期的範圍。 例如,您可以指定預測的銷售數量絕不應為負數。 注意:此參數僅適用於某些版本的 SQL Server。 |
| MINIMUM_SUPPORT | 指定在每一個時間序列樹中產生分割所需的最小時間片段數目。 預設值為 10。 |
| 數值遺失替代 | 指定歷程記錄數據中的間距如何填滿。 根據預設,不允許數據中的間距。 如果您的數據包含多個數列,數列也無法有不完全的邊緣。 也就是說,所有數列都應該有相同的起點和終點。 當您在時間序列模型上執行 PREDICTION JOIN 時,Analysis Services 也會使用此參數的值來填滿新數據中的間距。 下表列出此參數的可能值:無:預設值。 將遺漏的值取代為沿著定型模型曲線繪製的值。 上一個:重複先前時間區段中的值。 Mean:使用在訓練中利用的時間片段移動平均。 數值常數:使用指定的數位來取代所有遺漏的值。 |
| PERIODICITY_HINT | 提供演算法提示,以理解數據的週期性。 例如,如果銷售額依年份而有所不同,而數列中的度量單位是月份,則週期性為 12。 此參數採用 {n [, n]} 的格式,其中 n 是任何正數。 括弧 [] 中的 n 是選擇性的,可以視需要重複。 例如,若要為每月提供的數據提供多個週期性提示,您可以輸入 {12, 3, 1} 來偵測年份、季和月份的模式。 不過,週期性對模型品質有很強的影響。 如果您給予的提示與實際週期性不同,您的結果可能會受到負面影響。 預設值為 {1}。 注意:需要大括號。 此外,此參數也有字串數據類型。 因此,如果您將此參數輸入作為資料採礦擴充語言(DMX)語句的一部分,則必須將數字及大括弧一同括在引號內。 |
| PREDICTION_SMOOTHING | 指定模型應該如何混合以優化預測。 此參數僅適用於某些版本的 SQL Server。 您可以輸入 0 到 1 之間的任何數值,或使用下列其中一個值: 0:指定預測只使用 ARTXP。 預測已最佳化,以減少預測次數。 0.5:(預設值)指定應該同時使用這兩種演算法進行預測,並將結果融合。 1:指定預測只使用 ARIMA。 許多預測已被優化。 注意:使用 FORECAST_METHOD 參數來控制訓練。 |
模型旗標
Microsoft時間序列演算法支援下列模型欄位。 當您建立採礦結構或採礦模型時,您可以定義模型旗標,以指定在分析期間處理每個數據行中的值的方式。 如需詳細資訊,請參閱模型旗標(數據採礦)。
| 模型旗標 | 說明 |
|---|---|
| 不可為空 | 表示欄位不能包含 Null。 如果 Analysis Services 在模型定型期間遇到 Null,將會產生錯誤。 適用於採礦結構欄位。 |
| 模型僅存在 | 表示該列會被視為有兩種可能的狀態:缺失和存在。 Null 是遺漏值。 適用於採礦模型數據行。 |
需求
時間序列模型必須包含一個關鍵時間欄位,其中包含唯一值、輸入欄位,以及至少一個可預測的欄位。
輸入和預測欄位
Microsoft時間序列演算法支援下表所列的特定輸入數據行內容類型、可預測的數據行內容類型和模型旗標。
| 資料行 | 內容類型 |
|---|---|
| 輸入屬性 | 連續、索引鍵、索引鍵時間和數據表 |
| 可預測屬性 | 連續、數據表 |
備註
支援迴圈和已排序的內容類型,但演算法會將它們視為離散值,而且不會執行特殊處理。
另請參閱
Microsoft 時間序列演算法時間序列模型查詢範例時間序列模型的採礦模型內容(Analysis Services - 資料探勘)