Python环境下基于最大离散重叠小波变换和支持向量回归的金融时间序列预测

news/2025/2/11 23:03:40/

金融时间序列具有非线性、高频性、随机性等特点,其波动情况不仅与当前股票市场、房地产市场、贸易市场等有强联动性,而且大幅度起伏对于其他市场有较大的影响和冲击。由于金融市场受多种因素影响且各影响因素间也存在一定复杂动态交互关系,导致金融时间序列成为一个具有非平稳性、时序相关性等特征的复杂系统,更加准确地把握金融时间序列的走势风向能够引导投资者正确的投资行为,相关的预测研究成为近几年的研究重点。因此,构建一个稳定、有效的金融时间序列预测模型是一项具有挑战性、实际应用价值的任务。

目前,金融时间序列预测方法主要可以分为计量预测方法和机器学习方法两种。一方面,计量预测方法包括差分整合移动平均自回归模型、动态模型平均、广义自回归条件异方差模型等,然而计量模型对时间序列有部分条件限制,要求时间序列的平稳性,针对非线性、非平稳数据处理效果较差。另一方面,常见的机器学习方法包括支持向量机、BP神经网络、循环神经网络等,这些模型由于在对复杂非线性、非平稳的数据进行处理时,不需要提供特定条件,具有更多的优势,获得了广泛的应用。尽管机器学习方法不是必然提升对复杂动态系统的预测准确率,但针对性的应用在非线性时间序列数据上往往能够细粒化读取数据信息、提升预测准确率。

提出一种基于最大离散重叠小波变换和支持向量回归的金融时间序列预测方法,程序运行环境为Python或Jupyter Notebook,所用模块如下:

import numpy as np
import pandas as pd
import copy
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import mean_squared_error
from numpy.lib.stride_tricks import sliding_window_view
from modwt import modwt, modwtmra,imodwt

部分代码如下:

#第一部分,使用原始时间序列的SVM + 滑动窗口
#读取数据
prices = pd.read_csv('Data/AUD-JPY-2003-2014-day.csv',delimiter=";", header=0, encoding='utf-8', parse_dates=['Date'])
prices
# 删除不使用的列
prices.drop(["Open", "High", "Low"],axis = 1, inplace = True)
#定义变量
dates = prices['Date'].copy()
closing_prices = prices['Close'].copy()
#使用 matplotlib 绘制原始时间序列
plt.subplots(figsize=(16,4))
plt.plot(dates, closing_prices, label='Original series AUD-JPY 2003-2014')
plt.legend(loc = 'best')
plt.show()
#SVM + 滑动窗口实现
#实现滑动窗口
def slideWindow(series, window_lenght = 2):_X, _Y = [], []#Auxiliary variable to store the sliding window combinations. We sum up +1 as we are taking the last values of Aux_window#as the output values of our time seriesaux_Window =  sliding_window_view(series, window_lenght+1)#将第一个“window_lenght”值作为输入 (X),将最后一个值 (window_lenght+1) 作为输出 (Y)for i in range(len(aux_Window)):_Y.append(aux_Window[i][-1])_X.append(aux_Window[i][:-1])return _X, _Y
window_lenght = 2
#调用滑动窗函数    
X, Y = slideWindow(closing_prices,window_lenght)
#25% 的数据用于测试 SVM
idx_test_date = int(0.75*len(Y)) + window_lenght
df = pd.DataFrame(columns = ['test_date']) 
df['test_date'] = prices['Date'].iloc[idx_test_date:]
##Splitting and plotting test data#拆分和绘制测试数据,将数据拆分为训练数据(75%)和测试数据(25%) 
#shuffle = False 表示不是随机打乱数据,而是要保持有序
x_train,x_test,y_train,y_test = train_test_split(X, Y, test_size=0.25, random_state=None, shuffle=False)fig, ax = plt.subplots(2,1,figsize=(16,8))
ax[0].plot(dates, closing_prices, label='Original')
ax[0].plot(df['test_date'], y_test, label='Values to test the model out',color='orange')
ax[1].plot(df['test_date'], y_test, label='Values to test the model out',color='orange')ax[0].legend(loc = 'best')
ax[1].legend(loc = 'best')
plt.show()
#构建SVR 
def evaluateSVR(_x_train,_y_train,_x_test,_y_test, kernel = 'rbf'):if (kernel == 'rbf'):clf = svm.SVR(kernel ='rbf', C=1e3, gamma=0.1)elif (kernel == 'poly'):clf = svm.SVR(kernel ='poly', C=1e3, degree=2)else:clf = svm.SVR(kernel ='linear',C=1e3)_y_predict = clf.fit(_x_train,_y_train).predict(_x_test)return _y_predicty_predict = evaluateSVR(x_train,y_train,x_test,y_test)plotValuesWt = y_test.copy()

部分出图如下:

工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。


http://www.ppmy.cn/news/1351713.html

相关文章

飞天使-k8s知识点13-kubernetes散装知识点2-statefulsetdaemonset

文章目录 RC RS DeploymentStatefulSet有状态服务控制器DaemonSet守护进程与任务job cronjob RC RS Deployment StatefulSet有状态服务控制器 statefulset StatefulSet 是 Kubernetes 1.9 版本引入的一个新的 API 对象,主要用于处理有状态的服务。StatefulSet 与 De…

使用Word Embedding+Keras进行自然语言处理NLP

目录 介绍: one-hot: pad_sequences: 建模: 介绍: Word Embedding是一种将单词表示为低维稠密向量的技术。它通过学习单词在文本中的上下文关系,将其映射到一个连续的向量空间中。在这个向量空间中,相似的单词在空间…

【数组】-Lc325-和等于k的最长子数组长度(前缀和 + Map)

写在前面 最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.概念2.1 什么是子数组2.2 前缀和 3.关键点3.1 map初始化问题3.2 map的key重复,取舍问题 4.…

域名解析大概过程笔记

不同情况下处理方式有所不同: 输入域名访问: 浏览器首先会检查本地缓存,看是否有对应域名的解析记录。如果本地缓存没有,浏览器会查找操作系统的 hosts 文件,看是否有对应的 IP 地址。如果 hosts 文件中没有&#xff0…

python从小白到大师-第一章Python应用(一)语言简介

目录 一.语言简介 1.1发展历史 1.2语言特点 1.3其他动态语言 本节重点 一.语言简介

easyx搭建项目-永七大作战(割草游戏)

永七大作战 游戏介绍: 永七大作战 游戏代码链接:永七大作战 提取码:ABCD 不想水文了,直接献出源码,表示我的诚意

Mac 下JDK环境变量配置 及 JDK多版本切换

一、推荐官网下载: 二、环境变量配置 1、查看JDK地址,在终端输入以下命令: /usr/libexec/java_home -V 我的路径: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home /Library/Java/JavaVirtualMachines/zulu-11.j…

【python】网络爬虫与信息提取--Beautiful Soup库

Beautiful Soup网站:https://www.crummy.com/software/BeautifulSoup/ 作用:它能够对HTML.xml格式进行解析,并且提取其中的相关信息。它可以对我们提供的任何格式进行相关的爬取,并且可以进行树形解析。 使用原理:它能…