时间序列预测:Holt-Winters方法详解

数据科学领域,预测未来趋势是一项重要任务。时间序列预测算法从简单的移动平均和指数平滑到深度学习方法如循环神经网络和XGBoost不等。混合预测技术结合多种方法也是常用的,以提高准确性。独立变量,如折扣百分比或温度,可以影响预测。算法的选择取决于数据集和手头的业务问题。时间序列分析对于基于历史数据做出明智的决策至关重要。

目录

  • 什么是Holt-Winters方法?
  • 代码示例
  • 缺失值处理
  • 异常值检测与处理
  • Holt-Winters技术的局限性
  • 最终思考
  • 常见问题解答

什么是Holt-Winters方法?

Holt-Winters是一种时间序列行为模型。预测总是需要一个模型,Holt-Winters是模拟时间序列的三个方面的一种方式:典型值(平均值)、随时间变化的斜率(趋势)和周期性重复模式(季节性)。实际数据,如任何行业的需求数据,通常具有很多季节性和趋势。在这种情况下,预测需求需要模型,这些模型将考虑数据中的趋势和季节性,因为业务决策将基于这个模型的结果。对于这些情况,Holt-Winters方法是众多时间序列预测方法中的一种,可以用于预测。

Holt-Winters三指数平滑公式解释

Holt-Winters指数平滑以其两位贡献者Charles Holt和Peter Winters的名字命名,是最早的时间序列分析技术之一,它在进行预测时考虑了趋势和季节性。这种方法有三个主要方面来进行预测。它有一个平均值,趋势和季节性。这三个方面是三种类型的指数平滑,因此Holt-Winters方法也被称为三重指数平滑。

让详细看看每个方面。

  • 简单指数平滑:顾名思义,当数据集没有趋势或季节性时,用于预测。
  • Holt平滑方法:Holt的平滑技术,也称为线性指数平滑,是一个广为人知的平滑模型,用于预测具有趋势的数据。
  • Winter平滑方法:Winter的平滑技术允许在进行预测时同时考虑季节性和趋势。

因此,Holt-Winters方法在进行时间序列预测时考虑了平均值、趋势和季节性。

代码示例

让通过一个例子来看Holt-Winters时间序列分析。有某个网站几天的访客数量,让尝试使用Holt-Winters方法预测接下来3天的访客数量。以下是Python代码。

# 导入所需的库 import pandas as pd from matplotlib import pyplot as plt from statsmodels.tsa.seasonal import seasonal_decompose from statsmodels.tsa.holtwinters import ExponentialSmoothing # 使用pandas输入访客数据 visitors = pd.read_excel('website_visitors.xlsx', index_col='month', parse_dates=True) print(visitors.shape) print(visitors.head()) # 打印数据框 visitors[['no_of_visits']].plot(title='访客数据') visitors.sort_index(inplace=True) # 根据索引排序数据 # 分解数据框以获得趋势、季节性和噪声 decompose_result = seasonal_decompose(visitors['no_of_visits'], model='multiplicative', period=12) decompose_result.plot() plt.show() # 设置Alpha值,并定义x为时间段 x = 12 alpha = 1 / (2 * x) # 访客数据集的单指数平滑 visitors['HWES1'] = SimpleExpSmoothing(visitors['no_of_visits']).fit(smoothing_level=alpha, optimized=False, use_brute=True).fittedvalues visitors[['no_of_visits', 'HWES1']].plot(title='Holt Winters单指数平滑图') # 访客数据集的双指数平滑(加法和乘法) visitors['HWES2_ADD'] = ExponentialSmoothing(visitors['no_of_visits'], trend='add').fit().fittedvalues visitors['HWES2_MUL'] = ExponentialSmoothing(visitors['no_of_visits'], trend='mul').fit().fittedvalues visitors[['no_of_visits', 'HWES2_ADD', 'HWES2_MUL']].plot(title='Holt Winters图:加法趋势和乘法趋势') # 分割为训练集和测试集 train_visitors = visitors[:9] test_visitors = visitors[9:] # 拟合模型 fitted_model = ExponentialSmoothing(train_visitors['no_of_visits'], trend='mul', seasonal='mul', seasonal_periods=12).fit() test_predictions = fitted_model.forecast(5) # 绘制训练、测试和预测数据点 train_visitors['no_of_visits'].plot(legend=True, label='TRAIN') test_visitors['no_of_visits'].plot(legend=True, label='TEST', figsize=(6, 4)) test_predictions.plot(legend=True, label='PREDICTION') plt.title('使用Holt Winters指数平滑的训练、测试和预测数据点')

缺失值处理

异常值检测与处理

Holt-Winters技术的局限性

Q1. 什么是Holt-Winters算法?
A. Holt-Winters算法是一种时间序列预测方法,它使用指数平滑根据过去的观察结果进行预测。该方法考虑时间序列的三个组成部分:水平、趋势和季节性,并使用它们来预测未来时期的值。
Q2. 为什么要使用Holt-Winters方法?
A. Holt-Winters方法用于时间序列预测,因为它可以捕捉数据中的趋势和季节性,使其特别适合预测表现出这些模式的时间序列的未来值。该方法也相对简单,可以产生准确的预测。
Q3. Holt-Winters的三个参数是什么?
A. Holt-Winters方法的三个参数是alpha、beta和gamma。Alpha代表水平平滑因子,beta代表趋势平滑因子,gamma代表季节性平滑因子。这些参数在预测未来时期时给予过去的观察结果。
Q4. 什么是Holt-Winters过滤?
A. Holt-Winters过滤是一种使用Holt-Winters算法平滑时间序列的方法。该方法涉及对过去的观察结果进行加权平均,以产生时间序列中每个时期的平滑值。Alpha、beta和gamma平滑因子决定了分配给每个观察结果的权重。这种平滑过程可以去除噪声,并突出显示数据中的趋势和季节性,使预测和识别时间序列中的模式变得更加容易。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485