指数平滑:入门指南
作者:社区 / 开发者
2023年5月24日
导航至
指数平滑是一种时间序列预测方法,它使用过去观察值的指数加权平均来预测未来值。
这种方法赋予最近观察值更多的权重,而赋予较老观察值较少的权重,从而使预测能够适应数据中的变化趋势。
得到的预测是原始时间序列的平滑版本,受数据中的随机波动或噪声影响较小。
在这篇文章中,我们将探讨指数平滑的基本原理,包括它是如何工作的、指数平滑的类型以及如何在Python中实现指数平滑。
什么是指数平滑?
指数平滑是一种技术,通过平滑数据中的波动来预测时间序列数据。该技术最早由Robert Goodell Brown于1956年提出,后来由Charles Holt于1957年进一步发展。它已成为最广泛使用的预测方法之一。
指数平滑的基本思想是给予最近观察值比较老观察值更多的权重。这是通过给每个观察值分配权重来实现的,随着观察值的变老,权重呈指数递减。然后使用这些权重来计算数据的加权移动平均,该平均被用作下一期的预测。
指数平滑基于这样的假设:时间序列的未来值是其过去值的一个函数。当时间序列具有趋势和/或季节性成分时,该方法效果良好,但它也可以用于平稳(即没有趋势或季节性)的数据。
指数平滑预测
指数平滑是一种预测方法,它使用过去观察值的加权平均来预测未来值。分配给过去观察值的权重是指数的,较近的观察值比较老的观察值有更高的权重。
指数平滑的类型
有几种指数平滑方法,每种方法都有自己的公式和假设。最常用的方法包括
1. 简单指数平滑
简单指数平滑(SES),也称为单一指数平滑,是指数平滑最简单的一种形式。它假设时间序列没有趋势或季节性。
下一期的预测基于前一观察值和当前期预测值的加权平均值。
简单指数平滑的公式是
s(t) = αx(t) + (1-α)st-1
其中
- s(t) 是时间t处的平滑值,
- x(t) 是时间t处的观测值,
- st-1 是前一平滑统计量,并且
- α 是介于0和1之间的平滑参数。
平滑参数α控制了对当前观察值和前一预测值的权重。
α值高时,对当前观察值的权重更大;α值低时,对前一预测值的权重更大。
2. 沃尔特的线性指数平滑
沃尔特的线性指数平滑,也称为双指数平滑,用于预测具有线性趋势但没有季节模式的时间序列数据。此方法使用两个平滑参数:α用于水平(截距)和β用于趋势。
双指数平滑的公式是
st = αxt + (1 – α)(st-1 + bt-1)
βt = β(st – st-1) + (1 – β)bt-1
其中
- bt 是时间t的趋势斜率和最佳估计值,
- α 是数据平滑参数(0 < α < 1),并且
- β 是趋势平滑参数(0 < β < 1)。
沃尔特的方法比简单指数平滑对具有趋势的时间序列数据更准确,但它不适合具有季节成分的时间序列数据。
3. 沃尔特-温特斯指数平滑
沃尔特-温特斯指数平滑,也称为三指数平滑,用于预测具有趋势和季节成分的时间序列数据。它使用三个平滑参数:α用于水平(截距),β用于趋势,γ用于季节成分。
三指数平滑的公式如下
其中
- st = 平滑统计量;它是当前观测值Yt的简单加权平均值
- st-1 = 前一平滑统计量
- α = 数据平滑因子(0 < α < 1)
- t = 时间周期
- bt = 时间t的趋势最佳估计值
- β = 趋势平滑因子(0 < β <1)
- ct = 时间t的季节成分
- γ = 季节平滑参数(0 < γ < 1)
沃尔特-温特斯方法在这三种方法中是最准确的,但它也是最复杂的。它需要比其他方法更多的数据和计算。
何时使用指数平滑
指数平滑对于具有一致趋势、季节性和随机波动的时间序列数据非常有用。
它特别适用于销售、收入和客户流量等业务指标的短期到中期预测。它也适用于监测和预测旅游业、农业和能源等行业中的季节性变化。
以下是指数平滑可能有用的一些其他常见情况
- 时间序列预测 —— 指数平滑法最常见应用之一就是时间序列预测。如果您有某个变量随时间推移的历史数据,如销售额或网站流量,您可以使用指数平滑法来预测该变量的未来值。
-
库存管理 —— 指数平滑法可以用来预测产品或服务的需求,这在库存管理中非常有用。通过预测需求,企业可以确保有足够的库存来满足客户需求,同时又不会过度库存,避免高昂的成本。
-
金融 —— 它可以用于金融领域,预测股价、利率和其他金融变量。这对于试图做出明智投资决策的投资者来说非常有帮助。
- 营销 —— 它也用于预测营销活动的有效性。通过跟踪过往营销活动的结果,并使用指数平滑法预测未来的表现,营销人员可以优化他们的营销活动,以实现最佳效果。
为什么指数平滑法如此受欢迎
由于简单有效,指数平滑法被认为是应用最广泛的时间序列预测方法之一。
与其他方法不同,指数平滑法可以适应数据趋势的变化。它还通过根据不同时间段的相对重要性分配不同的权重,提供准确的预测。
指数平滑法计算效率高,非常适合处理大数据集。
此外,它广泛应用于商业预测,因为它为各种应用提供了准确可靠的预测,包括需求预测、销售预测和财务预测。
Python中的指数平滑法
Python有多个库可以用于指数平滑,包括Pandas、Statsmodels和Prophet。这些库提供了各种函数和方法,用于实现不同类型的指数平滑方法。
数据集
在这个例子中,我们将使用AirPassengers数据集,这是一个时间序列数据集,包含1949年到1960年每月的航空乘客数量。您可以从这里下载该数据集。
设置环境
为了开始,我们需要设置我们的环境。我们将使用Python 3,所以请确保您已安装。您还可以使用Google Colab并直接导入库。
接下来,使用pip安装以下库
pip install pandas matplotlib
安装必要的库后,您可以将它们导入到Python脚本中
import pandas as pd
import matplotlib.pyplot as plt
加载数据
设置好环境后,我们可以使用read_csv函数将AirPassengers数据集加载到pandas DataFrame中
data = pd.read_csv('airline-passengers.csv', parse_dates=['Month'], index_col='Month')
然后我们可以使用head函数检查DataFrame的前几行
print(data.head())
这将输出
可视化数据
在应用简单的指数平滑法之前,让我们先可视化数据,以便更好地理解其特性。我们可以使用pandas的plot函数创建数据的线形图
plt.plot(data)
plt.xlabel('Year')
plt.ylabel('Number of Passengers')
plt.show()
这将生成一个随时间变化的乘客数量的图形
我们可以看到乘客数量似乎随着时间的推移而增加,同时也存在一些季节性变化。
执行SES
现在我们已经加载并可视化了数据,我们可以使用statsmodels库中的SimpleExpSmoothing函数进行简单的指数平滑。然后,我们将创建一个SimpleExpSmoothing类的实例,传入数据作为参数,然后使用fit方法将模型拟合到数据上。
from statsmodels.tsa.api import SimpleExpSmoothing
model = SimpleExpSmoothing(data)
model_fit = model.fit()
这将计算平滑参数并将模型拟合到数据。
进行预测
最后,我们可以使用模型的forecast方法对时间序列的未来值进行预测,其中参数表示要预测的周期数。
forecast = model_fit.forecast(6)
print(forecast)
这将预测下六个月的数据
根据预测结果,我们可以假设在接下来的六个月内,大约将有432名航空公司乘客。
总结
指数平滑是一种强大的时间序列预测方法,可以根据过去的观察准确预测未来的值。
它是一种简单而高效的方法,可用于广泛的时序数据。
在本篇文章中,我们提供了指数平滑的入门指南,解释了方法的基本原理、类型以及如何用于预测。
然而,本文范围之外还有更多高级技术和方法可以探索。
如果您想了解更多,请务必查看这篇Python时间序列预测教程。这是一份优秀的资源,可以帮助您深入了解这个主题,并通过InfluxDB将您的预测技能提升到下一个层次。
关于作者
本文由Israel Oyetunji撰写。Israel是一位前端开发者,擅长创建引人入胜的UI和交互式体验。他拥有使用HTML、CSS、JavaScript、React JS、SASS和相关技术开发面向消费者网站的经验。他喜欢撰写关于科技的文章,并为开发者创建如何操作的教程。