首先对于选股这个问题,如果要利用神经网络的话,需要将其转化为有监督学习问题,一般情况下都是转化为有监督学习问题。有监督问题可以分为分类与回归问题。这里我将其转化为二分类问题,即预测第二天是否上涨,建模方式与之前文章相同(送你一份年化100%+的策略)。当然也可以分成多个类别,表示不同程度的涨幅或跌幅。
如果用神经网络的话,目前一般会设计基于CNN的模型或基于LSTM的模型。这里我选择了CNN进行模型搭建。
对于CNN的基础知识,这里不作介绍,网上一堆教程,B站也有教程视频,下面我讲一些我自己的理解。CNN最早是用于图像识别分类的,但CNN同样适合一维时序信号的回归或分类。图像很好理解基本就是含RGB值的三维矩阵,如果是灰度图像,最后一个维度是1。一维信号就是二维矩阵,可以理解为一个维度是信号长,一个维度是通道数,举个例子,股票中含收盘价和成交量,这里可以将收盘价和成交量看成信号的两个通道。其实CNN识别一维信号也是从图形角度去识别的,可能比较难理解,这里我也不知道怎么解释,时间久了大家可能就理解了。可能会有一些方法将股票的涨跌绘制成图像然后利用CNN预测或分类,我个人觉得不太合适,绘成图像的过程中会加入很多不相关的信息还容易丢失一些信息,当然可能效果会比较好但我觉得这个效果的上限肯定不如用一维信号来做。还有其他一些方法会利用其他一些手段转化成图像,这也是可以,看大家是如何转化成图像的。
这里我是转化为一维时序信号进行分类。首先我说一下为什么CNN适合一维信号的分类或回归。其实CNN做预测的原理就是利用卷积核的能力,卷积核可以感受历史一段时间的情况,最后集合多个历史片段进行判断。与LSTM相比,CNN可以看到历史更多的数据,虽然LSTM自己有一定的记忆能力,但这个记忆只是短暂的记忆。这里并不是说明CNN一定比LSTM好,虽然我个人比较喜欢CNN,但是具体任务还是需要多尝试的。(对CNN和LSTM不熟悉的朋友可以自行网上搜索教程)
因为大家用keras的比较多一点,keras对新手来说也更好上手一点,我就写了一个基于keras框架的代码。我搭建的模型结构如下(没啥参考价值,效果也不好):
对于输入的数据包含了4个通道,分别是个股的收盘价、个股的成交额、大盘的收盘价、大盘的成交额。输入的时间长度为20天。这里不对各个层具体介绍,大家感兴趣的可以自行百度。
搞深度学习的人也成为炼丹师。引用知乎一篇文章的说法(链接https://zhuanlan.zhihu.com/p/23781756):深度学习的模型训练就是炼丹。把精选原始数据,按照神经网络的规定法则通过计算框架提炼,从而得到一个远小于数据数倍的模型。
以下是几个我训练阶段不太一样的地方:
**在原始数据中会有一些停牌的数据,这些停牌的数据需要填充或者删除。**为了我后面方便处理,我对停牌数据进行了填充。停牌时,收盘价用前面未停牌的收盘价填充,成交额填充为0。核心代码如下:
直接将原始数据输入计算,可能容易导致模型识别困难的问题,所以输入的数据需要进行标准化处理,核心代码如下:
在模型的训练阶段,采用的是mini batch的训练方式训练的。因为一次性载入所有数据计算将会耗费大量的内存,所以只能将数据分成多个mini batch计算。在每个mini batch中,我会选取从股票池中选取固定数量的股票,再分别从这些固定数量的股票中抽取某个历史片段送入训练数据中。核心代码如下:
其他一些超参,这里不作介绍了,大家可以自己看代码。
训练数据:20160101-20181001
验证数据:20181001-20181231
测试数据:20190101-
与传统机器学习模型不同,深度学习训练还是需要用到验证集的(我之前的lgb没用验证集)。因为深度学习更容易过拟合,不使用验证集比较难判断什么需要停止训练。
训练结果:
从loss的下降情况可以发现,训练集的loss一直在降,但验证集的loss反而上升了。说明模型已经在过拟合了,我搭建的模型不能很好的学到东西。
回测结果这里就不放了,结果也很烂。
这篇文章只是在深度学习应用上的一个小小试探。失败的原因可能有以下几点:(1)网络搭建的不好;(2)想从图形的角度识别很难,还是需要给网络喂特征。后面我会对这个问题持续研究。
如果大家对深度学习神经网络不了解,结合代码和这篇文章可以帮大家对深度学习建模有一个基本的了解。深度学习的模型搭建及训练是非常有技巧性的,难度远远大于用LGB模型训练。对于模型的搭建,需要从理论出发,理解各种层的计算方式,然后带一定的猜想去试验。对于模型的训练同样有很多技巧也需要结合理论出发,比如我上面提到的每个mini batch数据送入的方式(当然我那种不一定好),这些技巧都是需要经验的积累的,不同领域的技巧也是有区别的。
总之大家如果想将深度学习应用在投资上面需要花很多时间进行研究。
代码github:
https://github.com/wbbhcb/stock_market/tree/master/深度学习实战
对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。
个人知乎:
https://www.zhihu.com/people/e-zhe-shi-wo/activities
做了一个很low的基于神经网络的选股策略,回测效果惨淡,仅供大家学习使用,带大家入门深度学习。问题转化与模型选择首先对于选股这个问题,如果要利用神经网络的话,需要将其转化为有监督学习问题,一般情况下都是转化为有监督学习问题。有监督问题可以分为分类与回归问题。这里我将其转化为二分类问题,即预测第二天是否上涨,建模方式与之前文章相同(送你一份年化100%+的策略)。当然也可以分成多个类别,表示不同程度的涨幅或跌幅。如果用神经网络的话,目前一般会设计基于CNN的模型或基于LSTM的模型。这里我选择了CNN进
常见
模型
的下载地址:http://www.cc.gatech.edu/projects/large_models/
斯坦福兔子的下载地址:http://www.cc.gatech.edu/projects/large_models/bunny.html
斯坦福兔子的官方主页:http://www.cc.gatech.edu/~turk/bunny/bunny.html
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Dropout, Dense, LSTM
import matplotlib.pyplot as plt
import os
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error,
神经网络
是近年来迅猛发展的
人工智能
的核心技术,本篇报告选取具有时
间序列预测能力的循环
神经网络
作为研究对象,对传统RNN、LSTM、GRU
三种循环
神经网络
模型
进行
系统性的测试。在月频的多因子
选股
方面,循
环
神经网络
具有出色的样本外预测平均正确率,但是样本外平均AUC 值表
现一般。
神经网络
在年化超额收益率、信息比率上优于线性回归算法,但
是最大回撤普遍大于线性回归算法。在目前测试的所有
神经网络
模型
中,
LSTM 表现最好,GRU 的表现和LSTM 相近
Qlib是一个面向AI的量化投资平台,旨在实现潜力,增强研究能力并创造AI技术在量化投资中的价值。
它包含数据处理,
模型
训练,回测的完整ML管道; 并涵盖了定量投资的整个链:alpha搜索,风险建模,投资组合优化和订单执行。
借助Qlib,用户可以轻松尝试想法,以创建更好的量化投资策略。
有关更多详细信息,请参阅我们的论文 。
Qlib框架
在模块级别,Qlib是一个由以上组件组成的平台。 这些组件被设计为松耦合模块,每个组件可以独立使用。
Infrastructure层
Infrastructure层为Quant研究提供了基础支持。 DataServer为用户提供了高性
1、Lena/Lenna
这个
模型
是一个美女,名字叫Lena,是1972年11月《Playboy》(国内译为:花花公子)杂志的一个插图。不知道花花公子杂志为何物的请自己去百度。
Lena是瑞典人。依据英语标准发音,译为Lenna。以下来张截图:...
1. 准备图数据。需要将图G转换为能够输入到图卷积
神经网络
中的格式,这通常包括节点特征矩阵和邻接矩阵。
2. 定义图卷积
神经网络
模型
。这可以使用一个开源库,如PyTorch Geometric或Deep Graph Library,来轻松实现。
3. 训练图卷积
神经网络
模型
。使用节点特征矩阵和邻接矩阵作为输入,并使用已知的边是否存在作为标签训练
模型
。
4. 使用训练好的
模型
进行
链路预测。使用新的节点特征矩阵和邻接矩阵作为输入,并使用
模型
预测边是否存在。
以下是使用PyTorch Geometric实现上述步骤的示例代码:
import torch
from torch_geometric.datasets import TUDataset
from torch_geometric.data import DataLoader
from torch_geometric.nn import GCNConv
# 加载图数据
datas