Microsoft時間序列演演算法技術參考

適用於: SQL Server 2019 和舊版 Analysis Services Azure Analysis Services Fabric/Power BI Premium

重要

SQL Server 2017 Analysis Services 中已淘汰數據採礦,現在已在 SQL Server 2022 Analysis Services 中停止。 檔不會更新為已淘汰和已停止的功能。 若要深入瞭解,請參閱 Analysis Services 回溯相容性

Microsoft時間序列演算法包含兩個不同的演算法,可用來分析時間序列:

  • 在 SQL Server 2005 (9.x) 中引進的 ARTXP 演算法已針對預測數列中的下一個可能值進行優化。

  • ARIMA 演算法已在 SQL Server 2008 中新增,以改善長期預測的精確度。

根據預設,SQL Server 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 版本所支援的功能

偵測季節性

ARIMA 和 ARTXP 演算法都支援偵測季節性或週期性。 SQL Server Analysis Services 會使用 Fast Fourier 轉換來偵測定型前的季節性。 不過,您可以藉由設定演算法參數,影響季節性偵測,以及時間序列分析的結果。

  • 藉由變更 AUTODETECT_SEASONALITY的值,您可以影響產生的可能時間區段數目。

  • 藉由設定 PERIODICITY_HINT的值或多個值,您可以為演算法提供數據中預期週期的相關信息,並可能會提高偵測的精確度。

注意

ARTXP 和 ARIMA 演算法對季節性提示非常敏感。 因此,提供錯誤的提示可能會對結果造成負面影響。

選擇演算法並指定演算法的混合

根據預設,或當您選取MIXED選項時,SQL Server Analysis Services 會結合演算法並指派相等權數。 不過,在 Enterprise Edition 中,您可以指定特定演算法,也可以藉由設定參數來將結果加權至短期或長期預測,來自定義結果中每個演算法的比例。 根據預設,FORECAST_METHOD 參數會設定為MIXED,而SQL Server Analysis Services 會同時使用這兩種演算法,然後加權其值,以最大化每個演算法的優點。

  • 若要控制演演算法的選擇,您可以設定 FORECAST_METHOD 參數。

  • 如果您想要使用交叉預測,您必須使用 ARTXP 或 MIXED 選項,因為 ARIMA 不支援交叉預測。

  • 如果您想要偏好短期預測,請將 FORECAST_METHOD 設定為 ARTXP。

  • 如果您想要改善長期預測,請將 FORECAST_METHOD 設定為 ARIMA。

在 Enterprise Edition 中,您也可以自定義 SQL Server Analysis Services 如何混合 ARIMA 和 ARTXP 演算法的組合。 您可以藉由設定 PREDICTION_SMOOTHING 參數來控制混合的起點和變更速率:

  • 如果您將 PREDICTION_SMOOTHING 設為 0,則模型只會使用 ARTXP。

  • 如果您將 PREDICTION_SMOOTHING 設為 1,則模型只會使用 ARIMA。

  • 如果您將 PREDICTION_SMOOTHING 設為介於 0 到 1 之間的值,模型會將 ARTXP 演算法加權為預測步驟的指數遞減函式。 同時,此模型也會將 ARIMA 演算法加權為 ARTXP 權數的 1 補碼。 模型會使用正規化和穩定常數來平滑曲線。

一般而言,如果您預測最多5個時間配量,ARTXP幾乎一律是較佳的選擇。 不過,當您增加要預測的時間配量數目時,ARIMA 通常會執行得更好。

下圖說明當 PREDICTION_SMOOTHING 設定為預設值 0.5 時,模型如何混合演算法。 ARIMA 和 ARTXP 一開始會同樣加權,但隨著預測步驟數目增加,ARIMA 的重量會比較重。

時間序列演算法混合的預設曲線,

相反地,下圖說明當 PREDICTION_SMOOTHING 設定為0.2時,演算法的混合。 在步驟 0 中,模型會將 ARIMA 加權為 0.2,並將 ARTXP 加權為 0.8。 此後,ARIMA 的權數會以指數方式增加,而 ARTXP 的權數會以指數方式遞減。

時間序列模型混合衰減曲線的時間序列模型混合 衰變曲線

設定演算法參數

下表描述可與Microsoft時間序列演算法搭配使用的參數。

參數 描述
AUTO_DETECT_PERIODICITY 指定介於 0 到 1 之間的數值,以偵測週期性。 預設值為 0.6。

如果值接近 0,則只會針對強週期性數據偵測到週期性。

將此值設定為接近 1,有利於探索許多幾乎週期性提示。

注意:處理許多週期性提示可能會導致模型定型時間明顯較長,但更精確的模型。
COMPLEXITY_PENALTY 控制判定樹的成長。 預設值為 0.1。

減少此值會增加分割的機會。 增加此值會降低分割的機會。

注意:此參數僅適用於某些版本的 SQL Server。
FORECAST_METHOD 指定要用於分析和預測的演算法。 可能的值為 ARTXP、ARIMA 或 MIXED。 預設值為MIXED。
HISTORIC_MODEL_COUNT 指定要建置的歷史模型數目。 預設值為 1。

注意:此參數僅適用於某些版本的 SQL Server。
HISTORICAL_MODEL_GAP 指定兩個連續歷史模型之間的時間延遲。 預設值為 10。 值代表一些時間單位,其中單位是由模型所定義。

例如,將此值設定為 g 會導致針對以 g、2*g、3*g 等間隔的時間配量截斷的數據建立歷史模型。

注意:此參數僅適用於某些版本的 SQL Server。
INSTABILITY_SENSITIVITY 控制預測變數超過特定閾值的點,然後 ARTXP 演算法會抑制預測。 預設值為 1。

注意:此參數不適用於僅使用 ARIMA 的模型。

預設值 1 提供與 SQL Server 2005 (9.x) 相同的行為。 SQL Server Analysis Services 會監視每個預測的標準化標準偏差。 一旦此值超過任何預測的臨界值,時間序列演算法就會傳回NULL並停止預測程式。

值為 0 會停止不穩定偵測。 這表示不論變異數為何,您都可以建立無限數量的預測。

注意:此參數只能在 SQL Server Enterprise 中修改。 在 SQL Server Standard 中,SQL Server Analysis Services 只會使用預設值 1。
MAXIMUM_SERIES_VALUE 指定要用於預測的最大值。 此參數會與 MINIMUM_SERIES_VALUE一起使用,將預測限製為一些預期的範圍。 例如,您可以指定任何一天的預測銷售數量不應超過庫存中的產品數目。

注意:此參數僅適用於某些版本的 SQL Server。
MINIMUM_SERIES_VALUE 指定可預測的最小值。 此參數會與 MAXIMUM_SERIES_VALUE一起使用,將預測限製為某些預期的範圍。 例如,您可以指定預測的銷售數量絕不應為負數。

注意:此參數僅適用於某些版本的 SQL Server。
MINIMUM_SUPPORT 指定在每一個時間序列樹狀結構中產生分割所需的最小時間配量數目。 預設值為 10。
MISSING_VALUE_SUBSTITUTION 指定歷程記錄數據中的間距如何填滿。 根據預設,不允許數據中的間距。 下表列出此參數的可能值:

上一個:重複上一次配量中的值。

Mean:使用定型中使用的時間配量移動平均。

數值常數:使用指定的數位來取代所有遺漏的值。

None:預設值。 將遺漏的值取代為沿著定型模型曲線繪製的值。



請注意,如果您的數據包含多個數列,則數列不能有不完全的邊緣。 也就是說,所有數列都應該有相同的起點和終點。
當您在時間序列模型上執行 PREDICTION JOIN 時,SQL Server Analysis Services 也會使用此參數的值來填補新數據中的間距。
PERIODICITY_HINT 提供演算法的提示,以取得數據的週期性。 例如,如果銷售額依年份而有所不同,而數列中的度量單位是月份,則週期性為 12。 此參數採用 {n [, n]} 的格式,其中 n 是任何正數。

括弧 [] 中的 n 是選擇性的,可以視需要重複。 例如,若要為每月提供的數據提供多個週期性提示,您可以輸入 {12, 3, 1} 來偵測年份、季和月份的模式。 不過,週期性對模型品質有很強的影響。 如果您給予的提示與實際週期性不同,您的結果可能會受到負面影響。

預設值為 {1}。

請注意,需要大括弧。 此外,此參數也有字串數據類型。 因此,如果您輸入此參數做為數據採礦延伸模組 (DMX) 語句的一部分,則必須以引號括住數位和大括弧。
PREDICTION_SMOOTHING 指定模型應該如何混合以優化預測。 您可以輸入媒體於 0 到 1 之間的任何值,或使用下列其中一個值:

0:
指定預測只使用 ARTXP。 預測已針對較少的預測進行優化。

1:指定預測只使用 ARIMA。 預測已針對許多預測進行優化。

0.5:預設值。 指定使用這兩種演算法的預測,以及混合的結果。



執行預測平滑處理時,請使用 FORECAST_METHOD 參數來控制定型。 請注意,此參數僅適用於某些版本的 SQL Server。

模型旗標

Microsoft時間序列演演算法支援下列模型旗標。 當您建立採礦結構或採礦模型時,您可以定義模型旗標,以指定在分析期間處理每個數據行中的值的方式。 如需詳細資訊,請參閱 模型旗標 (資料採礦)

模型旗標 描述
NOT NULL 表示數據行不能包含 Null。 如果 Analysis Services 在模型定型期間遇到 Null,將會產生錯誤。

適用於採礦結構數據行。
MODEL_EXISTENCE_ONLY 表示數據行會被視為有兩個可能的狀態:Missing 和 Existing。 Null 是遺漏值。

適用於採礦模型數據行。

要求

時間序列模型必須包含索引鍵時間數據行,其中包含唯一值、輸入數據行,以及至少一個可預測的數據行。

輸入和可預測數據行

Microsoft時間序列演算法支援下表所列的特定輸入數據行內容類型、可預測的數據行內容類型和模型旗標。

內容類型
輸入屬性 連續、索引鍵、索引鍵時間和數據表
可預測屬性 連續、數據表

注意

支援迴圈和已排序的內容類型,但演算法會將它們視為離散值,而且不會執行特殊處理。

另請參閱

Microsoft 時間序列演算法
時間序列模型查詢範例
時間序列模型的採礦模型內容 (Analysis Services - 數據採礦)