本篇主要介绍ARIMA模型及用法。
一、知识回顾
首先,在R语言处理中,处理时间序列常用ts, zoo, xts函数,还有很多时间格式问题。
时间序列的摘要函数
ts(1:10, frequency = 7, start = c(12, 2))
1:10是数据序列,frequency是指定这个数据序列的周期是7(每个周期里有7个值),start里接受的两个参数,第一个数12是说这个序列的初始周期序号为12,第二个数2是说这个序列的第一个值是周期中的第2个值。
> print( ts(1:10, frequency = 7, start = c(12, 2)), calendar = TRUE)
p1 p2 p3 p4 p5 p6 p7
12 1 2 3 4 5 6
13 7 8 9 10
>
一个时间序列的均值函数(mean function)就是该时间序列在在某个时间索引 上的期望值:
自协方差函数(autocovariance function)和自相关函数(autocorrelation function)是衡量构成时间序列的随机变量在不同的时间点上相互的线性依赖的两个重要函数。
给定时间索引 和 ,可以计算自协方差函数:
当两个时间索引相同时,自协方差就是方差 方差和自协方差函数是用原始时间序列单位的平方单位衡量的。
ACF(Auto Correlation Function)自相关函数,用来检视数据周期性变化的函数,衡量 \(y_t\) 和 之间的相关性。其计算公式如下:
白噪声的定义就是时间序列中产生的随机变量都是具有均值为0,有限切相等的方差 σ w 2 \sigma_w^2 ,且不同时间步骤的随机变量是相互不相关的,有些定义还要求这些变量是独立同分布(independent and identically distribute,idd)的。高斯白噪声(Gaussian white noise)就是从正态分布抽取的白噪声序列。
PACF(Partial autocorrelation function, PACF),偏自相关函数,是在去除了等的影响后,衡量 和 之间的相关性。
————————@version 2019-06-18 09:35 ————————
- 平稳性假设:一个时间序列的概率表现不会随着时间的流逝而改变。
- 严格平稳:任何时间间隔的两个变量输出的联合概率相同。
- 弱平稳:均值函数不随时间变化,是一个常数,且自协方差函数仅仅依赖于序列中两点之间的时间延迟。
## 几个常用的预测模型
- 移动平均(Moving Average, MA)是一种随机过程,其在时间步骤 内的随机变量是一个白噪声过程的最近的线性组合。根据计算方法的不同,流行的移动平均包括简单移动平均、加权移动平均、指数移动平均,更高阶的移动平均算法则有分形自适应移动平均、赫尔移动平均等 [2]。
假设以 表示的各项均值为0,方差为 的白噪声随机变量。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动,是非常有用的。
移动平均法平用于滑常滤波,使用移动平均法进行预测能平滑掉需求的突然波动对预测结果的影响 [1]。
但移动平均法运用时也存在着如下问题:
1. 加大移动平均法的期数(即加大值)会使平滑波动效果更好,但会使预测值对数据实际变动更不敏感;
2. 移动平均值并不能总是很好地反映出趋势。由于是平均值,预测值总是停留在过去的水平上而无法预计会导致将来更高或更低的波动;
3. 移动平均法要由大量的过去数据的记录;
4. 它通过引进愈来愈期的新数据,不断修改平均值,以之作为预测值。
移动平均法的基本原理,是通过移动平均消除时间序列中的不规则变动和其他变动,从而揭示出时间序列的长期趋势。
简单移动平均(Simple Moving Average, SMA)就是对时间序列直接求等权重均值,因此使用简单。但其最令人诟病的就是它的滞后性。从上图不难看出,随着计算窗口 的增大,移动平均线越来越平滑,但同时也越来越滞后。事实上,任何移动平均算法都会呈现一定的滞后性。它以滞后性的代价换来了平滑性,移动平均必须在平滑性和滞后性之间取舍。
- 指数平滑法:实际上是一种特殊的加权移动平均法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。 也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。
- 一次指数平滑预测: 当时间数列无明显的趋势变化,可用一次指数平滑预测。
- 二次指数平滑预测: 二次指数平滑是对一次指数平滑的再平滑。它适用于具线性趋势的时间数列 初始值的确定,即第一期的预测值。一般原数列的项数较多时(大于15项),可以选用第一期的观察值或选用比第一期前一期的观察值作为初始值。如果原数列的项数较少时(小于15项),可以选取最初几期(一般为前三期)的平均数作为初始值。指数平滑方法的选用,一般可根据原数列散点图呈现的趋势来确定。如呈现直线趋势,选用二次指数平滑法;如呈现抛物线趋势,选用三次指数平滑法。或者,当时间序列的数据经二次指数平滑处理后,仍有曲率时,应用三次指数平滑法。
1. 指数平滑法进一步加强了观察期近期观察值对预测值的作用,对不同时间的观察值所赋予的权数不等,从而加大了近期观察值的权数,使预测值能够迅速反映市场实际的变化。权数之间按等比级数减少,此级数之首项为平滑常数 ,公比为 \((1- a)\)。
2. 指数平滑法对于观察值所赋予的权数有伸缩性,可以取不同的 值以改变权数的变化速率。如 取小值,则权数变化较迅速,观察值的新近变化趋势较能迅速反映于指数移动平均值中。因此,运用指数平滑法,可以选择不同的 值来调节时间序列观察值的均匀程度(即趋势变化的平稳程度)。
3. 指数平滑法对实际序列具有平滑作用,权系数(平滑系数)a 越小,平滑作用越强,但对实际数据的变动反应较迟缓。
4. 在实际序列的线性变动部分,指数平滑值序列出现一定的滞后偏差的程度随着权系数(平滑系数)a 的增大而减少,但当时间序列的变动出现直线趋势时,用一次指数平滑法来进行预测仍将存在着明显的滞后偏差。因此,也需要进行修正。修正的方法也是在一次指数平滑的基础上再进行二次指数平滑,利用滞后偏差的规律找出曲线的发展方向和发展趋势,然后建立直线趋势预测模型,故称为二次指数平滑法。
————————@version 2019-6-20 22:30:36 ————————
它的原理是拿当下的时间序列和lag N的序列做比较(注:滞后阶数(Lag) 时序的滞后阶数即我们向后追溯的观测值的数量,0阶滞后项代表没有位移的原始时序,一阶滞后项代表时序数据向左移动一位,多阶滞后项以此类推。),看相关系数为多少,\(N = 1\) 的时候就是和往前移一个时位形成的序列比,\(N = 2\) 和往前移两位比,如此递推。大于0.5就是比较强的correlation了,算比较显著的周期性。注意不要和Acf函数混淆,Acf是从lag=0开始的,也就是自己和自己比,那correlation当然是1了,会导致整个图的scale变得头重脚轻。
二、代码
library(ggplot2)
library(forecast)
set.seed(634090)
ma_ts3 <- arima.sim(model = list(ar = c(0.74), sd = 1.2), n = 1000)
ma_ts3 # 打印数据
autoplot(ma_ts3) # 绘制图
tsdisplay(ma_ts3) # 绘制3个图,包括acf 和 pacf
还有值得一提的 偏自相关函数,也就是partial auto correlation function,这个函数考虑到了不同的lag值可能被共同的变量影响了。比如4周的周期必然导致8周、12周也都显著。排除掉这个因素,绘制pacf会得到如下结果
其实forecast包里自带了绘制acf、Pacf图的函数 tsdisplay():
library(ggplot2)
library(forecast)
set.seed(634090)
ggPacf(ma_ts3)
tsdisplay(ma_ts3)
参考资料:
- 王天保, 张玉军, 武传胜,等. 移动平均法在快递预测上的研究[J]. 东方教育, 2014.
- https://zhuanlan.zhihu.com/p/38276041