机器学习是未能完全解决的一个领域是股票预测,因为它可能是最有利可图的研究领域之一所以在这方面的研究仍然在继续。投资者希望能够放心地把钱投在表现优异的公司,随着投资的增加,公司的发展也将会突飞猛进,投资的收益也会增长。

在过去的研究中,出现了而很多的方式,但这些方式和方法并不是很成功,所以本文将这个领域的研究扩展到GANs。看看GANs这个领域是否能够进行预测。

虽然kaggle中的预测JPX市场预测是一个非常好的数据集,但是他的数据集需要在kaggle上进行预测和提交,所以这里使用使用他的子集并且指定针对于本文测试的指标进行测试,这样可以显示出我们这次研究的真正表现。

在真正开始之前首先将为所有模型实现相同的预处理方法和评分指标。然后从一个预期性能较差的线性回归基线模型开始并将此作为最小基线。然后尝试着优化XGBoost模型和CAT boost模型,将这两个模型叠加在一起(复现比赛中排名较高的模型),目标是实现比最佳模型更高的模型。在此之后,将探索GANs解决方案,看看GANs能达到什么样的结果。

数据集将被拆分为过去的训练数据和最近的测试数据。其中所有提取和工程特征保持这个拆分,这将确保不会出现数据泄露的问题。我们将使用夏普比率(Sharpe Ratio),这几乎是在人力资源管理和人力投资策略评分中普遍使用的评分指标。夏普比率是由诺贝尔奖得主威廉·f·夏普(William F. Sharpe)提出的,用于帮助投资者了解投资回报与风险的比例。该比率是每单位波动率或总风险的无风险率以外的平均收益。波动性是对资产或投资组合价格波动的衡量。夏普比率根据投资者承担的超额风险,调整投资组合的过去表现或未来预期表现。与回报率较低的类似投资组合或基金相比,较高的夏普比率是好事。但是夏普比率有几个弱点,包括投资回报是正态分布的假设,这里就不进行详细解释了。

数据预处理与特征工程

在金融技术分析领域,技术指标是指基于历史价格、交易量或证券或合同未平仓量的数学计算或模式信号,通过和谐指标可以预测金融市场方向。对于数据科学家来说这被称为特征工程,本项目采用某领域专家提出的顶级技术指标作为我们的特征:7天和21天的移动平均线、指数移动平均线、对数动量、Bollinger bands 和MACD等等。傅里叶变换是一种时间序列数据的处理常用方法,它可以抑制数据中的统计异常,并已被证明允许gru(在我们的GANs模型中使用)学习更健壮的模式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0K4zuL7j-1652237907432)(http://images.overfit.cn/upload/20220511/e912fecb422849549458e5212341ce5a.png)]

我们的目标预测是股票的收盘价,上面的图中我们很难能够理解过去的数据能够很好的预测未来的数据,但当我们用自相关进行统计分析时(自相关是指同一变量在两个连续时间间隔之间的相关程度。它衡量一个变量值的滞后版本与它在时间序列中的原始版本之间的关系),我们使用滞后参数100,得到以下强正相关,这意味着我们的预测模型有望取得良好的结果:

在所有这些预处理之后,我们就可以训练不同的模型并得到我们的结果了。

线性回归

线性回归我们的验证Sharpe为0.44,它接近Numerai文章能够实现的目标0.49。对于所有这些模型,我们将数据分为训练和测试集,并在特定日使用股票市场的技术指标,以确定第二天股票市场的收盘价。

超参数调整算法

我们选择使用一种定制的二进制搜索算法,它可以快速搜索可能的超参数值空间。结合手工模型调优的知识,我们觉得比使用暴力搜索所有超参数组合(比如典型的网格搜索)获得更好的结果。这让我们能够对设计进行改进,并在测试中快速转向。

XGBoost

对于XGBoost,我们发现向模型添加超参数可以获得最佳性能。XGBoost的sharp得分只有0.71,但优化超参数后XGBoost模型的sharp得分为0.78。

CAT Boost

对于CAT Boost模型,我们看到CAT Boost的性能比参数化CAT Boost模型更好,并且sharpe得分最高为0.90,而Numerai文章中的数值为0.87。

堆叠模型

将超参数化的XGBoost模型和普通的CAT boost叠加在一起可以获得最佳结果,我们得到了一个分数为0.946,接近文章中的0.934。这个模型的工作原理是取两个模型之间的两个预测的平均值。

GANs

1、什么是GAN

生成对抗网络,简称GANs,是一种使用深度学习方法进行生成建模的方法,这是一种将生成新数据的非监督问题转化为监督问题的方法,在监督问题中,模型根据其结果的可信度评分。gan系统由鉴别器和生成器两个子模块组成。鉴别器在其学习过程中被输入两类图像,真实的和虚假的。它的工作是学习区分两者,然后为生成器提供相关信息,生成更现实的输出。

我们希望鉴别器能够很好地完成它的工作但又不能太好,因为如果太好生成器无论学习什么都不能欺骗它,为了实现这一点,我们必须设计一个具有良好架构的健壮网络。

2、WGAN-GP的改进

Wasserstein Gan +梯度惩罚或WGAN-GP是一种生成的对抗网络,使用Wasserstein损失以及梯度惩罚来实现Lipschitz的连续性[https://arxiv.org/abs/1904.01184]。这两个结合试图解决较以前模型的弱点。

Wasserstein距离(Earth Mover的距离)是给定度量空间上两个概率分布之间的距离度量,它可以看作是将一个分布转换为另一个分布所需的最低工作。它到处都是可微的这可以将训练模型到最佳的性能,并且足够稳定以避免训练崩溃(如果鉴别器饱和并变得太好了,梯度将消失至零这样将不会再进行收敛,WGAN在稳定的GAN训练方面取得了进展,但有时仍然可以仅产生低质量的样本或无法收敛),所以增加了梯度惩罚,这种损失函数就会将梯度限制在一定范围内,避免可能导致的梯度消失或爆炸梯度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KbzlzmDF-1652237907434)(http://images.overfit.cn/upload/20220511/c7ec62a7466b42a08234887ca7f95f59.png)]

GP的引入是对这种剪切方法的替代,这种方法惩罚了关于输入的梯度并且可以与所有架构融合,只要进行很少超参数调优就能让训练的结果变得更稳定。

添加GRU

为了进一步改善的模型,我们希望使用类似LSTM的方式学习以某种方式捕捉学习中的时间特征。GRU作为正常卷积的替代可以更简单的设计和实现LSTM的大部分收益。GRU由一个重置门和更新门组成,可以理解为是LSTM的简化版本。

WGAN-GP如何应用在股票预测

我们使用WGAN-GP在上面预处理的数据上进行了训练获得了以下的结果:

1000.00usd =(End Portfolio:5327.83USD,Sharpe:0.819)

1000迭代后看起来还不错。但是当我们尝试验证将来的一组完全看不见的数据时,获得以下结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u4BelLA0-1652237907435)(http://images.overfit.cn/upload/20220511/e23216f3c99b4c38aeb2cbf0f27e7f73.png)]

这是否意味着这个模型不可行呢?不完全是,原因可能如下。在对通常使用回归或lstm的其他类似工作的综述中,有几篇论文将COVID期作为数据中的异常因为这是史无前例的,并且使用了一个简单解决方案,即排除认为只是在掩盖问题的异常周期。但是这是一个过于简单的解释,因此我不会采用这种方法。

其实这里发生的事情是,未来数据对于当前模型来说是无法预测的,因为它超过了以前见过的任何事物的界限。如果你观察到训练的数据价格从未超过40USD。也就是说,其实我们没有对预测的价格进行归一化,所以我们将数据从USD转换为[-1,1]之间的缩放。

看看该假设和校正是否产生了更好的结果:

这显然是一个很差的结果,这里将其作为测试失败的报告。

使用window

我重新检查了核心假设,并意识到训练的方式与测试模型的方式不同。训练下的输入具有一定的窗口,而进行测试时并没有使用这个历史的window。所以我修改测试代码添加了这个window,最终得到以下结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WSLhtxqP-1652237907435)(http://images.overfit.cn/upload/20220511/879c3ba574c847ad84ce20df60f2e1c5.png)]

可以看到现在的预测趋势时完全正确的,但预测的粒度明显较低。这是因为在确定有效策略时训练不足的结果。从500到5000次迭代在测试集中产生以下结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0iZ5RKNJ-1652237907436)(http://images.overfit.cn/upload/20220511/8760e785d73a404f97bc98d1d23077f1.png)]

可以看到在相当长的一段时间内,我们的模型在完全看不见的数据上执行得几乎完美。模型能够在2017-07-12至2018-02-08(146天)期间将1000.00美元转换为1181.15美元,市盈率为1.52。模型随着时间的推移会在不同的地方出现分歧,但由于模型可以每个月左右根据新出现的数据和新趋势进行持续的再训练,甚至时每天晚上都可以收集数据,第二天开业前就可以做好预测。

总结

GANs网络不仅在图像处理领域,甚至在金融和股票预测领域也显示出前景。通过更多的调优和适当格式化预测的工作,这些GANs的结果可以与性能良好的回归器进行叠加,从而实现更好、更有弹性的预测。也可以提取整个网络的学习潜在空间,并将其用作回归模型的特征输入。总的来说,这些实验的结果是非常有希望的,并保证了该应用程序的更复杂的改进。

本文没有提供源代码,需要代码的可以问问作者,原文地址:

https://avoid.overfit.cn/post/d746ef7060ce41fb9a822f9768ea42a3

作者:AlphaFitness

GAN能进行股票预测吗?相关推荐

  1. 5.6 matlab曲线拟合案例(股票预测问题、算法的参数优化问题)

    1.股票预测问题 已知一只股票在2016年8月每个交易日的收盘价如下表所示,试预测其后面的大体走势. x = [2 3 4 5 8 9 10 11 12 15 16 17 18 19 22 23 24 ...

  2. 【遗传优化BP网络】基于自适应遗传算法的BP神经网络的股票预测MATLAB仿真

    1.软件版本 MATLAB2021a 2.本算法理论知识 通过MATLAB对BP神经网络,基于遗传优化的BP神经网络,基于改进遗传优化的BP神经网络以及基于改进遗传优化的组合BP神经网络等多种算法的股 ...

  3. 深度学习RNN实现股票预测实战(附数据、代码)

    背景知识 最近再看一些量化交易相关的材料,偶然在网上看到了一个关于用RNN实现股票预测的文章,出于好奇心把文章中介绍的代码在本地跑了一遍,发现可以work.于是就花了两个晚上的时间学习了下代码,顺便把 ...

  4. keras实现简单lstm_四十二.长短期记忆网络(LSTM)过程和keras实现股票预测

    一.概述 传统循环网络RNN可以通过记忆体实现短期记忆进行连续数据的预测,但是,当连续数据的序列边长时,会使展开时间步过长,在反向传播更新参数的过程中,梯度要按时间步连续相乘,会导致梯度消失或者梯度爆 ...

  5. 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用

    1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...

  6. 基于线性回归的股票预测案例

    基于线性回归的股票预测案例 本次的案例使用的是股票数据,数据源从www.quandl.com 获取.本次案例主要是为了练习线性回归 pip install quandl 安装quandl库. 在使用的 ...

  7. pytorch股票预测

    #导包 import numpy as np import torch from torch.autograd import Variable from sklearn.preprocessing i ...

  8. 用stocker进行股票预测

    第一次写关于股票预测的程序,也不知道具体应该做什么,在网上搜了下别人用蟒做的东西,然后仿照别人的东西,自己也试了一下,现在把这个过程记录下,也算是个学习. 参考:https: //blog.csdn. ...

  9. 【毕业设计】LSTM股票预测系统 - python 深度学习

    文章目录 0 前言 1 课题意义 1.1 股票预测主流方法 2 什么是LSTM 2.1 循环神经网络 2.1 LSTM诞生 3 如何用LSTM做股票预测 3.1 算法构建流程 3.2 部分代码 4 实 ...

最新文章

  1. Netflix 开源用于 Spring Boot的 GraphQL 服务框架DGS
  2. 关东升的《从零开始学Swift》3月9日已经上架
  3. 【Android 逆向】IDA 工具使用 ( 函数窗口 Function window | 创建引用图 Xrefs graph to | 创建调用图 Xrefs graph from )
  4. 【计算机网络】传输层 : TCP 流量控制 ( 流量控制过程 | 持续计时器机制 )
  5. html5常见面试题,HTML5常见面试题及答案
  6. MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN
  7. [Android Pro] 终极组件化框架项目方案详解
  8. php字节怎么转化成字符串,php将utf-8(3字节)字符串转换成字节
  9. 【毕业前夕,畅谈科研】一个清华土著的科研感想
  10. electerm,免费开源的SSH桌面终端,像xshell、termius一样好用
  11. 视觉盛宴VALSE 2021来了!今晚开始【预注册】
  12. file input 移动端选择文件夹_免费 |《MNN For Swift》移动端机器学习实战课程
  13. Cookie/Session机制具体解释
  14. 模拟支付宝服务窗环境
  15. UWB与蓝牙AOA定位技术简要对比
  16. 如何把书上的字弄到电脑!
  17. Flutter系列之设置Dialog的宽度
  18. 青少年初学哪门语言类编程比较好?
  19. IEEE Transactions on Industrial Informatics(TII)投稿须知
  20. SMAP L4级土壤湿度产品的预处理

热门文章

  1. 国产MCU-CW32F030开发学习-圆形GC9A01_LCD模块
  2. checkbox的点击事件
  3. clojure/core every?
  4. python稳健性检验_风控模型6大核心指标(附代码)
  5. 机器学习(一) 历史
  6. 发生在我们身边的灵异事件 - 发生在台湾奇萊山的一些灵异事件 1
  7. 飞行器翼尖加速度和控制面的MPC控制
  8. mysql pager_mysq命令行下pager用法小技巧
  9. echart自定义悬浮tooltip
  10. 电线电缆、电线、网线等的表示方法(规格、型号)电线规格电线网 yjv 电线电缆规格型号表(二)...