DeepMTS深度学习神经网络多元时间序列预测宏观经济数据可视化|附数据代码
原文链接:https://tecdat.cn/?p=36237
原文出处:拓端数据部落公众号
在数据科学领域,时间序列分析一直是一个至关重要的研究方向,尤其在金融、气象、医学以及许多其他科学和工业领域中,准确的时间序列预测对于制定策略、政策规划以及资源管理都具有极其重要的意义。随着技术的不断进步,传统的时间序列分析方法已经难以满足复杂多变的数据需求。因此,探索更为先进和高效的时间序列预测方法成为了当今研究的重要课题。
近年来,深度学习技术的快速发展为时间序列预测领域带来了新的可能。深度学习以其强大的数据特征学习和复杂模型拟合能力,在图像识别、自然语言处理等领域取得了显著成果。受此启发,研究者们开始尝试将深度学习技术应用于时间序列预测,尤其是多元时间序列预测,以期望能够进一步提高预测精度和模型泛化能力。
在此背景下,本文用Python帮助客户实现名为DeepMTS的深度学习模型,该模型专门设计用于多元时间序列预测。DeepMTS模型结合了深度学习的优势,通过构建多层次的神经网络结构,能够自动学习时间序列数据中的复杂特征和模式,从而实现对多元时间序列的准确预测。
DeepMTS
数据预处理
为了构建DeepMTS
模型,我们首先需要对宏观数据进行预处理。
加载宏观数据集
数据集包含了多个宏观经济指标的时间序列数据。
# 显示数据集的前几行
print(mdata.head())
准备日期索引
为了将数据集转换为时间序列格式,我们首先需要创建一个日期索引。我们从year
和quarter
列中提取信息,并将它们组合成季度日期字符串。
# 将日期索引设置为数据框的索引
mdata.index = pd.DatetimeIndex(quarterly)
选择相关变量
在本研究中,我们仅选择几个关键变量进行进一步分析。这些变量包括政府实际支出(realgovt
)、联邦基金利率(tbilrate
)和消费者物价指数(cpi
)。
对数差分转换
为了消除潜在的异方差性和趋势性,我们对选定的变量进行对数差分转换。这可以通过计算每个变量的对数差分(即连续两个时间点之间的对数变化)来实现。
经过上述步骤处理后,我们得到了一个用于进一步分析的时间序列数据集。在后续章节中,我们将使用此数据集来构建和评估DeepMTS
模型。
202 rows × 3 columns
数据集的划分与DeepMTS
模型的训练与预测
在本研究中,我们首先将数据集划分为训练集和测试集,以便对DeepMTS
模型进行训练和评估。数据集的划分基于时间序列的顺序,我们保留了前80%的数据作为训练集,后20%的数据作为测试集。
具体地,我们首先获取数据集的行数n
,然后使用np.floor(n*0.8)
计算训练集的最大索引值max_idx_train
。接着,我们使用np.arange
函数生成训练集和测试集的索引数组training_index
和testing_index
。最后,我们根据这些索引从原始数据集中提取出训练集df_train
和测试集df_test
。
接下来,我们配置并训练DeepMTS
模型。在此,我们选择ElasticNetCV
作为基模型,并设置模型的其他参数,如层数n_layers
为3,滞后阶数lags
为4,隐藏层特征数n_hidden_features
为5,重复次数replications
为10,核函数kernel
为高斯核,并开启详细输出verbose
为1。
通过以上步骤,我们成功地将数据集划分为训练集和测试集,并配置了DeepMTS
模型进行训练和预测。这为后续的性能评估和分析提供了基础。
模型结果的可视化分析
为了更直观地理解DeepMTS
模型对各个宏观经济变量的预测效果,我们采用两种不同类型的图表对模型输出进行了可视化。
首先,我们使用了部分依赖图(Partial Dependence Plot,简称PDP,此处用“pi”类型表示)来展示模型对“realgovt”(政府实际支出)、“tbilrate”(联邦基金利率)和“cpi”(消费者物价指数)的预测趋势。通过调用plot()
方法并指定type="pi"
,我们分别绘制了这三个变量的PDP图。这些图表有助于我们理解模型在给定变量上的预测行为,以及这些变量对整体预测结果的影响。
plot("realgovt", type_plot="pi")
接着,为了更详细地展示模型在每个时间点上的预测效果,我们使用了面条图(Spaghetti Plot,此处用“spaghetti”类型表示)。我们同样对“realgovt”、“tbilrate”和“cpi”这三个变量进行了可视化。面条图能够清晰地展示模型在每个时间点上的预测值与实际值之间的对比,从而帮助我们评估模型的预测性能。