基于神经网络的指数猜涨跌

前言

有个猜涨跌的活动,在每天1点前预测当天上证指数的涨跌,刚好最近在学神经网络,因此就想训练模型训练一下相关性。

先说结论:分别使用MLP、RNN、GRU、LSTM,在测试集上只获得了81%的正确率,如果有知道这个问题的最优误差是多少的帮忙指导一下,感觉模型调到81%就不动了

代码:https://github.com/Llfeng18/Index_guess_up_or_down_with_nn

数据集

共含有 720 个指数,时间跨度2004-06-13 -> 2024-06-14

来源

示例代码

import pandas as pd

df = get_price('000001.XSHG', start_date='2004-06-13', end_date='2024-06-15', 
               frequency='minute', fields=None, skip_paused=False, fq='none')
df = df.dropna()        # 过滤掉空值数据,比如说节假日。。。
# print(df)
df.to_csv('000001.XSHG')  # 生成csv表格

数据预处理

input:前一天15:00收盘 ~ 后一天11:30的每分钟数据共121个

  • 这里为相比前一天15:00收盘的涨幅比例,去除指数数据基数干扰

ouput:每天15:00收盘相比前一天15:00涨跌,1 0为涨,0 1 为跌,不涨视为涨

训练

首次训练

首先采用的是MLP,超参数如下

batch_size = 65536
input_size = 121
hidden_size = 128
output_size = 2
num_hidden_layers = 20
learning_rate = 2e-3
num_epochs = 100

在这里插入图片描述

可以看到测试集准确度随着轮次增加而增加,并且没有出现过拟合下降的现象,同时对于上证指数的历史数据预测达到了99%以上。

但是实际推理跑了两周,效果奇差,甚至不如猴子丢硬币。搜索了一些资料发现是训练集划分的错误,这里使用的是随机打乱所有的数据(不含上证指数),99%作为训练集,1%作为测试集,因此模型可以看到同一天的不同指数的涨幅,而同一天的不同指数是有相关性的,因此等于模型学到了某天的涨幅规律从而准确预测大盘。

  • 这里提到这个示例是想说,这个现象是不是可以说明模型模型含有记忆能力,那只要模型够大就能记住所有的输入?

再次训练

修改后的数据集为 2004-06-13 -> 2024-05-1的数据作为训练集,2024-05-1-> 2024-06-14的数据作为测试集

MLP

仍然采用采用错误数据集的最优参数,因为虽然数据集划分是错的,但是训练集可以过拟合到99%

batch_size = 65536
input_size = 121
hidden_size = 512
output_size = 2
num_hidden_layers = 20
learning_rate = 2e-3
num_epochs = 100

在这里插入图片描述

可以看到第四轮以后测试集准确度开始下降,最优准确度为 81.56%

RNN

RNN、GRU、LSTM放在一起讲是因为效果都是类似的,模型甚至不能过拟合训练集(或者是因为模型太小数据集太大?),到了80%以后就不上升了,同时测试集的准确率为81%,感觉哪里有问题又找不出来

具体实现是,把121个input数据当成时间序列逐个输入模型,emb_size为1即将当前价格逐个输入模型,获得隐藏状态以后得到输出

  • 下面使用的都是1层模型,使用过多层模型但是效果是类似的
RNN
batch_size = 32768
input_size = 121
hidden_size = 128
output_size = 2
num_hidden_layers = 1
learning_rate = 5e-3
num_epochs = 100

在这里插入图片描述

  • 可以看到两轮过后模型损失就不变了
GRU
batch_size = 65536
input_size = 121
hidden_size = 128
output_size = 2
num_hidden_layers = 1
learning_rate = 5e-3
num_epochs = 100

在这里插入图片描述

LSTM
batch_size = 16384
input_size = 121
hidden_size = 64
output_size = 2
num_hidden_layers = 1
learning_rate = 4e-3
num_epochs = 100

在这里插入图片描述

推理

使用 上述MLP训练的第四轮 模型在训练集 和 评估集上进行测试

在这里插入图片描述

可以看出预测的概率和真实概率之前存在线性关系

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值