x13-auto-arima包括自动ARIMA模型选择程序,主要基于TRMO(1996)及后续修订中实施的Gomez和Maravall(1998)的程序。
背景信息
- default model esitmation
当
frequency = 1
时,默认模型是(0,1,1)
。当
frequency > 1
时,默认模型是(0,1,1)(0,1,1)
。 - identication of dierencing orders
如果设置了diff 和 seasonalDiff,则跳过此步骤。
使用
Unit root test (wiki )
确定差分d,和季节性差分D。 - identication 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。
可视化方式
页签 | 参数 | 描述 |
---|---|---|
字段设置 | 时序列 | 必选,仅用来对数值列排序,具体数值与计算无关。 |
数值列 | 必选 | |
分组列 | 可选,多列以逗号(,)分隔,例如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 -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 | 否 | 时序开始日期,字符串,格式为year.seasonal ,例如1986.1 。请参见时序格式介绍。
|
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 | 否 | 指定输出表的生命周期。 | 默认没有生命周期 |
时序格式介绍
- 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(年、天、时等) |
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
具体示例
测试数据
id | number |
---|---|
1 | 112 |
2 | 118 |
3 | 132 |
4 | 129 |
5 | 121 |
... | ... |
create table pai_ft_x13_arima_input(id bigint,number bigint);
tunnel upload data/airpassengers.csv pai_ft_x13_arima_input -h true;
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 存储具体信息。 数据展示PaiWeb展示-模型系数(key=model)PaiWeb展示-评估指标(key=evaluation)
算法规模
- 支持规模
- 行:单group数据最大1200条
- 列:1数值列
- 资源计算方式
- 不设置groupColNames,默认计算方式
coreNum=1 memSizePerCore=4096
- 设置groupColNames,默认计算方式
coreNum = floor(总数据行数/12万) memSizePerCore = 4096
- 不设置groupColNames,默认计算方式
常见问题
为什么预测结果都一样?
在模型训练异常时,会调用均值模型,则所有预测结果都是训练数据的均值。
常见的异常包括时序差分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年的数据。