全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
机器学习PAI

时间序列

更新时间:2017-11-06 14:50:08


时间序列


目录


x13_arima

Arima全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),是由博克思(Box)和詹金斯(Jenkins)于70年代初提出一著名时间序列预测方法,所以又称为box-jenkins模型、博克思-詹金斯法.

x13-arima是基于开源X-13ARIMA-SEATS封装的针对季节性调整的arima算法。

X-13ARIMA-SEATS Seasonal Adjustment Program 详细介绍请见链接 wiki

Arima 详细介绍请见链接 wiki

pai命令行

  1. pai -name x13_arima
  2. -project algo_public
  3. -DinputTableName=pai_ft_x13_arima_input
  4. -DseqColName=id
  5. -DvalueColName=number
  6. -Dorder=3,1,1
  7. -Dstart=1949.1
  8. -Dfrequency=12
  9. -Dseasonal=0,1,1
  10. -Dperiod=12
  11. -DpredictStep=12
  12. -DoutputPredictTableName=pai_ft_x13_arima_out_predict
  13. -DoutputDetailTableName=pai_ft_x13_arima_out_detail

参数说明

参数名称 参数描述 取值范围 是否必选,默认值/行为
inputTableName 输入表 表名 必选
inputTablePartitions 输入表中指定哪些分区参与训练, 格式为: Partition_name=value. 如果是多级格式为name1=value1/name2=value2; 如果是指定多个分区, 中间用’,’分开 可选, 默认值选择所有分区
seqColName 时序列 列名 必选,仅用来对valueColName 排序,具体数值与计算无关
valueColName 数值列 列名 必选
groupColNames 分组列,多列已逗号分隔,如col0,col1; 每个分组会构建一个时间序列 列名 可选
order p,d,q 分别表示自回归系数、差分、滑动回归系数 p,d,q均为非负整数,范围[0, 36] 必选
start 时序开始日期 字符串,格式year.seasonal, 如1986.1
时序格式介绍
可选,默认为1.1
frequency 时序频率 正整数,范围(0, 12]
时序格式介绍
可选,默认为12, 表示12月/年
seasonal sp,sd,sq 分别表示季节性自回归系数、季节性差分、季节性滑动回归系数 sp,sd,sq均为非负整数,范围[0, 36] 可选,默认无seasonal
period seasonal周期 数字,范围(0, 100] 可选,默认为 frequency
maxiter 最大迭代次数 正整数 可选,默认为 1500
tol tolerance,容忍度 double类型 可选,默认为 1e-5
predictStep 预测条数 数字,范围(0, 365] 可选,默认为12
confidenceLevel 预测置信水平 数字,范围(0, 1)开区间 可选,默认为 0.95
outputPredictTableName 预测输出表 表名 必选
outputDetailTableName 详细信息表 表名 必选
outputTablePartition 输出分区 分区名 可选,默认不输出到分区
coreNum 节点个数 与参数memSizePerCore配对使用,正整数 可选, 默认自动计算
memSizePerCore 单个节点内存大小,单位M 正整数,范围[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]

1) start=1949.3, frequency=12表示数据是monthly per year, 预测开始的日期是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

2) start=1949.3, frequency=4表示数据是quarterly per year, 预测开始的日期是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

3) start=1949.3, frequency=7表示数据是daily per week, 预测开始的日期是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

4) start=1949.1, frequency=1 可以表示任何时间单位, 预测开始日期是1963.00

cycle p1
1949 1
1950 2
1951 3
1951 4
1952 5
1953 6
1954 7
1955 8
1956 9
1957 10
1958 11
1959 12
1960 13
1961 14
1962 15

具体示例

  • 测试数据使用的数据:AirPassengers。这个数据集是1949-1960年每个月国际航空的乘客数量的数据。```

create table pai_ft_x13_arima_input(id bigint,number bigint);tunnel upload data/airpassengers.csv pai_ft_x13_arima_input -h true;

  1. * pai命令
  2. ```bash
  3. pai -name x13_arima
  4. -project algo_public
  5. -DinputTableName=pai_ft_x13_arima_input
  6. -DseqColName=id
  7. -DvalueColName=number
  8. -Dorder=3,1,1
  9. -Dseasonal=0,1,1
  10. -Dstart=1949.1
  11. -Dfrequency=12
  12. -Dperiod=12
  13. -DpredictStep=12
  14. -DoutputPredictTableName=pai_ft_x13_arima_out_predict
  15. -DoutputDetailTableName=pai_ft_x13_arima_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

PaiWeb展示-模型系数(key=model)

image

PaiWeb展示-评估指标(key=evaluation)

image

算法规模

  • 支持规模

行:单group数据最大1200条

列:1数值列

  • 资源计算方式

不设置groupColNames, 默认计算方式

coreNum = 1

memSizePerCore = 4096

设置groupColNames,默认计算方式

coreNum = floor(总数据行数 / 12万)

memSizePerCore = 4096

训练数据集

id number
1 112
2 118
3 132
4 129
5 121

x13_auto_arima

x13-auto-arima includes an automatic ARIMA model selection procedure based largely on the procedure of Gomez and Maravall (1998) as implemented in TRAMO (1996) and subsequent revisions.

x13-auto-arima选择过程如下

  1. default model esitmation.

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

  2. identi cation of di erencing orders

    如果设置了diff和seasonalDiff,则跳过此步使用 Unit root test (wiki )确定差分d,和季节性差分D

  3. identi cation of ARMA model orders

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

  4. comparison of identifi ed model with default model

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

  5. final model checks

pai命令行

  1. pai -name x13_auto_arima
  2. -project algo_public
  3. -DinputTableName=pai_ft_x13_arima_input
  4. -DseqColName=id
  5. -DvalueColName=number
  6. -Dstart=1949.1
  7. -Dfrequency=12
  8. -DpredictStep=12
  9. -DoutputPredictTableName=pai_ft_x13_arima_out_predict2
  10. -DoutputDetailTableName=pai_ft_x13_arima_out_detail2

参数说明

参数名称 参数描述 取值范围 是否必选,默认值/行为
inputTableName 输入表 表名 必选
inputTablePartitions 输入表中指定哪些分区参与训练, 格式为: Partition_name=value. 如果是多级格式为name1=value1/name2=value2; 如果是指定多个分区, 中间用’,’分开 可选, 默认值选择所有分区
seqColName 时序列 列名 必选,仅用来对valueColName 排序,具体数值与计算无关
valueColName 数值列 列名 必选
groupColNames 分组列,多列已逗号分隔,如col0,col1; 每个分组会构建一个时间序列 列名 可选
start 时序开始日期 字符串,格式year.seasonal, 如1986.1
时序格式介绍
可选,默认为1.1
frequency 时序频率 正整数,范围(0, 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, 不指定diff
seasonalDiff 季节性差分d 正整数,范围[0,1]
seasonalDiff与maxSeasonalDiff同时设置时
maxSeasonalDiff被忽略
可选,默认-1,不指定seasonalDiff
maxiter 最大迭代次数 正整数 可选,默认为 1500
tol tolerance,容忍度 double类型 可选,默认为 1e-5
predictStep 预测条数 数字,范围(0, 365] 可选,默认为12
confidenceLevel 预测置信水平 数字,范围(0, 1)开区间 可选,默认为 0.95
outputPredictTableName 预测输出表 表名 必选
outputDetailTableName 详细信息表 表名 必选
outputTablePartition 输出分区 分区名 可选,默认不输出到分区
coreNum 节点个数 与参数memSizePerCore配对使用,正整数 可选, 默认自动计算
memSizePerCore 单个节点内存大小,单位M 正整数,范围[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]

1) start=1949.3, frequency=12表示数据是monthly per year, 预测开始的日期是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

2) start=1949.3, frequency=4表示数据是quarterly per year, 预测开始的日期是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

3) start=1949.3, frequency=7表示数据是daily per week, 预测开始的日期是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

4) start=1949.1, frequency=1 可以表示任何时间单位, 预测开始日期是1963.00

cycle p1
1949 1
1950 2
1951 3
1951 4
1952 5
1953 6
1954 7
1955 8
1956 9
1957 10
1958 11
1959 12
1960 13
1961 14
1962 15
具体示例
  • 测试数据使用的数据:AirPassengers。这个数据集是1949-1960年每个月国际航空的乘客数量的数据。查看数据```

create table pai_ft_x13_arima_input(id bigint,number bigint);tunnel upload data/airpassengers.csv pai_ft_x13_arima_input -h true;

  1. * 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

PaiWeb展示-模型系数(key=model)

image

PaiWeb展示-评估指标(key=evaluation)

image

算法规模

  • 支持规模

行:单group数据最大1200条

列:1数值列

  • 资源计算方式

不设置groupColNames, 默认计算方式

coreNum = 1

memSizePerCore = 4096

设置groupColNames,默认计算方式

coreNum = floor(总数据行数 / 12万)

memSizePerCore = 4096

常见问题

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

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

训练数据集

id number
1 112
2 118
3 132
4 129
5 121
本文导读目录