x13_arima是一種用於時間序列分析的演算法,專門用於處理季節性資料的調整。它基於開源軟體包X-13ARIMA-SEATS,結合了ARIMA模型和季節性調整技術,以提高預測的準確性和資料分析的有效性。
演算法說明
Arima全稱為自迴歸積分滑動平均模型(Autoregressive Integrated Moving Average Model),是由博克思(Box)和詹金斯(Jenkins)於70年代初提出的著名時間序列預測方法,所以又稱為box-jenkins模型、博克思-詹金斯法。
演算法規模如下:
支援規模
行:單Group資料最大1200條
列:1數值列
資源計算方式
不設定groupColNames,預設計算方式
coreNum=1 memSizePerCore=4096設定groupColNames,預設計算方式
coreNum=floor(總資料行數/12萬) memSizePerCore=4096
組件配置
方式一:可視化方式
在Designer工作流程頁面添加x13_arima組件,並在介面右側配置相關參數:
參數類型 | 參數 | 描述 |
欄位設定 | 時序列 | 必選,僅用來對數值列排序,具體數值與計算無關。 |
數值列 | 必選。 | |
分組列 | 可選,多列以半形逗號(,)分隔,例如col0,col1,每個分組會構建一個時間序列。 | |
參數設定 | 格式 | 支援輸入的格式為p,d,q。 p、d和q均為非負整數,取值範圍為[0, 36]。
|
開始日期 | 支援輸入的格式為year.seasonal。例如1986.1。 | |
series頻率 | 支援輸入正整數,取值範圍為12。 | |
格式 | 支援輸入的格式為sp,sd,sq。sp、sd和sq均為非負整數,取值範圍為[0, 36]。
| |
seasonal周期 | 支援輸入數字,取值範圍為(0,12]。預設值為12。 | |
預測條數 | 支援輸入數字,取值範圍為(0,120]。預設值為12。 | |
預測置信水平 | 支援輸入數字,取值範圍為(0, 1)預設值為0.95。 | |
執行調優 | 核心數目 | 節點個數,預設自動計算。 |
記憶體數 | 單個節點記憶體大小,單位為MB。 |
方式二:PAI命令方式
使用PAI命令配置x13_arima組件參數。您可以使用SQL指令碼組件進行PAI命令調用,詳情請參見SQL指令碼。
PAI -name x13_arima
-project algo_public
-DinputTableName=pai_ft_x13_arima_input
-DseqColName=id
-DvalueColName=number
-Dorder=3,1,1
-Dstart=1949.1
-Dfrequency=12
-Dseasonal=0,1,1
-Dperiod=12
-DpredictStep=12
-DoutputPredictTableName=pai_ft_x13_arima_out_predict
-DoutputDetailTableName=pai_ft_x13_arima_out_detail參數 | 是否必選 | 預設值 | 描述 |
inputTableName | 是 | 無 | 輸入表的名稱。 |
inputTablePartitions | 否 | 預設選擇所有分區 | 輸入表中,用於訓練的特徵列名。 |
seqColName | 是 | 無 | 時序列。僅用來對valueColName排序。 |
valueColName | 是 | 無 | 數值列。 |
groupColNames | 否 | 無 | 分組列,多列用逗號分隔,例如col0,col1。每個分組會構建一個時間序列。 |
order | 是 | 無 | p、d和q分別表示自迴歸係數、差分、滑動迴歸係數。取值均為非負整數,範圍為[0, 36]。 |
start | 否 | 1.1 | 時序開始日期。字串類型,格式為year.seasonal,例如1986.1。請參見時序格式介紹。 |
frequency | 否 | 12 說明 12表示12月/年。 | 時序頻率。正整數類型,範圍為(0, 12]。請參見時序格式介紹。 |
seasonal | 否 | 無seasonal | sp、sd和sq分別表示季節性自迴歸係數、季節性差分、季節性滑動迴歸係數。取值均為非負整數,範圍為[0, 36]。 |
period | 否 | frequency | seasonal周期。數字類型,取值範圍為(0, 100]。 |
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
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
14
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 xxxx/airpassengers.csv pai_ft_x13_arima_input -h true;執行PAI 命令
您可以使用SQL指令碼執行如下PAI命令,也可以使用ODPS SQL節點執行如下PAI命令。
PAI -name x13_arima
-project algo_public
-DinputTableName=pai_ft_x13_arima_input
-DseqColName=id
-DvalueColName=number
-Dorder=3,1,1
-Dseasonal=0,1,1
-Dstart=1949.1
-Dfrequency=12
-Dperiod=12
-DpredictStep=12
-DoutputPredictTableName=pai_ft_x13_arima_out_predict
-DoutputDetailTableName=pai_ft_x13_arima_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組件需要設定p、d、q、sp、sd和sq等參數,如果不確定如何配置,建議使用x13_auto_arima組件。該組件只需設定上界,系統會自動搜尋最優參數。詳情請參見x13_auto_arima。