指数平滑方法简介

Python0298

指数平滑方法简介,第1张

指数平滑(Exponential smoothing)是除了 ARIMA 之外的另一种被广泛使用的时间序列预测方法(关于 ARIMA,请参考 时间序列模型简介 )。 指数平滑即指数移动平均(exponential moving average),是以指数式递减加权的移动平均。各数值的权重随时间指数式递减,越近期的数据权重越高。常用的指数平滑方法有一次指数平滑、二次指数平滑和三次指数平滑。

一次指数平滑又叫简单指数平滑(simple exponential smoothing, SES),适合用来预测没有明显趋势和季节性的时间序列。其预测结果是一条水平的直线。模型形如:

其中是真实值, 为预测值, 为平滑值, 。

定义残差 ,其中 ,则可以通过优化方法得到和 。

使用 python 的 statsmodels 可以方便地应用该模型:

效果如图:

Holt 扩展了简单指数平滑,使其可以用来预测带有趋势的时间序列。直观地看,就是对平滑值的一阶差分(可以理解为斜率)也作一次平滑。模型的预测结果是一条斜率不为0的直线。模型形如:

其中 , 。

效果如图:

Holt's linear trend method 得到的预测结果是一条直线,即认为未来的趋势是固定的。对于短期有趋势、长期趋于稳定的序列,可以引入一个阻尼系数 ,将模型改写为

为了描述时间序列的季节性,Holt 和 Winters 进一步扩展了 Holt's linear trend method,得到了三次指数平滑模型,也就是通常说的 Holt-Winters’ 模型。我们用表示“季节”的周期。根据季节部分和非季节部分的组合方式不同,Holt-Winters’ 又可以分为加法模型和乘法模型。

加法模型形如:

其中 , , 。 是的整数部分。

效果如图:

乘法模型形如:

效果如图:

Holt-Winters’ 模型的趋势部分同样可以引入阻尼系数 ,这里不再赘述。

参数优化的方法是最小化误差平方和或最大化似然函数。模型选择可以根据信息量准则,常用的有 AIC 和 BIC等。

AIC 即 Akaike information criterion, 定义为

其中是似然函数,是参数数量。用 AIC 选择模型时要求似然函数大,同时对参数数量作了惩罚,在似然函数相近的情况下选择复杂度低的模型。

BIC 即 Bayesian information criterion,定义为

其中是样本数量。当时, ,因此当样本量较大时 BIC 对模型复杂度的惩罚比 AIC 更严厉。

线性的指数平滑方法可以看作是 ARIMA 的特例。例如简单指数平滑等价于 ARIMA(0, 1, 1),Holt's linear trend method 等价于 ARIMA(0, 2, 2),而 Damped trend methods 等价于 ARIMA(1, 1, 2) 等。

我们不妨来验证一下。

可以改写为

亦即

两边同时加上 ,得

而 ARIMA(p, d, q) 可以表示为

其中是滞后算子(Lag operator), 。

考虑 ARIMA(0, 1, 1)

亦即

令 ,则两者等价。

非线性的指数平滑方法则没有对应的 ARIMA 表示。

[1] Hyndman, Rob J., and George Athanasopoulos. Forecasting: principles and practice. OTexts, 2014.

[2] Exponential smoothing - Wikipedia https://en.wikipedia.org/wiki/Exponential_smoothing

[3] Introduction to ARIMA models - Duke https://people.duke.edu/~rnau/411arim.htm

python时间序列模型预测时一条直线是因为是线性模型的原因。线性模型也称作趋势模型,它表示一个时间序列可以用一条直线来表示。它的基本等式:以一个公司的销售总额为例,一开始的初始是5000,每隔一个时间步长增加2500。指数平滑法是时间序列分析方法中的一种。它是一种用于预测未来发展趋势的建模算法。它有三种不同形式:一次指数平滑法、二次指数平滑法、及三次指数平滑法。三种指数平滑法都要更新上一时间步长的计算结果,并使用当前时间步长的数据中包含的新信息。通过混合新信息和旧信息来实现。