lstm多变量输入回归预测模型_干货 | 时间序列预测类问题下的建模方案探索实践...

本文对比了时间序列预测的三种模型:统计学的ARMA,机器学习的XGBoost和深度学习的LSTM。在疫情背景下,以北京重点区域人群密度预测为例,探讨了模型的构建流程、复杂度、运行效率和预测准确度。ARMA需要平稳性检验,适合小规模数据;XGBoost快速且准确,但依赖特征工程;LSTM自动化程度高,适用于大数据预测,但训练时间长。
摘要由CSDN通过智能技术生成
b1ca51ce259f20f5124f774b1d87f77a.gif e1084975de3c9825aab812231e4b915c.png

作者 | 陆春晖

责编 | Carol

出品 | AI科技大本营(ID:rgznai100)

530df7b016976ef8d8111cdaa4d95295.png

背景

时间序列类问题是数据分析领域中一类常见的问题,人们有时需要通过观察某种现象一段时间的状态,来判断其未来一段时间的状态。而时间序列就是该种现象某一个统计指标在不同时间上的数值,按时间先后顺序排列而形成的序列。

时间序列分析主要针对时间序列类问题的两个领域,一个是对历史区间数据的分析,通过对过往数据特征的提炼总结来进行异常检测和分类;另一类就是对未来数据的分析,根据过去时间点的数据对未来一个时间点或者几个时间点的状态或实际值进行预测。

时间序列预测类问题在金融领域比较常见,例如股票价格的预测,网点现金流量的预测等等,在气象、人口密度预测等领域也有很广泛的应用。传统的时间序列预测模型通常是统计学模型,比如经典的ARMA系列,它们建立在统计学基础上,需要满足一些基本假设(例如平稳性假设等),因此适用场景比较少,在现实中比较容易受限。随着机器学习和深度学习的兴起,时间序列预测类问题越来越多的被抽象为回归问题,从而可以使用机器学习和深度学习的相关模型,不需要受到基本假设的限制,适用范围更广,更受到人们青睐。

本文以疫情期间北京重点区域人群密度情况的预测为例,使用统计学模型ARMA,机器学习模型Xgboost和深度学习模型LSTM分别进行建模,并对这三种建模方案在实际操作时的复杂度、运行效率和预测准确度进行对比分析,从而直观感受每种建模方案的优缺点,为真实场景中建模方案的选择提供帮助和参考。

2db7cf85fc743cebb74c4d806abefbd3.png

数据准备

为方便进行模型间的比对,本文使用的数据集只包括北京997个重点区域在2020/01/17至2020/02/15这30天内每个小时的人群密度数据,总共717840条记录。数据包含三个维度,分别是区域ID、时间戳和人群密度指数,数据格式如图1所示。

6872c3aaacac81e2a2ef30bcbd65e227.png

图1 训练样本示例

训练数据和测试数据都以小时为最小时间步,其中部分区域30天内的人群密度指数趋势如图2所示:

819eb8f2ec6496bebc25190eca96010d.png

图2部分重点区域30天内人群密度指数趋势

在进行时间序列预测建模之前,首先要进行时间序列的自相关性分析,确定训练数据是符合时间序列要求的。时间序列的自相关性可以理解为时间序列自己与自己(不同滞后项)之间的相关性,本文使用时滞图来观察时间序列的自相关性,时滞图是把时间序列的值及相同序列在时间轴上后延的值放在一起展示,如图3所示。

LSTM(长短期记忆)是一种递归神经网络(RNN),可以用于处理序列数据,例如时间序列预测。在Keras中,可以使用LSTM层来构建多变量时间序列预测模型。 首先,需要将多个变量转换为单个输入向量。这可以通过将各个变量沿着时间轴堆叠在一起来实现。例如,如果有三个变量 $x_1, x_2, x_3$,每个变量都有 $n$ 个时间步长,则可以将它们组合成一个形状为 $(n, 3)$ 的单个输入张量。 然后,可以使用LSTM层来构建模型。例如,以下代码显示了如何构建具有一个LSTM层的模型: ```python from keras.models import Sequential from keras.layers import LSTM, Dense model = Sequential() model.add(LSTM(50, input_shape=(n_steps, n_features))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') ``` 在这里,`n_steps` 是时间序列的步长,`n_features` 是每个时间步长的变量数。在本例中,我们使用一个LSTM层,其中有50个神经元,并且输入形状为 `(n_steps, n_features)`。随后是一个具有一个神经元的密集层,并使用均方误差作为损失函数进行编译。 最后,可以使用训练数据来拟合模型,并使用测试数据进行预测。 ```python model.fit(X_train, y_train, epochs=100, batch_size=32) y_pred = model.predict(X_test) ``` 在这里,`X_train` 和 `y_train` 是训练数据,`X_test` 是测试数据。在训练期间,使用100个时期和一个批次大小为32来拟合模型。随后,可以使用 `predict` 方法来预测测试数据的输出。 以上是LSTM变量输入回归预测模型的基本步骤。具体的实现可能因数据型和模型结构而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值