x13_auto_arima是一個用於時間序列分析的演算法,包含自動選擇ARIMA模型的功能。該演算法基於Gomez和Maravall(1998)在TRMO(1996)及其後續修訂中實施的程式,通過自動識別和選擇最佳的ARIMA參數,以適應資料的季節性和趨勢特徵。這種自動化過程簡化了模型構建,提升了預測精度和效率。
演算法說明
x13_auto_arima選擇過程如下:
default model estimation
當
frequency = 1時,預設模型是(0,1,1)。當
frequency > 1時,預設模型是(0,1,1)(0,1,1)。identification of differencing orders
如果設定了diff 和 seasonalDiff,則跳過此步驟。
使用
Unit root test (wiki )確定差分d,和季節性差分D。identification of ARMA model orders
根據 BIC(wiki) 準則選擇最合適的模型, 其參數maxOrder、maxSeasonalOrder在此步驟起作用。
comparison of identified model with default model
使用Ljung-Box Q statistic(wiki) 比較模型,如果兩個模型均是不可接受的,則使用
(3,d,1)(0,D,1)模型。final model checks
Arima的詳細介紹請參見wiki。演算法規模如下:
支援規模
行:單Group資料最大1200條
列:1數值列
資源計算方式
不設定groupColNames,預設計算方式
coreNum=1 memSizePerCore=4096設定groupColNames,預設計算方式
coreNum=floor(總資料行數/12萬) memSizePerCore=4096
使用限制
支援的計算引擎為MaxCompute。
組件配置
方式一:可視化方式
在Designer工作流程頁面添加x13_auto_arima組件,並在介面右側配置相關參數:
參數類型 | 參數 | 描述 |
欄位設定 | 時序列 | 必選,僅用來對數值列排序,具體數值與計算無關。 |
數值列 | 必選。 | |
分組列 | 可選,多列以逗號(,)分隔,例如col0,col1,每個分組會構建一個時間序列。 | |
參數設定 | 開始日期 | 支援輸入的格式為year.seasonal。例如1986.1。 |
series頻率 | 支援輸入正整數,取值範圍為(0,12]。 | |
p,q最大值 | 支援輸入正整數,取值範圍為(0,4]。 | |
季節性p,q最大值 | 支援輸入數字,取值範圍為(0,2]。 | |
差分d最大值 | 支援輸入數字,正整數,取值範圍為(0,2]。 | |
季節性差分d最大值 | 支援輸入數字,正整數。取值範圍為(0, 1]。 | |
差分d | 支援輸入數字,正整數。取值範圍為(0, 2]。 diff與maxDiff同時設定時,maxDiff被忽略。 diff與seasonalDiff要同時設定。 | |
季節性差分d | 支援輸入數字,正整數。取值範圍為(0, 1]。 seasonalDiff與maxSeasonalDiff同時設定時,maxSeasonalDiff被忽略。 | |
預測條數 | 預測多少條。例如用上個月每天的銷量,預測新的一周的銷量,那預測條數就是7。如果選了分組列,那每一組都會預測這麼多條。 支援輸入數字,正整數。取值範圍為(0, 120]。 | |
預測信賴區間 | 預設值為0.95。 | |
容忍度 | 可選,預設值為1e-5。 | |
最大迭代次數 | 支援輸入數字,正整數。預設值為1500。 | |
執行調優 | 核心數目 | 節點個數,預設自動計算。 |
記憶體數 | 單個節點記憶體大小,單位為MB。 |
方式二:PAI命令方式
使用PAI命令配置x13_auto_arima組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見SQL指令碼。
PAI -name x13_auto_arima
-project algo_public
-DinputTableName=pai_ft_x13_arima_input
-DseqColName=id
-DvalueColName=number
-Dstart=1949.1
-Dfrequency=12
-DpredictStep=12
-DoutputPredictTableName=pai_ft_x13_arima_out_predict2
-DoutputDetailTableName=pai_ft_x13_arima_out_detail2參數 | 是否必選 | 預設值 | 描述 |
inputTableName | 是 | 無 | 輸入表的名稱 |
inputTablePartitions | 否 | 預設選擇所有分區 | 輸入表中,用於訓練的特徵列名 |
seqColName | 是 | 無 | 時序列。僅用來對valueColName排序。 |
valueColName | 是 | 無 | 數值列 |
groupColNames | 否 | 無 | 分組列,多列用逗號分隔,如“col0,col1”。每個分組會構建一個時間序列 |
start | 否 | 1.1 | 時序開始日期,字串,格式為 |
frequency | 否 | 12 說明 12表示12月/年。 | 時序頻率,正整數,範圍為(0, 12]。請參見時序格式介紹。 |
maxOrder | 否 | 2 | p,q最大值,正整數,範圍為[0,4]。 |
maxSeasonalOrder | 否 | 1 | 季節性p,q最大值,正整數,範圍為[0,2]。 |
maxDiff | 否 | 2 | 差分d最大值。正整數,範圍為[0,2]。 |
maxSeasonalDiff | 否 | 1 | 季節性差分d最大值。正整數,範圍為[0,1]。 |
diff | 否 | -1 說明 取值為-1表示不指定diff。 | 差分d,正整數,範圍為[0,2]。 diff與maxDiff同時設定時,maxDiff被忽略。 diff與seasonalDiff要同時設定。 |
seasonalDiff | 否 | -1 說明 取值為-1表示不指定seasonalDiff。 | 季節性差分d。正整數,範圍為[0,1]。 seasonalDiff與maxSeasonalDiff同時設定時,maxSeasonalDiff被忽略。 |
maxiter | 否 | 1500 | 最大迭代次數,正整數 |
tol | 否 | 1e-5 | 容忍度,DOUBLE類型。 |
predictStep | 否 | 12 | 預測條數,數字,範圍為(0, 365]。 |
confidenceLevel | 否 | 0.95 | 預測置信水平,數字,範圍為(0, 1)。 |
outputPredictTableName | 是 | 無 | 預測輸出表 |
outputDetailTableName | 是 | 無 | 詳細資料表 |
outputTablePartition | 否 | 預設不輸出到分區 | 輸出分區,分區名。 |
coreNum | 否 | 預設自動計算 | 節點個數,與參數memSizePerCore配對使用,正整數。 |
memSizePerCore | 否 | 預設自動計算 | 單個節點記憶體大小,單位為MB。正整數,範圍為[1024, 64 *1024]。 |
lifecycle | 否 | 預設沒有生命週期 | 指定輸出表的生命週期。 |
時序格式介紹
參數start和frequency規定了資料(valueColName)的兩個時間維度ts1、ts2:
frequency:表示單位周期內資料的頻率,即單位ts1中ts2的頻率。
start:格式為
n1.n2,表示開始日期是第n1個ts1中的第n2個ts2。
單位時間 | ts1 | ts2 | frequency | start |
12月/年 | 年 | 月 | 12 | 1949.2表示第1949年中的第2個月 |
4季/年 | 年 | 季 | 4 | 1949.2表示第1949年中的第2個季度 |
7天/周 | 周 | 天 | 7 | 1949.2表示第1949周中的第2天 |
1 | 任何時間單位 | 1 | 1 | 1949.1表示第1949(年、天、時等) |
例如value=[1,2,3,5,6,7,8,9,10,11,12,13,14,15]
start=1949.3,frequency=12表示資料是12月/年,預測開始日期是1950.06。year
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
1949
1
2
3
4
5
6
7
8
9
10
1950
11
12
13
14
15
start=1949.3,frequency=4表示資料是4季/年,預測開始的日期是1953.02。year
Qtr1
Qtr2
Qtr3
Qtr4
1949
1
2
1950
3
4
5
6
1951
7
8
9
10
1952
11
12
13
14
1953
15
start=1949.3,frequency=7表示資料是7天/周,預測開始的日期是1951.04。week
Sun
Mon
Tue
Wed
Thu
Fri
Sat
1949
1
2
3
4
5
1950
6
7
8
9
10
11
12
1951
13
14
15
start=1949.1,frequency=1表示任何時間單位,預測開始日期是1963.00。cycle
p1
1949
1
1950
2
1951
3
1952
4
1953
5
1954
6
1955
7
1956
8
1957
9
1958
10
1959
11
1960
12
1961
13
1962
14
1963
15
具體樣本
準備測試資料
使用的資料集為AirPassengers.csv,是1949~1960年每個月國際航空的乘客數量,如下表所示。關於該資料集更詳細的內容介紹,請參見AirPassengers。
id | number |
1 | 112 |
2 | 118 |
3 | 132 |
4 | 129 |
5 | 121 |
... | ... |
使用MaxCompute用戶端的Tunnel命令上傳資料,命令如下。關於MaxCompute用戶端的安裝及配置請參見使用本地用戶端(odpscmd)串連,關於Tunnel命令使用詳情請參見Tunnel命令。
create table pai_ft_x13_arima_input(id bigint,number bigint);
tunnel upload xxx/airpassengers.csv pai_ft_x13_arima_input -h true;執行PAI命令
您可以使用SQL指令碼執行如下PAI命令,也可以使用ODPS SQL節點執行如下PAI命令。
PAI -name x13_auto_arima
-project algo_public
-DinputTableName=pai_ft_x13_arima_input
-DseqColName=id
-DvalueColName=number
-Dstart=1949.1
-Dfrequency=12
-DmaxOrder=4
-DmaxSeasonalOrder=2
-DmaxDiff=2
-DmaxSeasonalDiff=1
-DpredictStep=12
-DoutputPredictTableName=pai_ft_x13_arima_auto_out_predict
-DoutputDetailTableName=pai_ft_x13_arima_auto_out_detail輸出說明:
輸出表outputPredictTableName
欄位說明
column name
comment
pdate
預測日期。
forecast
預測結論。
lower
信賴度為confidenceLevel(預設0.95)時,預測結論下界。
upper
信賴度為confidenceLevel(預設0.95)時,預測結論上界。
資料展示

輸出表outputDetailTableName
欄位說明
column name
comment
key
model:表示模型
evaluation:表示評估結果
parameters:表示訓練參數
log:表示訓練日誌
summary
儲存具體資訊。
資料展示

常見問題
為什麼預測結果都一樣?
在模型訓練異常時,會調用均值模型,則所有預測結果都是訓練資料的均值。常見的異常包括時序差分diff後不穩定、訓練沒有收斂、方差為0等,您可以在logview中查看單獨節點的stderr檔案,擷取具體的異常資訊。
參數非常多,如何設定?
x13_arima組件需要設定p、d、q、sp、sd和sq等參數,如果不確定如何配置,建議使用
x13_auto_arima組件。該組件只需設定上界,系統會自動搜尋最優參數。
異常資訊:
ERROR: Number of observations after differencing and/or conditional AR estimation is 9, which is less than the minimum series length required for the model estimated, 24異常原因為資料較少,請調整頻率,或增加資料。
異常資訊:
ERROR: Order of the MA operator is too large異常原因為資料較少。
異常資訊:
ERROR: Series to be modelled and/or seasonally adjusted must have at least 3 complete years of data如果填寫了季節性參數,則需要3年的資料。
相關文檔
x13_arima是基於開源X-13ARIMA-SEATS封裝的針對季節性調整的Arima演算法。您可以使用x13_arima組件進行資料處理,詳情請參見x13_auto_arima。