【python量化】多种Transformer模型用于股价预测(Autoformer, FEDformer和PatchTST等)_neuralforecast

本文主要是介绍【python量化】多种Transformer模型用于股价预测(Autoformer, FEDformer和PatchTST等)_neuralforecast,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

bb1fee63b7d3f7f1db42af482660a610.png

写在前面

在本文中,我们利用Nixtla的NeuralForecast框架,实现多种基于Transformer的时序预测模型,包括:Transformer, Informer, Autoformer, FEDformer和PatchTST模型,并且实现将它们应用于股票价格预测的简单例子

1

NeuralForecast

neuralforecast 是一个旨在为时间序列预测提供一个丰富的、高度可用和鲁棒的神经网络模型集合的工具库。这个库集成了从传统的多层感知器(MLP)和递归神经网络(RNN)到最新的模型如N-BEATS、N-HiTS、TFT,以及其他高级架构,以适应多样化的预测需求。它的关键功能包括对静态、历史和未来的外生变量的支持,提高了模型在实际应用中的灵活性。库中的模型提供了良好的预测可解释性,允许用户绘制趋势、季节性以及外生预测组件。neuralforecast 还实现了概率预测,通过简单的适配器支持量化损失和参数分布,增加了预测结果的置信度。此外,它提供了自动模型选择功能,通过并行自动超参数调整来高效确定最优的模型配置。库的简洁接口设计与SKLearn兼容,确保了易用性,并且训练和评估损失的计算能够适应不同的比例,这为不同规模的数据集提供了灵活性。最后,neuralforecast 包含了一个广泛的模型集合,包括但不限于LSTM、RNN、TCN、N-BEATS、N-HiTS、ESRNN以及各种基于Transformer的预测模型等,都是以即插即用的方式实现,方便用户直接应用于各种时间序列预测场景。这些特性使得neuralforecast 成为那些寻求高效、精确且可解释时间序列预测模型的研究人员和实践者的有力工具。本文将利用neuralforecast 实现各种Transformer模型,并展示将它们应用于股票价格预测的简单例子。

2

环境配置

本地环境:

Python 3.8
IDE:Pycharm

库版本:

Pandas version: 2.0.3
Matplotlib version: 3.7.1
Neuralforecast version: 1.6.4

为了使用最新的其他模型,也可以直接fork neuralforecast的源码:

git clone https://github.com/Nixtla/neuralforecast.git
cd neuralforecast
pip install -e .

3

代码实现

步骤 1: 导入所需的库
  • 导入库:首先,导入处理数据所需的 pandas 库,绘图所需的 matplotlib.pyplot 库,以及 neuralforecast 中的多个模块。这些模块包括各种预测模型和评估指标函数。
import pandas as pd
from neuralforecast.models import VanillaTransformer, Informer, Autoformer, FEDformer, PatchTST
from neuralforecast.core import NeuralForecast
import matplotlib.pyplot as plt
from neuralforecast.losses.numpy import mae, rmse, mse
步骤 2: 数据准备
  • 读取数据:使用 pandas从 CSV 文件加载数据。这个数据集包含股票的每日收盘价。

  • 数据预处理:重命名列以符合模型的输入要求(例如,将日期列重命名为 ‘ds’,将收盘价列重命名为 ‘y’)。此外,将日期列转换为日期时间格式,并为数据集添加一个唯一标识符,这对于使用neuralforecast进行时间序列预测是必要的。

df = pd.read_csv('./000001_Daily_Close.csv')
df['unique_id'] = 1
df = df.rename(columns={'date': 'ds', 'Close': 'y'})
df['ds'] = pd.to_datetime(df['ds'])
步骤 3: 定义预测模型
  • 初始化模型:定义一个模型列表,每个模型都是 neuralforecast 库中的一个类的实例。对于每个模型,指定预测范围(horizon)、输入窗口大小(input_size)以及其他训练参数(如 max_steps, val_check_steps)。

  • 模型配置:这些参数决定了模型的训练方式,包括训练持续时间、评估频率和早停机制等。每个模型都有一些公共的参数以及它们自身的参数可以调整,这里均使用它们默认的参数进行模型初始化。

models = [VanillaTransformer(h=horizon,input_size=input_size,max_steps=train_steps,val_check_steps=check_steps,early_stop_patience_steps=3,scaler_type='standard'),Informer(h=horizon,  # Forecasting horizoninput_size=input_size,  # Input sizemax_steps=train_steps,  # Number of training iterationsval_check_steps=check_steps,  # Compute validation loss every 100 stepsearly_stop_patience_steps=3,  # Number of validation iterations before early stoppingscaler_type='standard'),  # Stop training if validation loss does not improveFEDformer(h=horizon,input_size=input_size,max_steps=train_steps,val_check_steps=check_steps,early_stop_patience_steps=3),Autoformer(h=horizon,input_size=input_size,max_steps=train_steps,val_check_steps=check_steps,early_stop_patience_steps=3),PatchTST(h=horizon,input_size=input_size,max_steps=train_steps,val_check_steps=check_steps,early_stop_patience_steps=3),]
步骤 4: 模型训练与交叉验证
  • 创建 NeuralForecast 实例:使用 NeuralForecast 类整合所有的模型。这个类提供了一个统一的接口来训练和评估多个模型。

  • 执行交叉验证:使用 cross_validation 方法对每个模型进行训练和评估。这个方法自动进行时间序列的交叉验证,分割数据集并评估模型在不同时间窗口上的性能。

nf = NeuralForecast(models=models,freq='B')Y_hat_df = nf.cross_validation(df=df,val_size=100,test_size=100,n_windows=None)
步骤 5: 数据筛选
  • 筛选数据点:通过选择特定的“cutoff”点来过滤 Y_hat_df 中的预测。这种筛选基于预测范围 horizon,确保评估是在均匀间隔的时间点上进行。
Y_plot = Y_hat_df
cutoffs = Y_hat_df['cutoff'].unique()[::horizon]
Y_plot = Y_plot[Y_hat_df['cutoff'].isin(cutoffs)]
步骤 6: 绘图与性能评估
  • 绘制预测结果:使用 matplotlib 绘制真实数据与每个模型的预测结果。这有助于直观地比较不同模型的预测准确性。

  • 计算评估指标:对每个模型,计算和打印均方根误差(RMSE)、平均绝对误差(MAE)和均方误差(MSE)等性能指标。这些指标提供了量化模型性能的方式。

plt.figure(figsize=(20, 5))
plt.plot(Y_plot['ds'], Y_plot['y'], label='True')
for model in models:plt.plot(Y_plot['ds'], Y_plot[model], label=model)rmse_value = rmse(Y_hat_df['y'], Y_hat_df[model])mae_value = mae(Y_hat_df['y'], Y_hat_df[model])mse_value = mse(Y_hat_df['y'], Y_hat_df[model])print(f'{model}: rmse {rmse_value:.4f} mae {mae_value:.4f} mse {mse_value:.4f}')plt.xlabel('Datestamp')
plt.ylabel('Close')
plt.grid()
plt.legend()
plt.show()
步骤 7: 结果展示
  • 展示图表:最后,显示绘制的图表。图表展示了不同模型在整个时间序列上的预测表现,允许直观地评估和比较模型。

5d185d6c7ec0781a5971ebf64ad56ad5.png

VanillaTransformer: rmse 56.5187 mae 38.8573 mse 3194.3650
Informer: rmse 52.2324 mae 39.1110 mse 2728.2239
FEDformer: rmse 48.9400 mae 35.9884 mse 2395.1237
Autoformer: rmse 58.5010 mae 45.7157 mse 3422.3614
PatchTST: rmse 48.5870 mae 36.1392 mse 2360.6968

在对比基于 Transformer 的各种模型在股票价格预测任务上的表现时,从可视化以及评估结果中,我们发现 FEDformer 和 PatchTST 在所有评估指标(RMSE、MAE、MSE)上表现最为出色,这可能归因于它们在处理长期依赖关系和捕获时间序列数据中的复杂模式方面的优势。相较之下,虽然 Informer 显示了合理的性能,但其表现略逊于 FEDformer 和 PatchTST。VanillaTransformer 和 Autoformer 的性能相对较差。这些结果强调了根据特定任务的需求选择合适的模型架构的重要性,同时也表明了在实际应用中进行模型选择时需要考虑到模型的特定优势和潜在的局限性。

4

总结

本文展示了如何使用 neuralforecast 实现多种 Transformer 模型(包括 Informer, Autoformer, FEDformer 和 PatchTST),并将它们应用于股票价格预测的简单示例。通过这个演示,我们可以看到 Transformer 模型在处理时间序列数据方面的潜力和灵活性。虽然我们的实验是初步的,但它为进一步的研究和应用提供了一个基础。读者可以在此基础上进行更深入的模型调优、特征工程和超参数实验,以提升预测性能。此外,这些模型的应用不限于股票价格预测,还可以扩展到其他领域的时间序列分析。

这篇关于【python量化】多种Transformer模型用于股价预测(Autoformer, FEDformer和PatchTST等)_neuralforecast的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/752369

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言