常用时间序列模型

1.差分指数平滑法

当时间序列的变动具有直线趋势时,用一次指数平滑法会出现滞后偏差,其原因在于数据不满足模型要求。
因此,我们也可以从数据变换的角度来考虑改进措施,如运用差分方法先对数据作一些技术上的处理,使之能适合于一次指数平滑模型,以后再对输出结果作技术上的返回处理,使之恢复为原变量的形态。
差分方法是改变数据变动趋势的简易方法。当时间序列呈直线增加时,可运用一阶差分指数平滑模型来预测。其公式如下:
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分
其中PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_02为差分符号。

例题

某工业企业1977~1986年锅炉燃料消耗量为

年份

消耗量(百吨)

1977

24

1978

26

1979

27

1980

30

1981

32

1982

33

1983

36

1984

40

1985

41

1986

44

PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_03,预测1987年的消耗量。
使用R语言编程预测:

myEMA <- function (y,n,alpha){
  ema <- c()
  ema[1:(n-1)] <- NA
  ema[n]<- mean(y[1:n])
  for (i in (n+1):length(y)){
    ema[i]<-alpha* y[i] + 
      (1-alpha) * ema[i-1]
  }
  return(ema)
}
y = c(24,26,27,30,32,33,36,40,41,44)
dy = diff(y)
dy
dy_hat = myEMA(dy,1,0.4)
dy_hat
y_pred = y[10] + dy_hat[9]
y_pred

PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_04


预测 1987 年燃料消耗量为46.49002百吨。

2. 自适应滤波法

自适应滤波法与移动平均法、指数平滑法一样,也是以时间序列的历史观测值进行某种加权平均来预测的,它要寻找一组“最佳”的权数,其办法是先用一组给定的权数来计算一个预测值,然后计算预测误差,再根据预测误差调整权数以减少误差。这样反复进行,直至找出一组“最佳”权数,使误差减少到最低限度。由于这种调整权数的过程与通信工程中的传输噪声过滤过程极为接近,故称为自适应滤波法。自适应滤波法的基本预测公式为
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_r语言_05
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_06为第PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_07期的预测值,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_08为第PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_09期的观测值权数,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_10为第PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_09期的观测值,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_12为权数的个数。

其调整权数的公式为
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_13

例题

某时间序列数据表

时间

观测值

1

0.1

2

0.2

3

0.3

4

0.4

5

0.5

6

0.6

7

0.7

8

0.8

9

0.9

10

1.0

PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_14,初始权数PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_15,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_16,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_17

y<-c()
for (i in 1:10){
	y[i]=0.1*i
}
y

adfilter <-function(y,n,w1,w2,k){
 f<-c()
 f[1:n] <- NA
 for (i in (n+1):(length(y))){
  f[i]=w1*y[i-1]+w2*y[i-2]
  w1=w1+2*k*(y[i]-f[i])*y[i-1]
  w2=w2+2*k*(y[i]-f[i])*y[i-2]
  }
 print(w1)
 print(w2)
 f[length(y)+1]=w1*y[length(y)]+w2*y[length(y)-1]
 return(f)
}		
adfilter(y,2,0.5,0.5,0.9)

PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_18


所以第11期的预测值为1.0995069。

例题中将k设为0.9,并不科学。k类似于深度学习中的学习率,会影响参数更新的速度,如果设定的不好,可能会导致不收敛。

3. 趋势外推预测方法

趋势外推法是根据事物的历史和现时资料,寻求事物发展规律,从而推测出事物未来状况的一种比较常用的预测方法。利用趋势外推法进行预测,主要包括六个阶段:

  • 选择应预测的参数;
  • 收集必要的数据;
  • 利用数据拟合曲线;
  • 趋势外推;
  • 预测说明;
  • 研究预测结果在进行决策中应用的可能性。

趋势外推法常用的典型数学模型有: 指数曲线、修正指数曲线、生长曲线、包络曲线等。

Logistic曲线(生长曲线)

生物的生长过程经历发生、发展到成熟三个阶段,在三个阶段生物的生长速度是不一样的,例如南瓜的重量增长速度,在第一阶段增长的较慢,在发展时期则突然加快,而到了成熟期又趋减慢,形成一条 S 形曲线,这就是有名的 Logistic 曲线 (生长曲线),很多事物,如技术和产品发展进程都有类似的发展过程,因此 Logistic 曲线在预测中有相当广泛的应用。
Logistic曲线的一般数学模型是
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_19
式中PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_r语言_20为预测值,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_21PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_r语言_20的极限值,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_23为增长率常数,PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_24
解此微分方程可得
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_r语言_25
Logistic 曲线在Facebook开发的Prophet模型中得到应用,在考虑时间序列的趋势时,Prophet提供了两种选择,一种就是预测量的趋势关于时间呈线性关系,另一种就是预测量的趋势与时间形成Logistic曲线。

平稳时间序列

一个时间序列,如果均值没有系统的变化(无趋势)、方差没有系统变化,且严格消除了周期性变化,就称之是平稳的。本部分,我们指的平稳是指宽平稳,其特性是序列的统计特性不随时间的平移而变化,即均值和协方差不随时间的平移而变化。

平稳随机序列 (平稳时间序列)

均值函数

给定随机过程 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_26 ,固定 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_27 是一个随机变量,设其均值为 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_28 ,当 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_r语言_29 变动时,此均值是 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_r语言_29 的函数,记为
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_31
称为随机过程的均值函数。

自协方差函数

给定随机过程 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_数据_26 ,取 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_33 ,定义其自协方差函数为
PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_34

平稳时间序列

设随机序列 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_35

  • PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_36
  • PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_37PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_差分_38 无关
    则称 PYTHON中时间序列简单平滑预测法例题解析 时间序列平滑模型_时间序列_39

参考资料

Datawhale 开源文档:https://github.com/datawhalechina/team-learning-data-mining/tree/master/TimeSeries

感谢Datawhale对开源学习的贡献!