时间序列预测技术介绍

数据科学领域,预测未来数据点的值是一项常见任务,这通常通过时间序列建模来实现。时间序列预测技术通过分析历史数据和可能影响这些数据点的其他特征来预测变量的未来值。这些算法设计得能够识别过去的趋势,并据此预测未来的值。

存在多种算法可以进行时间序列预测,包括基础的如自回归、移动平均、ARMA、ARIMA、简单指数平滑、Holt-Winters方法、线性回归,以及更高级的如多元线性回归、LSTM(长短期记忆)、人工神经网络等。根据数据集和辅助特征,可以做出明智的决策并确定最终模型。

接下来,让深入了解ARIMA模型。自回归积分滑动平均(ARIMA)是一种广泛使用的时间序列预测技术。在开始使用ARIMA进行预测之前,需要理解平稳性的概念。只有当数据集是平稳的,才能进行时间序列预测。如果数据集的均值和方差随时间保持不变,则称其为平稳的。平稳的数据集没有趋势或季节性。

在进行时间序列模型预测时,假设每个数据点是相互独立的,如果序列是平稳的,这一点可以得到确认。要检查时间序列是否平稳,可以绘制观察值与时间的对比图,并实施Dickey-Fuller测试进行检查。可以使用差分技术使时间序列平稳,即从下一个观察值中减去前一个观察值,这是一阶差分。如果序列仍然不平稳,可以再次进行差分,直到序列变得平稳。通常,1或2阶差分就足以使序列平稳。

既然知道序列是平稳的,让详细了解ARIMA模型。ARIMA算法由以下组成部分构成:

AR 代表 自回归,用 P 表示,P 的值决定了数据如何回归到其过去的值。 I 代表 积分,或差分部分,用 d 表示,d 的值决定了使序列平稳所使用的差分程度。 MA 代表 移动平均,用 q 表示,q 的值决定了模型的输出如何线性依赖于过去的观察值,预测误差也是如此。

现在已经了解了ARIMA模型,让尝试使用2020年4月的口罩销售数据集来实现它,并预测接下来几天的销售情况。

import pandas as pd import matplotlib.pyplot as plt from statsmodels.tsa.arima.model import ARIMA from sklearn.metrics import mean_squared_error from math import sqrt mask_sale = pd.read_excel('Book1.xlsx', header=0, parse_dates=[0], index_col=0, squeeze=True) print(mask_sale.head()) mask_sale.plot() plt.show() # 将数据分为训练集和测试集,以便在70%的数据观察上训练模型,并在剩余的30%数据上测试它。 X = mask_sale.values size = int(len(X) * 0.7) train, test = X[0:size], X[size:len(X)] history = [x for x in train] predictions = list() # 向前验证 for t in range(len(test)): model = ARIMA(history, order=(5,1,0)) model_fit = model.fit() output = model_fit.forecast() yhat = output[0] predictions.append(yhat) obs = test[t] history.append(obs) print('predicted=%f, expected=%f' % (yhat, obs)) # 评估预测 rmse = sqrt(mean_squared_error(test, predictions)) print('Test RMSE: %.3f' % rmse) # 绘制预测与实际结果的对比图 plt.plot(test) plt.plot(predictions, color='red') plt.show()

还有其他时间序列模型……

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485