x13-auto-arima包括自動ARIMA模型選擇程序,主要基于TRMO(1996)及后續修訂中實施的Gomez和Maravall(1998)程序。 本文為您介紹x13_auto_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工作流頁面配置組件參數。
頁簽 | 參數 | 描述 |
字段設置 | 時序列 | 必選,僅用來對數值列排序,具體數值與計算無關。 |
數值列 | 必選。 | |
分組列 | 可選,多列以逗號(,)分隔,例如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被忽略。 | |
預測條數 | 支持輸入數字,正整數。取值范圍為(0, 120]。 | |
預測置信區間 | 默認值為0.95。 | |
容忍度 | 可選,默認值為1e-5。 | |
最大迭代次數 | 支持輸入數字,正整數。默認值為1500。 | |
執行調優 | 核數目 | 節點個數,默認自動計算。 |
內存數 | 單個節點內存大小,單位為MB。 |
方式二:PAI命令方式
使用PAI命令方式,配置該組件參數。您可以使用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 | 否 | 時序頻率,正整數,范圍為(0, 12]。請參見時序格式介紹。 | 12 說明 12表示12月/年。 |
maxOrder | 否 | p,q最大值,正整數,范圍為[0,4]。 | 2 |
maxSeasonalOrder | 否 | 季節性p,q最大值,正整數,范圍為[0,2]。 | 1 |
maxDiff | 否 | 差分d最大值。正整數,范圍為[0,2]。 | 2 |
maxSeasonalDiff | 否 | 季節性差分d最大值。正整數,范圍為[0,1]。 | 1 |
diff | 否 | 差分d,正整數,范圍為[0,2]。 diff與maxDiff同時設置時,maxDiff被忽略。 diff與seasonalDiff要同時設置。 | -1 說明 取值為-1表示不指定diff。 |
seasonalDiff | 否 | 季節性差分d。正整數,范圍為[0,1]。 seasonalDiff與maxSeasonalDiff同時設置時,maxSeasonalDiff被忽略。 | -1 說明 取值為-1表示不指定seasonalDiff。 |
maxiter | 否 | 最大迭代次數,正整數 | 1500 |
tol | 否 | 容忍度,DOUBLE類型。 | 1e-5 |
predictStep | 否 | 預測條數,數字,范圍為(0, 365]。 | 12 |
confidenceLevel | 否 | 預測置信水平,數字,范圍為(0, 1)。 | 0.95 |
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_arima。