x13-auto-arima包括自动ARIMA模型选择程序,主要基于TRMO(1996)及后续修订中实施的Gomez和Maravall(1998)的程序。

背景信息

x13_auto_arima选择过程如下:
  • default model esitmation

    frequency = 1时,默认模型是(0,1,1)

    frequency > 1时,默认模型是(0,1,1)(0,1,1)

  • identication of dierencing orders

    如果设置了diffseasonalDiff,则跳过此步骤。

    使用Unit root test (wiki )确定差分d,和季节性差分D。

  • identication of ARMA model orders

    根据 BIC(wiki) 准则选择最合适的模型, 其参数maxOrdermaxSeasonalOrder在此步骤起作用。

  • comparison of identified model with default model

    使用Ljung-Box Q statistic(wiki) 比较模型,如果两个模型均是不可接受的,则使用(3,d,1)(0,D,1)模型。

  • final model checks

Arima详细介绍请参见wiki

可视化方式

下面为您介绍在工作流页面配置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]

diffmaxDiff同时设置时,maxDiff被忽略。

diffseasonalDiff要同时设置。

季节性差分d 支持输入数字,正整数。取值范围为(0, 1]

seasonalDiffmaxSeasonalDiff同时设置时,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 时序开始日期,字符串,格式为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]

diffmaxDiff同时设置时,maxDiff被忽略。

diffseasonalDiff要同时设置。

-1
说明 取值为-1表示不指定diff。
seasonalDiff 季节性差分d。正整数,范围为[0,1]

seasonalDiffmaxSeasonalDiff同时设置时,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 指定输出表的生命周期。 默认没有生命周期

时序格式介绍

参数startfrequency规定了数据(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,是1949~1960年每个月国际航空的乘客数量,如下表所示。
id number
1 112
2 118
3 132
4 129
5 121
... ...
使用tunnel命令行工具上传数据,命令如下。
create table pai_ft_x13_arima_input(id bigint,number bigint);
tunnel upload data/airpassengers.csv pai_ft_x13_arima_input -h true;
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)时,预测结论上界。
    数据展示1
  • 输出表outputDetailTableName
    字段说明
    column name comment
    key
    • model:表示模型
    • evaluation:表示评估结果
    • parameters:表示训练参数
    • log:表示训练日志
    summary 存储具体信息。
    数据展示3
    PaiWeb展示-模型系数(key=model)4
    PaiWeb展示-评估指标(key=evaluation)5

算法规模

  • 支持规模
    • 行:单group数据最大1200条
    • 列:1数值列
  • 资源计算方式
    • 不设置groupColNames,默认计算方式
      coreNum=1
      memSizePerCore=4096
    • 设置groupColNames,默认计算方式
      coreNum = floor(总数据行数/12万)
      memSizePerCore = 4096

常见问题

为什么预测结果都一样?

在模型训练异常时,会调用均值模型,则所有预测结果都是训练数据的均值。

常见的异常包括时序差分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年的数据。