时间序列预测是将过去一段时间的数据和趋势作为基础,去预估未来一段时间内的数据值。应用场景比较多,例如商场根据过去的销量数据对未来的销量进行预测,以便备货;股民根据过去的股票走势来预测未来股票的涨跌情况,以便做出有利的决策。
对时间序列的预测主要有两种方法:长短记忆LSTM和指数平滑法。长短记忆LSTM非常适合处理时间间隔比较长的任务,不过它适用于数据量比较大的场景。而本文介绍的指数平滑法在较小的数据场景也能预测比较准确,它是通过对整个时间序列分别给予不同的权重进行加权平均的一种方法。
一次指数平滑法
对于一组时间序列x1,x2,...,xi来说,可以将连续的n个时期的观测值的平均值作为下一时期的预测值,公式如下
这种方法叫做移动平均法,但这个方法缺点也明显,所有观测值的权重都一样。一次指数平滑法可以看成是由移动平均法演变而来的,根据上述公式,有
从近似意义角度来说,序列中的任何一个数都可以用平均数来表示,若将x_{i-n}替换为s_{i-1},并设α=1/n,那么得到
这就是一次指数平滑法,那么为什么叫指数平滑呢? 先看如下推导
可以看出x_i的系数都是指数形式的,并且所有权值之和为1。
很遗憾,一次指数平滑法只适用于水平型历史数据预测,而不适用于斜坡型线性历史数据预测的任务。因为对于斜坡型历史数据,即使α再大,也仍然会产生较大的系统误差。
二次指数平滑法
二次指数平滑法可以预测斜坡型数据,通过添加一个新的变量t来表示平滑后的趋势,递推公式如下
其最终预测值表示如下
一般初始化条件为
二次指数平滑法相对一次指数平滑法解决了两个重要的问题
- 解决了不能用于有明显趋势的时间序列
- 解决了只能向未来预测一期的不足问题
三次指数平滑法
三次指数平滑在二次指数平滑的基础上增加了周期性信息,使其可以预测带有周期性的时间序列。三次指数平滑新增了新的参数p来表示平滑后的趋势,有累加和累乘两种方法,公式如下
1.累加
2.累乘
上述变量中,s_i,t_i,p_i分别表示水平趋势,斜率趋势和周期信息。
R语言实战
在R语言中HoltWinters()函数就是用来做时间序列预测的,句法如下
HoltWinters(x, alpha = NULL, beta = NULL, gamma = NULL, seasonal = c("additive", "multiplicative"), start.periods = 3, l.start = NULL, b.start = NULL, s.start = NULL, optim.start = c(alpha = 0.3, beta = 0.1, gamma = 0.1), optim.control = list())
参数详细说明如下
- x代表要处理的时间序列。
- alpha为水平趋势平滑参数。
- beta为斜率趋势平滑参数,如果做简单的指数平滑,那么beta 和gamma 的取值都为FALSE。
- gamma为周期性平滑参数,如果数据中没有周期性,需设置gamma=FALSE。
- seasonal 选择加法模型还是乘法模型,默认是加法模型,当gamma=TRUE才是有效的。
- start.periods 开始自动预测的位置,至少为3。
- l.start level的初始值,即s_0。
- b.start trend的初始值,即t_0。
- s.start season的初始向量,即p_{10},p_{20},...,p_{k0}。
- optim.start 指定三个参数的初始值。
- optim.control 其它可控参数列表。
假设数据源为
monthly-milk-production-pounds-p,代码如下
最终运行结果如下图
看起来预测结果还是很靠谱的。以上就是用指数平滑法解决时间序列预测的所有内容。
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。