基于CNN的股票预测方法【卷积神经网络】

基于机器学习方法的股票预测系列文章目录

一、基于强化学习DQN的股票预测【股票交易】
二、基于CNN的股票预测方法【卷积神经网络】



本文探讨了利用卷积神经网络(CNN)进行股票预测的建模方法,并详细介绍了模型的搭建、参数选择以及数据处理方法。尽管序列建模通常与递归神经网络(如LSTM和GRU)相关,但本文展示了如何使用CNN进行时间序列数据的预测,完整代码放在GitHub上——Stock-Prediction-Using-Machine-Learing.

一、CNN建模原理

深度学习背景下的序列建模主题主要与递归神经网络架构(如LSTM和GRU)有关,但事实上CNN也可以用于对序列数据的建模。与处理图像所用的二维卷积不同,处理时间序列可以使用一维卷积,用多个以前的数据序列预测下一时刻。如下图所示,Input_length是指定用几个以前的数据来预测下一天的股票价格,用一个一个卷积核来滑动提取特征,最后通过一个线性层得到输出的预测值,具体网络搭建见下一小节。

截屏2022-05-23 下午8.22.12

其中两个关键的参数是:

  1. Input_length: 用几个以前的数据作为输入,来预测下一时刻。(在后文称为Window_size)
  2. Kernel_size: 卷积核大小。

事实上也可以用二维的卷积和来建模,比如输入可以是多只股票,用二维卷积核对多只股票同时建模预测,或者将一只股票的多个特征同时建模预测,本文仅探究用股票的收盘价来预测未来的股票收盘价格,没有利用股票数据的其他技术指标。

二、模型搭建

基于Pytorch深度学习框架,搭建的CNN网络如下所示:

kernel_size=2   #一维卷积核大小

class CNNmodel(nn.Module):
    def __init__(self):
        super(CNNmodel, self).__init__()
        self.conv1 = nn.Conv1d(1, 64, kernel_size=kernel_size)   #1xkersize的卷积核 
        #self.conv2 = nn.Conv1d(64,128,1)
        self.relu = nn.ReLU(inplace=True)
        self.Linear1 = nn.Linear(64*(window_size-kernel_size+1), 10)
        self.Linear2 = nn.Linear(10, 1)
        
    def forward(self, x):
        x = self.conv1(x)
        x = self.relu(x)
        x = x.view(-1)
        x = self.Linear1(x)
        x = self.relu(x)
        x = self.Linear2(x)
        return x

model = CNNmodel()
print(model)

选用relu函数作为激励函数,因为股票都是正数,而relu函数的性质,可以很好的避免模型输出值为负值。

三、模型参数的选择

(1)探究window_size的影响

调节CNN模型中window_size参数,并比较不同window_size下训练集与测试集的相对误差率,结果如下表所示:

window_size 训练集相对误差率 测试集相对误差率
5 2.22% 2.18%
6 1.69% 1.48%
7 2.30% 2.27%
8 2.36% 2.12%
15 1.65% 1.58%
20 2.01% 2.03%
50 2.37% 2.55%
150 (kernel_size=40) 3.21% 2.72%

分析上表知:

  1. 不同window_size对结果有一定影响
  2. window_size比较大时,误差很大
  3. 在10左右,效果比较好,最终我们选择 window_size=6

(2)探究kernel_size的影响

调节CNN模型中kernel_size参数,并比较不同kernel_size下训练集与测试集的相对误差率,结果如下表所示(window_size=6):

Kernel_size 训练集相对误差率 测试集相对误差率
2 1.69% 1.48%
3 1.76% 1.58%
4 1.82% 1.94%
5 1.90% 1.73%

分析上表数据知较小的kernel_size能使相对误差率更小,最终我们选择kernel_size=2。

(3)探究探究模型结构的影响

调节CNN模型中模型结构,并比较不同模型结构下的平均误差和平均相对误差率,结果如下表所示:

模型结构 平均误差 平均相对误差率
两个卷积层 0.52 2.46%
1个卷积层,线性层100 0.46 2.29%
1个卷积层,线性层10 0.28 1.38%

由上表知,模型对学习率十分敏感;模型结构过于复杂,不容易学习,且容易过拟合。

(4) 模型拟合效果

通过以上探究得到的模型结构以及参数,以AAPL股票为例,采用原始数据进行训练,其预测结果如下图所示:

截屏2022-05-29 下午10.55.49

由上图知,以原始数据进行训练有不错的拟合效果,但滞后比较明显,神经网络会“偷懒”,这是因为数据序列中产生了变化趋势,而基于滑动时间窗口策略的对发生变化趋势的数据感知是滞后的。

对测试集进行预测:

截屏2022-05-29 下午10.34.21

四、数据处理

(1)数据变换

为了解决预测过程中出现的“滞后”问题,常常对原始数据进行一定的处理。常见的数据处理方法有:

  1. 数据归一化
  2. 不直接给出希望模型预测的未经处理的真实值,对输入样本进行非线性化的处理如,如:平方、开根号、ln等
  3. 差分,预测时间t和t-1处值的差异,而不是直接预测t时刻的值

如以AAPL股票数据为例,对其收盘价取其平方的对数进行训练,最终的预测效果如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值