x13_auto_arima

x13-auto-arima包括自动ARIMA模型选择程序,主要基于TRMO(1996)及后续修订中实施的GomezMaravall(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

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

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

  • identification 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。算法规模如下:

  • 支持规模

    • 行:单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]

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:表示单位周期内数据的频率,即单位ts1ts2的频率。

  • start:格式为n1.n2,表示开始日期是第n1ts1中的第n2ts2。

单位时间

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)时,预测结论上界。

    • 数据展示

      image

  • 输出表outputDetailTableName

    • 字段说明

      column name

      comment

      key

      • model:表示模型

      • evaluation:表示评估结果

      • parameters:表示训练参数

      • log:表示训练日志

      summary

      存储具体信息。

    • 数据展示

      image

常见问题

  • 为什么预测结果都一样?

    在模型训练异常时,会调用均值模型,则所有预测结果都是训练数据的均值。常见的异常包括时序差分diff后不稳定、训练没有收敛、方差为0等,您可以在logview中查看单独节点的stderr文件,获取具体的异常信息。

  • 参数非常多,如何设置?

    x13_arima组件需要设置p、d、q、sp、sdsq等参数,如果不确定如何配置,建议使用

    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