赞
踩
当时间序列的变动具有直线趋势时,用一次指数平滑法会出现滞后偏差,其原因在于数据不满足模型要求。
因此,我们也可以从数据变换的角度来考虑改进措施,如运用差分方法先对数据作一些技术上的处理,使之能适合于一次指数平滑模型,以后再对输出结果作技术上的返回处理,使之恢复为原变量的形态。
差分方法是改变数据变动趋势的简易方法。当时间序列呈直线增加时,可运用一阶差分指数平滑模型来预测。其公式如下:
▽
y
t
=
y
t
−
y
t
−
1
▽
y
^
t
+
1
=
α
▽
y
t
+
(
1
−
α
)
▽
y
^
t
y
^
t
+
1
=
▽
y
^
t
+
1
+
y
t
\bigtriangledown y_t=y_t-y_{t-1} \\ \bigtriangledown \hat{y} _{t+1}=\alpha \bigtriangledown y_t+(1-\alpha )\bigtriangledown \hat{y} _{t} \\ \hat{y} _{t+1}=\bigtriangledown \hat{y} _{t+1}+y_t
▽yt=yt−yt−1▽y^t+1=α▽yt+(1−α)▽y^ty^t+1=▽y^t+1+yt
其中
▽
\bigtriangledown
▽为差分符号。
某工业企业1977~1986年锅炉燃料消耗量为
年份 | 消耗量(百吨) |
---|---|
1977 | 24 |
1978 | 26 |
1979 | 27 |
1980 | 30 |
1981 | 32 |
1982 | 33 |
1983 | 36 |
1984 | 40 |
1985 | 41 |
1986 | 44 |
取
α
=
0.4
\alpha=0.4
α=0.4,预测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
预测 1987 年燃料消耗量为46.49002百吨。
自适应滤波法与移动平均法、指数平滑法一样,也是以时间序列的历史观测值进行某种加权平均来预测的,它要寻找一组“最佳”的权数,其办法是先用一组给定的权数来计算一个预测值,然后计算预测误差,再根据预测误差调整权数以减少误差。这样反复进行,直至找出一组“最佳”权数,使误差减少到最低限度。由于这种调整权数的过程与通信工程中的传输噪声过滤过程极为接近,故称为自适应滤波法。自适应滤波法的基本预测公式为
y
^
t
+
1
=
∑
i
=
1
N
w
i
y
t
−
i
+
1
\hat{y} _{t+1}=\sum_{i=1}^{N} w_iy_{t-i+1}
y^t+1=i=1∑Nwiyt−i+1
y
^
t
+
1
\hat{y} _{t+1}
y^t+1为第
t
+
1
t+1
t+1期的预测值,
w
i
w_i
wi为第
t
−
i
+
1
t-i+1
t−i+1期的观测值权数,
y
t
−
i
+
1
y_{t-i+1}
yt−i+1为第
t
−
i
+
1
t-i+1
t−i+1期的观测值,
N
N
N为权数的个数。
其调整权数的公式为
w
i
′
=
w
i
+
2
k
⋅
e
i
+
1
y
t
−
i
+
1
w_i'=w_i+2k\cdot e_{i+1}y_{t-i+1}
wi′=wi+2k⋅ei+1yt−i+1
某时间序列数据表
时间 | 观测值 |
---|---|
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 |
取 N = 2 N=2 N=2,初始权数 w 1 = 0.5 w_1=0.5 w1=0.5, w 2 = 0.5 w_2=0.5 w2=0.5, k = 0.9 k=0.9 k=0.9
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)
所以第11期的预测值为1.0995069。
例题中将k设为0.9,并不科学。k类似于深度学习中的学习率,会影响参数更新的速度,如果设定的不好,可能会导致不收敛。
趋势外推法是根据事物的历史和现时资料,寻求事物发展规律,从而推测出事物未来状况的一种比较常用的预测方法。利用趋势外推法进行预测,主要包括六个阶段:
趋势外推法常用的典型数学模型有: 指数曲线、修正指数曲线、生长曲线、包络曲线等。
生物的生长过程经历发生、发展到成熟三个阶段,在三个阶段生物的生长速度是不一样的,例如南瓜的重量增长速度,在第一阶段增长的较慢,在发展时期则突然加快,而到了成熟期又趋减慢,形成一条 S 形曲线,这就是有名的 Logistic 曲线 (生长曲线),很多事物,如技术和产品发展进程都有类似的发展过程,因此 Logistic 曲线在预测中有相当广泛的应用。
Logistic曲线的一般数学模型是
d
y
d
t
=
r
y
(
1
−
y
L
)
\frac{\mathrm{d} y}{\mathrm{d} t} =ry\left (1-\frac{y}{L} \right )
dtdy=ry(1−Ly)
式中
y
y
y为预测值,
L
L
L为
y
y
y的极限值,
r
r
r为增长率常数,
r
>
0
r>0
r>0
解此微分方程可得
y
=
L
1
+
c
e
−
r
t
y=\frac{L}{1+ce^{-rt}}
y=1+ce−rtL
Logistic 曲线在Facebook开发的Prophet模型中得到应用,在考虑时间序列的趋势时,Prophet提供了两种选择,一种就是预测量的趋势关于时间呈线性关系,另一种就是预测量的趋势与时间形成Logistic曲线。
一个时间序列,如果均值没有系统的变化(无趋势)、方差没有系统变化,且严格消除了周期性变化,就称之是平稳的。本部分,我们指的平稳是指宽平稳,其特性是序列的统计特性不随时间的平移而变化,即均值和协方差不随时间的平移而变化。
给定随机过程
{
X
t
,
t
∈
T
}
\left \{ X_t,t\in T\right \}
{Xt,t∈T} ,固定
t
,
X
t
t,X_t
t,Xt 是一个随机变量,设其均值为
μ
t
\mu_t
μt ,当
t
t
t 变动时,此均值是
t
t
t 的函数,记为
μ
t
=
E
(
x
t
)
\mu_t=E\left ( x_t \right )
μt=E(xt)
称为随机过程的均值函数。
给定随机过程
{
X
t
,
t
∈
T
}
\left \{ X_t,t\in T\right \}
{Xt,t∈T} ,取
t
,
s
∈
T
t,s\in T
t,s∈T ,定义其自协方差函数为
γ
t
,
s
=
C
o
v
(
X
t
,
X
s
)
=
E
[
(
X
t
−
μ
t
)
(
X
s
−
μ
s
)
]
\gamma _{t,s}=Cov\left ( X_t,X_s \right ) =E\left [ \left (X_t-\mu_t \right ) \left ( X_s-\mu_s \right ) \right ]
γt,s=Cov(Xt,Xs)=E[(Xt−μt)(Xs−μs)]
设随机序列 { X t , t = 0 , ± 1 , ± 2 , ⋯ } \left \{ X_t,t=0,\pm 1,\pm 2,\cdots \right \} {Xt,t=0,±1,±2,⋯} 满足
Datawhale 开源文档:https://github.com/datawhalechina/team-learning-data-mining/tree/master/TimeSeries
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。