指数平滑法:入门指南
作者:社区 / 开发者
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. Holt 线性指数平滑法
Holt 线性指数平滑法,也称为双指数平滑法,用于预测具有线性趋势但没有季节性模式的时间序列数据。此方法使用两个平滑参数:α 用于水平(截距),β 用于趋势。
双指数平滑法的公式为
st = αxt + (1 – α)(st-1 + bt-1)
βt = β(st – st-1) + (1 – β)bt-1
其中
- bt 是斜率,是时间 t 的趋势的最佳估计,
- α 是数据的平滑参数(0 < α < 1),以及
- β 是趋势的平滑参数(0 < β < 1)。
对于具有趋势的时间序列数据,Holt 方法比 SES 更准确,但对于具有季节性成分的时间序列数据,它效果不佳。
3. Holt-Winters 指数平滑法
Holt-Winters 指数平滑法,也称为三指数平滑法,用于预测具有趋势和季节性成分的时间序列数据。它使用三个平滑参数:α 用于水平(截距),β 用于趋势,γ 用于季节性成分。
三指数平滑法的公式由下式给出
其中
- st = 平滑统计量;它是当前观测值 Yt 的简单加权平均值
- st-1 = 先前的平滑统计量
- α = 数据的平滑因子(0 < α < 1)
- t = 时间段
- bt = 时间 t 的趋势的最佳估计
- β = 趋势平滑因子(0 < β < 1)
- ct = 时间 t 的季节性成分
- γ = 季节性平滑参数(0 < γ < 1)
Holt-Winters 方法是三种方法中最准确的,但它也是最复杂的。与其他方法相比,它需要更多的数据和更多的计算。
何时使用指数平滑法
指数平滑法最适用于具有一致趋势、季节性和随机波动的时间序列数据。
它特别适用于对销售额、收入和客户流量等业务指标进行中短期预测。它也适用于监控和预测旅游业、农业和能源等行业的季节性变化。
以下是一些其他常见情况,指数平滑法可能很有用
- 时间序列预测 — 指数平滑法最常见的应用之一是在时间序列预测中。如果您有特定变量随时间的历史数据,例如销售额或网站流量,则可以使用指数平滑法来预测该变量的未来值。
-
库存管理 — 指数平滑法可用于预测产品或服务的需求,这在库存管理中可能很有用。通过预测需求,企业可以确保他们有足够的库存来满足客户需求,而不会库存过多,这可能会很昂贵。
-
金融 — 它可以用于金融领域,以预测股票价格、利率和其他金融变量。这对于试图就买卖股票或其他金融工具做出明智决定的投资者可能很有帮助。
- 营销 — 它也用于预测营销活动的有效性。通过跟踪过去活动的结果并使用指数平滑法预测未来绩效,营销人员可以优化其活动以实现最佳结果。
为什么指数平滑法如此受欢迎
指数平滑法被认为是最广泛使用的时间序列预测方法之一,因为它简单而有效。
与其他方法不同,指数平滑法可以适应数据趋势的变化。它还可以通过根据不同时间段的重要性为其分配不同的权重来提供准确的预测。
指数平滑法在计算上是高效的,使其成为大型数据集的理想选择。
此外,它广泛用于商业预测,因为它为各种应用(包括需求预测、销售预测和财务预测)提供准确可靠的预测。
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 和相关技术开发以消费者为中心的网站的经验。他喜欢撰写有关技术的文章并为开发人员创建操作指南教程。