独家 | 利用深度学习和机器学习预测股票市场(附代码)

本文详述如何运用深度学习和机器学习算法,如移动平均、线性回归、k-近邻、自动ARIMA、先知(Prophet)和LSTM,来预测股票市场。通过对历史数据的分析,探讨不同模型在股票价格预测中的表现,指出LSTM模型在减少RMSE方面表现出色,但股票价格受多种复杂因素影响,模型预测仍有限度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=png

来源:AISHWARYA SINGH, 2018年10月25日

翻译:赵雪尧

校对:车前子

本文约8000字,建议阅读15+分钟。

本文介绍了如何运用深度学习法预测股票市场。


简介


预测股市将如何变化历来是最困难的事情之一。这个预测行为中包含着如此之多的因素—包括物理或心理因素、理性或者不理性行为因素等等。所有这些因素结合在一起,使得股价波动剧烈,很难准确预测。

 

使用机器学习可能改变游戏规则吗?机器学习技术使用最新的组织公告、季度收益等作为特征,有潜力挖掘出我们以前没有见过的模式和见解,并可用于准确无误的预测。


640?wx_fmt=png


在本文中,我们将研究上市公司股价的历史数据。我们将结合机器学习算法来预测这家公司的未来股价,从平均和线性回归这样的简单算法开始,然后转向像Auto ARIMA和LSTM这样的高级模型。

 

本文背后的核心思想是展示这些算法是如何实现的,因此我只会简单描述该技术并提供相关参考链接,以便在必要时对这些概念进行复习。如果您是时间序列领域的新手,我建议您先阅读以下文章:


  • 创建时间序列预测的初学者综合指南

  • 时间序列建模的完整教程


目录


1、 问题理解

2、 移动平均

3、 线性回归

4、 K-近邻

5、 自动ARIMA

6、 先知(Prophet)

7、 长短时记忆网络(LSTM)

 

1、问题理解


我们将很快深入本文的实现部分,但首先重要的是确定我们要解决的问题。一般来说,股票市场分析分为两个部分——基本面分析和技术分析。


  • 基本面分析是根据公司目前的经营环境和财务状况,对公司未来的盈利能力进行分析。

  • 技术分析包括阅读图表和使用统计数字来确定股票市场的趋势。


您可能已经猜到,我们的重点将放在技术分析部分。我们将使用来自Quandl的数据集(您可以在这里找到各种股票的历史数据),这个项目中,我使用了“塔塔全球饮料”的数据。是时候开始了!


首先让我们加载数据集,定义问题的目标变量:


#import packages

import pandas as pd

import numpy as np

 

#to plot within notebook

import matplotlib.pyplot as plt

%matplotlib inline

 

#setting figure size

from matplotlib.pylab import rcParams

rcParams['figure.figsize'] = 20,10

 

#for normalizing data

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0, 1))

 

#read the file

df = pd.read_csv('NSE-TATAGLOBAL(1).csv')

 

#print the head

df.head()


640?wx_fmt=png


数据集中有多个变量——日期(date)、开盘价(open)、最高价(high)、最低价(low)、最后交易价(last)、收盘价(close)、总交易额(total_trade_quantity)和营业额(turnover)。

 

  • 开盘价和收盘价代表股票在某一天交易的起始价和最终价。

  • 最高价、最低价和最后交易价表示当天股票的最高价、最低价和最后交易价格。

  • 交易总量是指当天买卖的股票数量,而营业额(Lacs)是指某一特定公司在某一特定日期的营业额。


要注意的另一点是,市场在周末和公共假期休市。注意上表缺失了一些日期值——2/10/2018、6/10/2018、7/10/2018。其中2号是国庆节,6号和7号是周末。

 

损益的计算通常由股票当日的收盘价决定,因此我们将收盘价作为目标变量。让我们画出目标变量来理解它在我们的数据集中的分布:


#setting index as date

df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')

df.index = df['Date']

 

#plot

plt.figure(figsize=(16,8))

plt.plot(df['Close'], label='Close Price history')


640?wx_fmt=png


在接下来的部分中,我们将探索这些变量,并使用不同的技术来预测股票的每日收盘价。

 

2、移动平均


简介


“平均数”是我们日常生活中最常用的统计量之一。例如,计算平均分数来确定整体表现,或者根据过去几天的平均温度来了解今天的温度——这些都是我们经常做的日常工作。因此,使用这个方法开始用数据集进行预测是个不错的选择。

 

我们利用一组先前观测值的平均值作为每天的预期收盘价。我们将使用移动平均法,而不是使用简单的平均值,移动平均法使用最近的一组数据计算预测值。换句话说,对于后续的每个新的时间,在考虑预测值时,将从集合中删除最早的观测值,并加入上一个观测值。下面是一个简单的图,它将帮助您更清楚地理解这一点。


640?wx_fmt=png


我们将在数据集上使用这种技术。第一步是创建一个只包含日期和收盘价列的数据框,然后将其拆分为训练集和验证集来验证我们的预测。


实现


#creating dataframe with date and the target variable

data = df.sort_index(ascending=True, axis=0)

new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

 

for i in range(0,len(data)):

     new_data['Date'][i] = data['Date'][i]

     new_data['Close'][i] = data['Close'][i]


在将数据分割为训练和验证时,我们不能使用随机分割,因为这会破坏时间顺序。所以这里我将去年的数据作为验证集,将之前4年的数据作为训练集。


#splitting into train and validation

train = new_data[:987]

valid = new_data[987:]

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值