2. 金融分析知识强化学习部分
视频课件位置:https://gitee.com/qiangchen_sh/stock-prediction/tree/master/
引用baseline来源:https://github.com/huseinzol05/Stock-Prediction-Models(强烈推荐)
整体大纲内容。
1 深度学习作金融数据分析
目标:数据+代码实战(Pytorch、TensorFlow)
模型:XBoost、LSTM、Reinforcement Learning
切入点:股票、基金数据分析与预测
1.1 主线参考论文
https://arxiv.org/pdf/2002.05786.pdf
1.2 引用论文概述
1. Introduction
2. Machine Learning in Finance
XGBoost
3. Deep Learning
1. 多层感知器 DMLP(多个全连接层的神经网络)
2. 卷积神经网络 CNN
3. 循环神经网络 RNN
4. 长短记忆网络 LSTM
5. 受限波尔兹曼机 Restricted Boltzmann Machines(RBMs)
6. 深度信念网 Deep Belief Network(DBNs)
7. 自动编码器 Autoencoders (AEs)
8. Other Deep Structures,like Deep Reinforcement Learning (DRL), Generative
Adversarial Networks (GANs), Capsule Networks, Deep Gaussian Processes (DGPs)
4. Financial Applications
1. Algorithmic Trading(交易算法,分析买卖机会)
2. Portfolio Management(投资组合管理)
3. Asset Pricing and Derivatives Market (options, futures, forward contracts)(资产定价)
4. Financial Sentiment Analysis and Behavioral Finance(情绪分析与行为金融)
5. 金融领域目前的深度学习研究现状
6. 一些讨论和开放的问题
7. 总结
1 对于预测模型的看法
技术问题+业务问题(业务背景、业务知识的理解更重要)+数据(找出适合算法和场景的数据)
学习数据分布,但往往是无法用数学表达式描述的
金融数据的分析预测难点:
(1)数据分布很难刻画:影响因子太多了(市场情绪、政策)
季节性、节假日、活动举办
(2)数据本身:数据质量 + 隐藏信息
应对问题方法:
(1)理解业务背景,掌握业务知识
(2)理解数据
(3)数据处理(特征工程)
(4)算法设计
2 关于Pipline
特征工程 + 深度学习模型 + 损失函数 + 训练 + 推理输出
不涉及模型 metrics 与 loss 的gap、模型可解释性、预测的不确定性
3 数据
3.1 数据获取
https://finance.yahoo.com/
https://pandas-datareader.readthedocs.io/en/latest/
http://quant.10jqka.com.cn/platform/html/help-api.html?t=-1#3/786
https://pandas-datareader.readthedocs.io/en/latest/remote_data.html
3.2 常用库
Numpy + Pandas + StatsModels + Scipy
Matplotlib + Seaborn
《Python金融大数据分析》
3.3 torch框架强调
torch讲义pdf
(1)继承torch.nn.Module类
(2)forward()方法是什么?
(3)完整的神经网络流程
4 特征工程
我的理解:将场景数据转换为算法更容易接受和理解的数据
(1)特征理解
数据的4个等级
(2)数据清洗
缺失值
标准化与归一化
(3)特征构建
重新编码
填充
扩展
创造
(4) 特征选择
合适的特征(相关性、坏属性)
(5)特征转换
降维:PCA、LDA
5 分析问题
线性回归,DMLP
通过大致地对现有的博客或者视频讲解进行了调研,发现大部分内容都是集中在理论讲解与现成库模型
的直接调用,对于一个完整的pipline很少有博客进行分析与讲解。
目前bilibili关于lstm的视频主要是理论基础讲解,实战案例缺少在实际数据的应用场景。
LSTM从理论基础到代码实战,这一节视频就可以完全学会,即使你是零基础!
我认为一个LSTM模型最佳实践应该包括:
特征工程
数据集(训练集与验证集)的制作
这一步充分体现项目是不是大家自己完整实现的,反映在torch中就是DataSet类的设计与
DataLoader函数的调用。
模型的构建(建议不要直接调库,自己搭建,这样才能针对具体的数据进行细节的设计与改动)
损失函数的设计
训练过程的设计(这在小规模数据集上不用考虑)
调参(这在XGBoost模型上尤为重要)
超参数优化基本分为三类:网格搜索,随机搜索和贝叶斯调参(采用高斯过程,考虑之前的参数信
息;迭代次数少,速度快;对于非凸问题依然有效)。
推荐案例:https://www.kaggle.com/fayzur/lgb-bayesian-parameters-finding-rank-average
验证集与测试集上进行验证,判断模型是否过拟合,并且能设计有效的方法在一定程度上避免过拟
合。
模型的构建可以大致归纳为两类:
调库(这个网上案例比较多,但这也是初学者最容易入手的案例)
调库却没有讲解重点步骤:调参
自己建模,完整实现(这类要多学习github上开源项目,总结出自己的最佳实践)
初学者可以参考:
https://github.com/jaungiers/LSTM-Neural-Network-for-Time-Series-Prediction
https://github.com/apachecn/AiLearning
https://github.com/lilianweng/stock-rnn
https://github.com/borisbanushev/stockpredictionai#reinforcementlearning_further
关于lstm理论学习,可以参考:
https://colah.github.io/posts/2015-08-Understanding-LSTMs/
https://www.analyticsvidhya.com/blog/2021/03/introduction-to-long-short-term-memory-lstm/
XGBoost视频网上很多,不再赘述。
如果你想在数据分析领域的实战能力快速成长,推荐kaggle、和鲸社区。看完本节视频,请找两个实际
场景进行应用并一步一步提升模型性能。
Concatnation与Pointwise Operation
Concatnation:描述图像本身的特征数(通道数)增加了,而每一特征下的信息量无变化
Pointwise Operation:描述图像的特征下的信息量变化了(取决于加法还是乘法)
1 LSTM理论基础
You don’t throw everything away and start thinking from scratch again.
对依赖时间和序列的行为(比如股价、自然语言等)进行建模的神经网络:输入与输出并不是相互独立
的,输出依赖于先前的计算。
1.1 RNN
这种循环结构很适合用于序列或时间数据,speech recognition, language modeling, translation,
image captioning…
问题:为什么用tanh,而不采用CNN中效果比较好的激活函数ReLU?
避免梯度消失或爆炸。RNN其实也可以用RELU,但是初始化参数的值应该在1附近,不然随着长距离
传递会导致梯度爆炸或者梯度消失。
优点:能够将先前的信息与当前任务联系起来。
缺点:实践中RNN很难学习长距离依赖long-term dependencies关系(理论上可以解释的)
I was born in France, but I grew up in China, and I loved Zhangsan due to his beauty. I can
speak fluent __. (Chinese)
1.2 LSTM
背景:应对长距离依赖问题(梯度消失),序列中并不是每个观察值对于结果都是同等重要的。
Remembering information for long periods of time is practically their default behavior, not
something they struggle to learn!
I was born in France, but I grew up in China, and I loved Zhangsan due to his beauty. I can
speak fluent __. (Chinese)
训练参数Wf,Wi,WC,Wo
1. 细胞状态(cell state,可以理解为长期记忆的状态)有点像传送带。 它直接沿着整个链条运行,
只有一些较小的线性相互作用。 信息很容易沿着它不变地流动。
2. 隐藏状态ht是什么?可以理解为短期记忆的状态,作为下一个时间节点的输入。cell state的过滤
部分。
3. LSTM 确实有能力将信息删除或添加到细胞状态,由称为门的结构仔细调节。
4. gates到底是什么?
gates是一种选择性(添加、删除、保留)让信息通过的方式,以此来调节细胞状态。
思考:为什么要进行删除或添加等操作?
sigmoid 层输出 0 到 1 之间的数字,值 0 表示“不让任何东西通过”,而值 1 表示“让所有东西通
过”。
LSTM中有 3个gates:
遗忘门(forget gate):根据短期记忆的信息与目前的输入信息决定长期记忆中的信息是否
需要被遗忘。——> I was born in France
输入门(input gate):(1)sigmoid 层决定我们将更新哪些值;(2)tanh 层创建一个新
的候选值向量Ct_tilde,可以添加到细胞状态中。——> 结合这两者可以更新状态(I grew up
in China)
输出门(output gate):(1)sigmoid 层决定我们将保留新的cell state的哪些部分作为下
一个时间节点的输入;(2)我们将单元状态通过 tanh(将值映射到 -1 和 1 之间)并将其乘
以 sigmoid 。
比如记录上一个时间节点的词是动词speak,那么后续可能接一个名词。