23、时间序列强化学习与多变量预测:从理论到实践

时间序列强化学习与多变量预测:从理论到实践

1. 时间序列强化学习回顾

在之前的探索中,我们接触到了时间序列相关的在线学习与强化学习内容。在线学习主要处理传统的监督学习问题,而强化学习则侧重于与环境进行交互。强化学习在推荐系统、交易以及控制场景等方面具有重要应用价值。

在实践中,我们实现了基于多臂老虎机(MABs)的推荐器和基于深度Q网络(DQN)的交易机器人。不过,从交易机器人的表现来看,它可能还需要更多的训练。就像在一次模拟交易中,结果是亏损的,但好在没有使用真实资金。

2. 多变量时间序列预测概述

时间序列预测一直是学术界的热门研究领域。在过去十年中,时间序列领域取得了显著进展,机器学习在时间序列中的应用也涌现出许多新的技术和扩展方法。

以往我们主要关注单变量时间序列,而现在我们将聚焦于能源需求的多变量时间序列预测。当前,世界各地面临着能源或供应危机,因此能源需求预测具有重要的现实意义。我们将使用不同的方法进行多步预测,涉及的主题包括多变量时间序列预测以及时间序列的未来发展展望。

3. 多变量时间序列的特点

多变量时间序列包含多个因变量,每个因变量不仅依赖于自身的过去值,还可能依赖于其他变量的过去值。这就引入了共线性等复杂性问题,因为因变量之间并非相互独立,而是存在相关性。共线性违反了许多线性模型的假设,所以采用能够捕捉特征交互的模型更为合适。

例如,不同国家的COVID - 19死亡人数就是一个多变量时间序列的例子。不同国家的COVID死亡人数之间存在相关性,可能存在时间上的偏移或分组情况。

4. 时间序列竞赛的启示

Makridakis竞赛是时间序列领域的重要基准赛事。其中,M4竞赛使用了来自ForeDeCk数据库的100,000个多变量时间序列,涵盖了不同的应用领域和时间尺度,结果于2020年公布。49名参赛者或团队提交了点预测,测试了主要机器学习和统计方法的准确性。

竞赛组织者观察到,大多数成熟统计方法的组合(混合或集成)往往比纯统计或纯机器学习方法更准确。尽管机器学习方法在解决预测挑战方面的应用日益广泛,但统计方法在处理低粒度数据时仍然具有强大的优势。不过,这些数据集不包含外生变量或时间戳,如果有这些额外信息,深度学习和其他机器学习方法可能会更好地利用高维度数据,从而提升模型性能。

值得一提的是,Uber Technologies的Slawek Smyl凭借循环神经网络和统计时间序列模型(Holt - Winters指数平滑)的混合模型获得了M4竞赛的第一名。这表明在机器学习(包括深度学习)中采用实用主义方法是可行的。

5. 集成模型方法

在预测领域,集成模型是一种常用的方法。经济学家长期以来一直在使用混合模型进行预测,如高斯混合模型或GARCH模型的混合。Skaters库提供了各种集成功能,还可以对ARMA等模型进行集成。

在机器学习方面,常见的集成方法是训练多个模型,并根据它们的性能对预测结果进行加权。例如,装袋(Bagging)方法使用有放回抽样创建训练样本,以拟合基础模型,其袋外(OOB)误差是模型在未参与训练的样本上的平均预测误差。

此外,还可以构建由不同类型基础模型组成的异构集成。Scikit - learn提供了用于回归和分类的堆叠方法,通过一个最终模型找到基础模型预测的加权系数,从而组合基础模型的预测结果。

6. 多变量预测的软件支持现状

目前,时间序列分析的行业工作流程中存在一些痛点,其中之一是支持多变量预测的软件库较少。截至2021年9月,Kats库虽然有对多变量分类的支持,但多变量预测仍在规划中;statsmodels库中有VAR和VARMAX模型,但不支持对多变量时间序列进行去季节化处理;Salesforce的Merlion库声称支持多变量预测,但当前功能似乎并未实现;Darts库提供了一些适用于多变量预测的模型。

神经网络和集成模型(如随机森林或提升决策树)支持在多变量时间序列上进行训练。在之前的实践中,我们使用XGBoost创建了时间序列预测的集成模型。

7. 多变量时间序列分类的研究

一些研究强调了多变量应用在时间序列领域被忽视的问题。例如,Alejandro Pasos Ruiz等人对30个来自UEA数据集的多变量时间序列进行了时间序列分类基准测试。结果发现,HIVE - COTE、CIF和ROCKET这三种分类器的准确性明显高于动态时间规整算法,而深度学习方法ResNet的表现也与这些领先者相差不大。

另外,Hassan Ismail Fawaz等人的研究表明,一些深度神经网络在时间序列分类中可以与其他方法竞争,并且神经网络集成在相同数据上的表现与HIVE - COTE相当。Pedro Lara - Benítez等人比较了多种深度学习架构,包括回声状态网络(ESN)、卷积神经网络(CNN)、时间卷积网络(TCN)、全连接前馈网络(MLP)以及多种循环架构(如Elman循环网络、门控循环单元(GRU)网络和长短期记忆(LSTM)网络)。从统计平均排名来看,这些模型的表现难以区分。

8. 用于多变量预测的模型

我们将应用以下几种模型进行能源需求的多变量时间序列预测:
- N - BEATS :在2020年ICLR会议上提出,相比M4竞赛的获胜者有3%的性能提升。它是一种纯深度学习方法,无需特定的时间序列组件,在具有挑战性的数据集(如M3和M4竞赛数据集以及TOURISM数据集)上优于统计方法,并且具有可解释性。
- Amazon’s DeepAR :这是一种概率自回归循环网络模型,由亚马逊德国研究中心提出。它对三个不同数据集的分位数预测准确性进行了比较,并在两个数据集(交通和电力)上与一种因子分解技术(MatFact)进行了预测准确性对比。
- 循环神经网络(LSTM) :用于序列建模,能够学习数据点的长期序列,是处理序列数据的有力工具。
- Transformer :基于注意力机制的神经网络,最初用于自然语言处理任务。它具有线性复杂度和长期记忆能力,与循环神经网络相比,训练和预测速度更快,因为它可以并行执行。
- 时间卷积网络(TCN) :由扩张、因果的一维卷积层组成,输入和输出长度相同。我们使用的实现包含了Shaojie Bai等人提出的残差块。
- 高斯过程 :虽然不能明确归类为深度学习模型,但它等效于具有独立同分布先验参数的单层全连接神经网络,可以看作是多元正态分布的无限维推广。

这些模型大多允许使用额外的解释性(外生)变量,我们将使用来自2017年全球能源预测竞赛(GEFCom2017)的10维能源需求时间序列数据集进行多步预测。该数据集记录了不同地区的能源使用情况,强调了长期记忆问题。

9. 实践操作步骤

我们将使用Python进行实践,具体步骤如下:
1. 安装库

!pip install git+https://github.com/benman1/time-series

由于该库的依赖项包括tensorflow和numpy,建议在虚拟环境中安装。

  1. 加载数据集
from time_series.dataset.utils import get_energy_demand
from time_series.dataset.time_series import TrainingDataSet
train_df = get_energy_demand()
tds = TrainingDataSet(train_df)

如果想加快训练速度,可以减少训练样本数量,例如:

tds = TrainingDataSet(train_df.head(500))
  1. 设置TensorFlow环境
from tensorflow.python.framework.ops import disable_eager_execution
import tensorflow as tf
disable_eager_execution()  # for graph mode
tf.compat.v1.experimental.output_all_intermediates(True)
  1. 加载评估方法并设置训练轮数
from time_series.utils import evaluate_model
N_EPOCHS = 100

如果训练时间过长,可以将 N_EPOCHS 设置为较低的值。

  1. 使用不同模型进行预测
    • DeepAR模型
from time_series.models.deepar import DeepAR
ar_model = DeepAR(tds)
ar_model.instantiate_and_fit(verbose=1, epochs=N_EPOCHS)
y_predicted = ar_model.model.predict(tds.X_test)
evaluate_model(tds=tds, y_predicted=y_predicted, columns=train_df.columns, first_n=10)
- **N - BEATS模型**:
from time_series.models.nbeats import NBeatsNet
nb = NBeatsNet(tds)
nb.instantiate_and_fit(verbose=1, epochs=N_EPOCHS)
y_predicted = nb.model.predict(tds.X_test)
evaluate_model(tds=tds, y_predicted=y_predicted, columns=train_df.columns, first_n=10)
- **LSTM模型**:
from time_series.models.LSTM import LSTM
lstm = LSTM(tds)
lstm.instantiate_and_fit(verbose=1, epochs=N_EPOCHS)
y_predicted = lstm.model.predict(tds.X_test)
evaluate_model(tds=tds, y_predicted=y_predicted, columns=train_df.columns, first_n=10)
- **Transformer模型**:
trans = Transformer(tds)
trans.instantiate_and_fit(verbose=1, epochs=N_EPOCHS)
y_predicted = trans.model.predict(tds.X_test)
evaluate_model(tds=tds, y_predicted=y_predicted, columns=train_df.columns, first_n=10)
- **TCN模型**:
from time_series.models.TCN import TCNModel
tcn_model = TCNModel(tds)
tcn_model.instantiate_and_fit(verbose=1, epochs=N_EPOCHS)
print(tcn_model.model.evaluate(tds.X_test, tds.y_test))
y_predicted = tcn_model.model.predict(tds.X_test)
evaluate_model(tds=tds, y_predicted=y_predicted, columns=train_df.columns, first_n=10)
- **高斯过程模型**:由于高斯过程无法处理完整数据集,我们只加载一小部分数据,并且它依赖于急切执行,需要重启内核、重新导入库。
from time_series.models.gaussian_process import GaussianProcess
tds2d = TrainingDataSet(train_df.head(500), train_split=0.1, two_dim=True)
gp = GaussianProcess(tds2d)
gp.instantiate_and_fit(maxiter=N_EPOCHS)
y_predicted = gp.predict(tds2d.X_test)[0].numpy().reshape(-1, tds.dimensions, tds.n_steps)
evaluate_model(tds=tds, y_predicted=y_predicted, columns=train_df.columns, first_n=10)

所有算法(除高斯过程外)都在99336个数据点上进行训练,训练轮数设置为100,但有一个提前停止规则,如果训练损失在5次迭代内没有变化,则停止训练。模型在测试集上进行验证。

以下是各个模型的特点对比表格:
| 模型名称 | 特点 | 训练参数数量 | 训练速度 | 预测性能 |
| ---- | ---- | ---- | ---- | ---- |
| DeepAR | 概率自回归循环网络 | 360 | 相对较快 | 有一定准确性 |
| N - BEATS | 纯深度学习方法,可解释 | 1,217,024 | 适中 | 性能较好 |
| LSTM | 适合序列建模 | 45,000 | 较慢 | 能捕捉长期序列 |
| Transformer | 基于注意力,并行执行 | 较多 | 慢 | 性能相对较差 |
| TCN | 一维卷积层,有残差块 | 适中 | 适中 | 表现良好 |
| 高斯过程 | 等效于单层全连接网络 | 取决于数据 | 慢 | 受数据量限制 |

通过以上的理论分析和实践操作,我们对时间序列的强化学习和多变量预测有了更深入的了解。不同的模型在多变量时间序列预测中各有优劣,可以根据具体的应用场景和数据特点选择合适的模型。未来,随着技术的不断发展,时间序列预测领域有望取得更多的突破和创新。

时间序列强化学习与多变量预测:从理论到实践

10. 各模型预测结果分析

在使用不同模型对能源需求进行多变量时间序列预测后,我们得到了相应的预测结果。下面对各模型的预测表现进行详细分析。

  • DeepAR模型 :该模型相对简单,仅有360个参数。从预测结果来看,整体均方误差(MSE)为0.4338 。各维度的误差有所不同,例如CT维度误差为0.39,而MASS维度误差达到1.02 。这表明模型在不同地区能源需求预测上的准确性存在差异。
  • N - BEATS模型 :作为一种纯深度学习方法,它在多变量时间序列预测中展现出较好的性能。虽然训练参数多达1,217,024个,但在预测准确性上有一定优势。其预测结果的误差分布相对较为合理,能够较好地捕捉能源需求的变化趋势。
  • LSTM模型 :由于其适合序列建模的特点,能够学习数据的长期序列。然而,该模型训练参数达到45,000个,训练速度较慢。在预测性能方面,它能够较好地处理能源需求的长期变化,但在训练过程中需要更多的时间和计算资源。
  • Transformer模型 :基于注意力机制的神经网络,具有线性复杂度和长期记忆能力。但在本次预测中,训练时间长且性能是所有模型中最差的。这可能是由于该模型在处理时间序列数据时,未能充分发挥其优势,或者是数据特征与模型的适配性问题。
  • TCN模型 :由扩张、因果的一维卷积层组成,包含残差块。该模型训练速度适中,预测性能表现良好。其误差分布较为稳定,能够有效地对能源需求进行多步预测。
  • 高斯过程模型 :由于只能处理小部分数据,其预测结果受数据量限制较大。在使用少量数据进行训练后,预测误差相对较大,并且在实际应用中可能无法准确反映能源需求的整体情况。
11. 模型选择与优化建议

根据各模型的特点和预测结果,我们可以为不同的应用场景提供模型选择和优化建议。

  • 数据量充足且对长期趋势捕捉要求高 :可以选择LSTM模型或N - BEATS模型。LSTM模型擅长处理序列数据,能够学习长期的依赖关系;N - BEATS模型作为纯深度学习方法,在处理复杂数据集时具有较好的性能。为了优化这两个模型,可以增加训练数据量,调整训练参数,例如学习率、批量大小等。
  • 对训练速度有较高要求 :DeepAR模型是一个不错的选择。其参数较少,训练速度相对较快,能够在较短时间内得到预测结果。可以尝试对模型的参数进行微调,以提高预测准确性。
  • 希望利用注意力机制和并行计算优势 :Transformer模型理论上具有这些优势,但在本次实践中表现不佳。可以进一步研究数据预处理方法,对数据进行特征工程,以提高模型与数据的适配性。
  • 追求模型的稳定性和卷积层优势 :TCN模型值得考虑。它的结构相对简单,训练速度适中,预测性能稳定。可以尝试调整卷积层的参数,如卷积核大小、扩张因子等,以优化模型性能。
12. 多变量时间序列预测的挑战与未来发展

尽管我们在多变量时间序列预测方面取得了一定的成果,但仍然面临一些挑战。

  • 共线性问题 :多变量时间序列中因变量之间的共线性会影响模型的准确性。许多线性模型的假设在共线性存在时会被违反,因此需要采用能够捕捉特征交互的模型,但这些模型的训练和调优可能更加复杂。
  • 数据质量和完整性 :数据的质量和完整性对预测结果至关重要。在实际应用中,可能会存在数据缺失、噪声等问题,需要进行数据预处理和清洗。此外,数据的维度和规模也会影响模型的训练效率和性能。
  • 模型解释性 :一些深度学习模型虽然在预测性能上表现出色,但缺乏良好的解释性。在实际应用中,尤其是在决策支持领域,模型的解释性是非常重要的。因此,需要开发具有可解释性的深度学习模型,或者将深度学习模型与传统统计方法相结合。

未来,时间序列预测领域有望在以下方面取得发展。

  • 模型融合 :将不同类型的模型进行融合,发挥各自的优势,提高预测准确性。例如,将深度学习模型与统计模型相结合,利用深度学习模型的强大拟合能力和统计模型的可解释性。
  • 自适应模型 :开发能够自适应调整参数和结构的模型,以应对不同的数据分布和应用场景。这种自适应模型可以根据数据的变化自动调整模型的复杂度和参数,提高预测的灵活性和准确性。
  • 多模态数据融合 :结合多种模态的数据,如文本、图像等,以获取更全面的信息。在能源需求预测中,可以结合气象数据、经济数据等多方面信息,提高预测的准确性。
13. 总结与展望

通过对时间序列强化学习和多变量预测的研究和实践,我们深入了解了不同模型在能源需求预测中的应用。从理论分析到实践操作,我们发现不同模型在训练速度、预测性能和可解释性等方面存在差异。

在实际应用中,我们需要根据具体的需求和数据特点选择合适的模型,并进行相应的优化。同时,我们也认识到多变量时间序列预测面临的挑战,需要不断探索新的方法和技术来解决这些问题。

未来,随着人工智能和机器学习技术的不断发展,时间序列预测领域有望取得更多的突破和创新。我们期待能够开发出更加准确、高效、可解释的预测模型,为能源管理、生产制造等领域提供有力的决策支持。

以下是一个mermaid流程图,展示了多变量时间序列预测的整体流程:

graph LR
    A[数据收集] --> B[数据预处理]
    B --> C[模型选择]
    C --> D[模型训练]
    D --> E[模型评估]
    E --> F{是否满足要求}
    F -- 是 --> G[预测应用]
    F -- 否 --> C[模型选择]

通过以上的分析和总结,我们对时间序列的多变量预测有了更全面的认识,也为未来的研究和应用提供了有益的参考。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值