时间序列分析及应用r语言pdf_R语言时间序列分析(十一):指数平滑法

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言数据高效处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书,《R语言数据高效处理指南》(黄天元)【简介_书评_在线阅读】 - 当当图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。

简单指数平滑

指数平滑法是基于滑动平均法延伸而来的,滑动平均是把前N个序列的平均值作为N+1的预测,不断地往后计算,获得一条相对平滑的曲线。但是指数平滑法则认为,时间越靠近那么应该予以的权重就越大。赋予权重的大小一般以α表示,具体公式请参照7.1 Simple exponential smoothing | Forecasting: Principles and Practice,这里仅给出实现。

简单指数平滑的实现代码如下:

library(fpp2)
oildata <- window(oil, start=1996)
# Estimate parameters
fc <- ses(oildata, h=5)
# Accuracy of one-step-ahead training errors
round(accuracy(fc),2)
#>               ME  RMSE   MAE MPE MAPE MASE  ACF1
#> Training set 6.4 28.12 22.26 1.1 4.61 0.93 -0.03

其中,ses函数可以对后面的5个观测进行预测,但accuracy函数所给出的是在训练集中得到的准确度指标。可视化如下:

autoplot(fc) +
  autolayer(fitted(fc), series="Fitted") +
  ylab("Oil (millions of tonnes)") + xlab("Year")

c0dc24e508793d5a0c55050efa9cae36.png

拟合线和预测线都显示了出来,预测线还包含置信区间。这里对α进行了自动的估计,可以进行查看:

fc$model

Simple exponential smoothing 

Call:
 ses(y = oildata, h = 5) 

  Smoothing parameters:
    alpha = 0.8339 

  Initial states:
    l = 446.5868 

  sigma:  29.8282

     AIC     AICc      BIC 
178.1430 179.8573 180.8141 

α越大,说明对新近观测赋予的权重越高。

Holt指数平滑(考虑趋势性)

简单指数平滑没有考虑序列的趋势性,因此引入了Holt指数平滑法:

air <- window(ausair, start=1990)
fc <- holt(air, h=5)
fc$model

Holt's method 

Call:
 holt(y = air, h = 5) 

  Smoothing parameters:
    alpha = 0.8302 
    beta  = 1e-04 

  Initial states:
    l = 15.5715 
    b = 2.1017 

  sigma:  2.3645

     AIC     AICc      BIC 
141.1291 143.9863 147.6083 

可以看到这个方法比之前获得了一些新的参数,如beta和b。beta是趋势性的指数,它表示随着时间的变化,时间序列趋势所发生的变化。而b则是初始值。

该方法有一种变式,叫做Damped trend methods。它的假设是,一个序列在短期内是具有一定趋势的,但是在长期中却是围绕着一个均值在波动。这里引入一个新的参数ϕ,0<ϕ<1,一般在0.8到0.98之间,如果等于1,那么就与传统的Holt平滑法无异。实现如下:

fc <- holt(air, h=15)
fc2 <- holt(air, damped=TRUE, phi = 0.9, h=15)
autoplot(air) +
  autolayer(fc, series="Holt's method", PI=FALSE) +
  autolayer(fc2, series="Damped Holt's method", PI=FALSE) +
  ggtitle("Forecasts from Holt's method") + xlab("Year") +
  ylab("Air passengers in Australia (millions)") +
  guides(colour=guide_legend(title="Forecast"))

8fb3866a3b337e47eb9a1c4f6eed5586.png

可以看出来,红线可能更加合理,而蓝线很可能无止境地网上一直增长。观察一下模型参数:

fc2$model
Damped Holt's method 

Call:
 holt(y = air, h = 15, damped = TRUE, phi = 0.9) 

  Smoothing parameters:
    alpha = 0.763 
    beta  = 0.2526 
    phi   = 0.9 

  Initial states:
    l = 14.5766 
    b = 3.7517 

  sigma:  2.6165

     AIC     AICc      BIC 
145.3965 148.2536 151.8757 

ϕ(读作phi)是用来削弱趋势性的参数,ϕ越大则对趋势削弱的效果越小,等于1的时候则完全没有削弱的效果。如果0<ϕ<1,那么随着预测后续变量越多,将会让预测趋近于ℓT+ϕbT/(1−ϕ)ℓT+ϕbT/(1−ϕ)。具体细节请看:7.2 Trend methods | Forecasting: Principles and Practice。

上面的预测中我们认为给定了phi,如果给出可以自动进行估计。

Holt-Winters’平滑法

考虑了趋势性之后,还可以继续考虑季节性因素,进而提出Holt-Winters’平滑法。其中,季节性可以分为可加和可乘两种,如果季节性随着时间变化而变化,那么应该使用可乘,否则使用可加。代码如下:

aust <- window(austourists,start=2005)
fit1 <- hw(aust,seasonal="additive")
fit2 <- hw(aust,seasonal="multiplicative")

其中fit1是可加性的,fit2是可乘性的。可以用accuracy函数来判断哪个效果更好:

rbind(accuracy(fit1),accuracy(fit2))

                      ME     RMSE      MAE           MPE     MAPE      MASE        ACF1
Training set 0.008115785 1.763305 1.374062 -0.2860248405 2.973922 0.4502579 -0.06272507
Training set 0.092062283 1.575631 1.254960 -0.0006505533 2.705390 0.4112302 -0.07955726

可以看到fit2的RMSE更小,因此可以认为可乘性的模型更佳。

Holt-Winters’平滑法一样可以考虑趋势衰减,是要设置damp参数为TRUE即可。事实上一种比较优秀的方法就是用Holt-Winters'季节可乘的趋势衰减平滑法,具体评论如下:“A method that often provides accurate and robust forecasts for seasonal data is the Holt-Winters method with a damped trend and multiplicative seasonality”(见7.3 Holt-Winters’ seasonal method | Forecasting: Principles and Practice)。实现如下:

hw(y, damped=TRUE, seasonal="multiplicative")  #y为要进行平滑的时间序列

自动化平滑模型选择与预测

介绍了很多方法,它们可能在不同的情况中适用。为了用一站式的服务,引入了ets函数。它不能进行预测,但是能够根据时间序列的状况,选择最佳的模型。简单操作:

aust <- window(austourists, start=2005)
fit <- ets(aust)
summary(fit)
#> ETS(M,A,M) 
#> 
#> Call:
#>  ets(y = aust) 
#> 
#>   Smoothing parameters:
#>     alpha = 0.1908 
#>     beta  = 0.0392 
#>     gamma = 2e-04 
#> 
#>   Initial states:
#>     l = 32.3679 
#>     b = 0.9281 
#>     s = 1.022 0.9628 0.7683 1.247
#> 
#>   sigma:  0.0383
#> 
#>   AIC  AICc   BIC 
#> 224.9 230.2 240.9 
#> 
#> Training set error measures:
#>                   ME  RMSE  MAE     MPE  MAPE   MASE
#> Training set 0.04837 1.671 1.25 -0.1846 2.693 0.4095
#>                ACF1
#> Training set 0.2006

相信上述的解释已经能够看出来什么意思,最上面模型选择最后是ETS(M,A,M) 表示(关于详细的模型展开式,参考7.5 Innovations state space models for exponential smoothing | Forecasting: Principles and Practice),残差用可乘、趋势用可加、季节用可乘的模型。如果要直接进行预测,可以使用forecast函数,它接收一个时间序列,自动使用ETS函数进行模型选择并预测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值