一、项目简介
股票预测是金融领域中的重要问题,通过对历史股票数据的分析和建模,可以为投资决策提供参考,本项目是基于PyTorch深度学习框架使用一个两层的一维卷积神经网络,实现股票未来一天涨跌的二分类任务。网络的输入是历史股票开盘价、收盘价、最高价、最低价、成交量指标、百分比变化量(多特征),输出是下一天是否涨跌(输出1为涨,0为跌)。【本项目的代码文件分模块整理,包含模型构建、数据划分、训练过程等模块都清晰分明】【本项目的代码文件分模块整理,包含模型构建、训练过程、绘图等模块都清晰分明】
二、实验数据集及实验说明
实验采用的是深沪300数据集sh300.csv(后文有源码和数据集获取方式),这是公开的数据集,百度一下应该也可以找得到,数据集展示如下(所展示的数据是本人删掉某些列的数据,即sh300_test.csv)。
数据划分:以滑窗的方式进行数据划分,如红框所示,假设滑窗大小为20,步长为1,输入特征为6,若第21天的收盘价大于第20天的收盘价,则标签设置为1,反之设置为0,将样本设置为二分类任务。(本项目在实验中使用的是滑窗为100,即用前100天的数据来预测第101天的股票是涨是跌。根据实验,滑窗越大准确率越高。)
三、实验环境
平台:Window 11;语言:python3.9;编译器:Pycharm;框架:Pytorch:1.13.1
四、实验内容及部分代码展示
1、2DCNN模型构建
model_2DCNN.py定义了项目用到的网络模型,本项目用到的模型是两层的二维卷积网络、relu激活函数、两层全连接层进行输出二分类的预测结果。
2、train.py 训练通用模板
训练过程集成到fit函数里面,包含测试集训练过程和验证集计算过程,是项目训练过程的通用代码,其他项目也可以在它的基础上修改后使用。
3、Config.py 参数定义
config中定义了项目的基本参数,可以在里面修改训练参数。(本项目在实验中使用的是滑窗为100,即用前100天的数据来预测第101天的股票是涨是跌。根据实验,滑窗越大准确率越高。)
4、train_2DCNN_run.py 训练文件
该py文件实现整体训练流程并做绘图操作。依次实现加载数据、数据标准化、样本和标签制作、划分训练集测试集、数据转化为Tensor、形成数据更迭器、载入模型、定义损失、定义优化器、开始训练、损失可视化、显示预测结果。
5、test_pth.py 模型训练后的测试文件
采用模型训练完成后产生的的pth参数文件对测试数据进行预测,可以展示模型预测效果,本项目还是用训练的数据作为该文件的测试数据,前面的处理过程类似train_2DCNN_run.py所示。
6、plot_loss_acc.py 准确率和损失的绘画
将训练产生并收集的loss.csv和acc.csv展示出来,也就是损失图,红框处可调展示范围。
7、tsne_plot.py 模型训练后用于绘制t-SNE聚类图
绘制了训练前和训练后样本的t-SNE聚类图
五、实验结果及分析
0、训练过程中
1、loss损失图
该损失是训练了200个epoch的损失图
2、acc准确率图
3、test_pth.py的预测效果展示
所示案例预测准确
4、tsne_plot.py的聚类效果展示
第一个是未训练时的样本聚类图,第二个是训练后的样本聚类图,模型训练后,样本的分布明显分隔开了,说明模型对股票涨跌的二分类有效果。
六、其他提示
数据在没有做标准化的时候进行训练,效果很差,准确率基本上是0.5左右,进行标准化之后进行训练,效果达到了90%以上。
七、资源与总结
若有朋友需要可运行的源码和数据集,可以guan注【科研小条】gong众号,回复【股票涨跌分类2DCNN】,即可获得。