指数平滑:入门指南

导航至

指数平滑是一种时间序列预测方法,它使用过去观察值的指数加权平均来预测未来值。

这种方法赋予最近观察值更多的权重,而赋予较老观察值较少的权重,从而使预测能够适应数据中的变化趋势。

得到的预测是原始时间序列的平滑版本,受数据中的随机波动或噪声影响较小。

在这篇文章中,我们将探讨指数平滑的基本原理,包括它是如何工作的、指数平滑的类型以及如何在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. 沃尔特-温特斯指数平滑

沃尔特-温特斯指数平滑,也称为三指数平滑,用于预测具有趋势和季节成分的时间序列数据。它使用三个平滑参数:α用于水平(截距),β用于趋势,γ用于季节成分。

三指数平滑的公式如下

image4

其中

  • st = 平滑统计量;它是当前观测值Yt的简单加权平均值
  • st-1 = 前一平滑统计量
  • α = 数据平滑因子(0 < α < 1)
  • t = 时间周期
  • bt = 时间t的趋势最佳估计值
  • β = 趋势平滑因子(0 < β <1)
  • ct = 时间t的季节成分
  • γ = 季节平滑参数(0 < γ < 1)

沃尔特-温特斯方法在这三种方法中是最准确的,但它也是最复杂的。它需要比其他方法更多的数据和计算。

何时使用指数平滑

指数平滑对于具有一致趋势、季节性和随机波动的时间序列数据非常有用。

它特别适用于销售、收入和客户流量等业务指标的短期到中期预测。它也适用于监测和预测旅游业、农业和能源等行业中的季节性变化。

以下是指数平滑可能有用的一些其他常见情况

  • 时间序列预测 —— 指数平滑法最常见应用之一就是时间序列预测。如果您有某个变量随时间推移的历史数据,如销售额或网站流量,您可以使用指数平滑法来预测该变量的未来值。
  • 库存管理 —— 指数平滑法可以用来预测产品或服务的需求,这在库存管理中非常有用。通过预测需求,企业可以确保有足够的库存来满足客户需求,同时又不会过度库存,避免高昂的成本。

  • 金融 —— 它可以用于金融领域,预测股价、利率和其他金融变量。这对于试图做出明智投资决策的投资者来说非常有帮助。

  • 营销 —— 它也用于预测营销活动的有效性。通过跟踪过往营销活动的结果,并使用指数平滑法预测未来的表现,营销人员可以优化他们的营销活动,以实现最佳效果。

由于简单有效,指数平滑法被认为是应用最广泛的时间序列预测方法之一。

与其他方法不同,指数平滑法可以适应数据趋势的变化。它还通过根据不同时间段的相对重要性分配不同的权重,提供准确的预测。

指数平滑法计算效率高,非常适合处理大数据集。

此外,它广泛应用于商业预测,因为它为各种应用提供了准确可靠的预测,包括需求预测、销售预测和财务预测。

Python中的指数平滑法

Python有多个库可以用于指数平滑,包括PandasStatsmodelsProphet。这些库提供了各种函数和方法,用于实现不同类型的指数平滑方法。

数据集

在这个例子中,我们将使用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())

这将输出

output

可视化数据

在应用简单的指数平滑法之前,让我们先可视化数据,以便更好地理解其特性。我们可以使用pandas的plot函数创建数据的线形图

plt.plot(data)
plt.xlabel('Year')
plt.ylabel('Number of Passengers')
plt.show()

这将生成一个随时间变化的乘客数量的图形

plot of the number of passengers over time

我们可以看到乘客数量似乎随着时间的推移而增加,同时也存在一些季节性变化。

执行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)

这将预测下六个月的数据

forecast for the next six months

根据预测结果,我们可以假设在接下来的六个月内,大约将有432名航空公司乘客。

总结

指数平滑是一种强大的时间序列预测方法,可以根据过去的观察准确预测未来的值。

它是一种简单而高效的方法,可用于广泛的时序数据。

在本篇文章中,我们提供了指数平滑的入门指南,解释了方法的基本原理、类型以及如何用于预测。

然而,本文范围之外还有更多高级技术和方法可以探索。

如果您想了解更多,请务必查看这篇Python时间序列预测教程。这是一份优秀的资源,可以帮助您深入了解这个主题,并通过InfluxDB将您的预测技能提升到下一个层次。

关于作者

本文由Israel Oyetunji撰写。Israel是一位前端开发者,擅长创建引人入胜的UI和交互式体验。他拥有使用HTML、CSS、JavaScript、React JS、SASS和相关技术开发面向消费者网站的经验。他喜欢撰写关于科技的文章,并为开发者创建如何操作的教程。