预测股市将如何变化历来是最困难的事情之一。这个预测行为中包含着如此之多的因素—包括物理或心理因素、理性或者不理性行为因素等等。所有这些因素结合在一起,使得股价波动剧烈,很难准确预测。
使用机器学习可能改变游戏规则吗?机器学习技术使用最新的组织公告、季度收益等作为特征,有潜力挖掘出我们以前没有见过的模式和见解,并可用于准确无误的预测。
在本文中,我们将研究上市公司股价的历史数据。我们将使用LSTM深度学习算法来预测这家公司的未来股价。
问题理解
我们将很快深入本文的实现部分,但首先重要的是确定我们要解决的问题。一般来说,股票市场分析分为两个部分——基本面分析和技术分析。
基本面分析是根据公司目前的经营环境和财务状况,对公司未来的盈利能力进行分析。
技术分析包括阅读图表和使用统计数字来确定股票市场的趋势。
您可能已经猜到,我们的重点将放在技术分析部分。我们将使用来自Quandl的数据集(您可以在这里找到各种股票的历史数据),这个项目中,我使用了“塔塔全球饮料”的数据。
首先让我们加载数据集,定义问题的目标变量:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 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.csv')
# print the head
df.head()
print(df)
数据集中有多个变量——日期(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