暑期项目实训-6.29 阶段工作报告 Tushare的使用和DA-RNN论文解读

阶段工作:

  1. Tushare的使用
  2. Price graphs: Utilizing the structural information offinancial time series for stock prediction论文试读
  3. A Dual-Stage Attention-Based Recurrent Neural Network for Time Series Prediction论文解读

      下面介绍的知识,除了很基本的知识点外,都是我这两天学的,作为工作内容记录下来


Tushare的使用

Tushare大数据社区 (waditu.com)

        Tushare上面提供了丰富的接口,可以python获取金融相关的数据,暂时我只用来获取一些股票的每日数据,用来做训练的数据集。下面简单介绍一下我是如何使用的。

        在注册完成账号后,先去完善信息,是学生可以进行认证,获得积分,积分越高可以获得的数据就越多。

        我暂时需要的是股票的数据和日线行情,接口分别是stock_basic和daily。网站基础教程挺详细,就不赘述。简单看下基础使用:

import tushare as ts
import pandas as pd

# 获得所有股票的基本信息
def getStock():
    data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
    data.to_csv('stocks.csv', index=False)
    return
# 按照股票代码获得股票一段时间内的日线行情
def getDailyInfo(tsCode):
    df = pro.daily(ts_code = tsCode, start_date='19980807' ,end_date='20210629')
    df = df.loc[::-1]
    df.to_csv(tsCode + '.csv', index=False, columns=['trade_date','open','high','low','close','vol'])

股票信息保存在csv里留作训练用。Tushare非常的好用。


Price graphs: Utilizing the structural information offinancial time series for stock prediction论文试读

论文地址:[2106.02522] Price graphs: Utilizing the structural information of financial time series for stock prediction (arxiv.org)

        作为入门这篇文章太难,我暂时的理解就是根据股票的收盘价,开盘价,最高最低价,成交量和成交额,生成VG图,再将图上的节点输入到DARNN(下面具体讲的就是这个模型)的encoder中去,然后将每个节点不同的权重信息输入到DARNN的decoder中去,再拼接后经过CANN和全连接层,输出是涨还是跌。

        我能从论文中提取到这些信息就已经尽力了,作为刚开始了解相关网络模型的人来说真的挺难懂的,还是英文的,所以我将眼光放到了其中的子网络模型,DARNN,也就是我详细要解读的论文。


DRANN:A Dual-Stage Attention-Based Recurrent Neural Networkfor Time Series Prediction论文解读

论文地址:[1704.02971] A Dual-Stage Attention-Based Recurrent Neural Network for Time Series Prediction (arxiv.org)        

        DARNN是基于双阶段注意力机制的循环神经网络,简单介绍下我理解的注意力机制,是基于encoder-decoder模型的,不了解的可以去搜索一下。

        传统的encoder-decoder中,生成一个语义向量c,那么encoder中每个输入在c中体现的权重都是相等的,比如要翻译 我爱学习 - > i like studying,会将encoder会将我爱学习编码成语义向量c,在将c输入decoder解码出i like studying,在翻译 爱 为 like的时候,‘我’,‘爱’,‘学习’三个的权重是相同的,这显然不合理,应该爱的权重更高一些。

        所以有了注意力机制,简单来说就是有了多个c(每个时间步一个),每个c体现的输入的各个词的权重不同。在解码器的t时刻输入的是c_t,比如上述例子在第二个时刻解码器输入的是c_2,c_2中‘爱’占的比例更大,所以更容易翻译出like。

下面开始解读论文:

        DARNN是基于多重驱动序列的预测,在股票预测中,也就是用多只股票的时间序列信息去预测其他几只股票的信息。采用双阶段注意力,这也是它的创新点,我理解的注意力机制就是调整权重问题,所以可以不仅仅在编码器的输入阶段引入注意力机制,在编码器的输入阶段也引用了注意力机制,生成每个时刻相关的独有的特征,在解码的阶段使用注意力机制输入不同权重的encoder的隐藏层状态,也就是编码。

        具体网络结构如下:(图片截取自论文)

        先假设我们只预测一只股票,x^{1}x^{n}指的是不同的外部驱动时间序列,也就是作为信息的其他n个股票的价格(并不包括我们要预测的),T是每个时间序列的时间长度,x_{t}是一个n*1的矩阵,代表每个股票在时间为t时的价格。注意,股票的编号(1~n)是上标,而股票的时间编号(1~T)是下标,这点挺重要的。我们要预测的股票是右侧的y,y_{1}y_{T-1}就是已知的要预测的股票的时间为1到T-1的价格,我们要预测它时间为T时的价格。

        encoder阶段,也就是(b)中左侧的lstm,每个时间步输入的是\widetilde{X}_{t},就是在t时刻,将输入的n个股票的t时刻价格按权重调整后的结果(左侧的整个(a)就是这个调整过程),这也是第一阶段的注意力机制。在decoder阶段,每个时间步输入的c_{t-1},就是在t时刻,将encoder的各个时间步的隐藏层输出按权重求和后的编码,(b)中也给出了如何求权重这些权重。

        针对两阶段注意力机制解释完了大体流程后,下面看具体如何实现:

Encoder阶段:

        基础的lstm更新,这个作为基本知识,是我本来就会的,不展开讲了。

        本来,公式中的X_{t}也就意味这每个股票在t时刻价格的权重都是1,因为注意力机制的存在,我们要进行调整。

                       

        这两个公式就是具体求权重的过程,(9)就是一个Sigmod函数。W_{e}U_{e}V_{e}都是我们要学习的参数。得到\alpha _{k}^{t}后,我们就可以求调整后的\widetilde{X}_{t}

                   

        用\widetilde{X}_{t}代替原本lstm中更新用的X_{t},得到所有时间步的隐藏层状态,我们encoder的工作就完成了。

Decoder阶段:

          decoder中基础的lstm更新如下。

         

        \widetilde{y}_{t-1}就是结合y_{t-1}c_{t-1}后的结果。

        为了求c_{t-1},进行如下工作:

      

        V_{d}W_{d}U_{d}是我们要学习的参数,\beta _{t}^{i}是指在时间步为t的时刻,第i个隐藏层h_{i}所占的权重。然后进行下面这步。

           

        c_{t}如上文所说,为时间步为t时刻的编码。然后要和y_{t-1}结合。

            

        这样我们就得到了\widetilde{y}_{t-1},从而输入到lstm中。

        具体我们要预测的\widetilde{y}_{T}的计算方法如下:

                            

        如此,我们便得到了\widetilde{y}_{T},decoder阶段结束,我们得到预测值了。

loss计算:

        训练损失函数如下,就是个MSE loss,很好理解:

                                      

超参数设计

        encoder和decoder的隐藏层大小设为64,batch_size为128,T为10,学习率0.001,每10000次迭代减少10%。


        这就是我这两天的工作,测试了解了Tushare的使用,放弃了第一篇论文的理解(以后可能会再试试,看着它的实验结果挺好的),基本读懂了第二篇论文。        

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值