在金融市场中,股票价格的预测是一个复杂的问题,涉及到众多变量,包括物理因素与心理因素、理性与非理性行为等。这些因素的结合使得股票成本的预测变得不可预测,且难以以任何程度的确定性进行预测。那么,否可以利用人工智能(AI)在这一领域中获得优势呢?AI方法可能会揭示之前未曾见过的案例和洞见,这些可以用来做出精确的预测,使用诸如组织的最新声明、他们的季度收入数字等功能。
在本报告中,将使用与一个公开记录的组织的股票成本相关的公开信息。将使用一系列AI计算来预测这家公司未来的股价,使用长短期记忆网络(LSTM)。本文的主要目的是展示这些计算是如何进行的。此外,在本文中,将讨论如何通过LSTM预测数据。将提供流程的快速概述,并在需要时回顾关键概念。如果是时间管理领域的新手,建议从下面的文章开始。
本文作为数据科学博客马拉松的一部分发表。为什么需要时间序列模型?时间序列模型主要用于趋势分析和未来预测。识别趋势:时间序列中的数据点是在特定时间间隔内收集的。通过研究这些数据,可以找到数据中的重复模式和趋势。这对于确定销售数字的影响因素或医院患者等待时间如何在整个一天中变化等事情是有帮助的。未来预测:使用历史数据,时间序列模型可以用来预测未来的值。这在许多行业中都是有用的。例如,时间序列模型可以被企业用来预测产品需求,这可以帮助库存控制。同样,时间序列模型被气象学家用来预测天气趋势。
苹果的数据更新至2020年5月22日。让以收盘价为股票预测的依据。可以使用相同的策略。应该重置索引,以便数据清晰。
df1 = df.reset_index()['close']
让使用pyplot绘制2015-2020年的收盘价图表。现在进入解决方案:
LSTM对数据的规模非常敏感,这里的收盘价规模是某种规模,总是尝试转换这个值。这里将使用最小-最大标量将值从0转换到1。应该重塑数据,以便可以使用拟合转换。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0,1))
df1 = scaler.fit_transform(np.array(df1).reshape(-1,1))
在训练时间序列数据时,应该以不同的方式划分数据,应该用相应的日期训练数据。请记住,在时间序列数据中,一个数据依赖于其他数据。训练大小应该是整个数据框架长度的65%,测试大小应该是数据集长度和训练大小之间的差值。
training_size = int(len(df1) * 0.65)
test_size = len(df1) - training_size
train_data, test_data = df1[0:training_size,:], df1[training_size:len(df1),:1]
训练数据和测试数据已经准备好了。
现在考虑时间步长,如果想预测一天的股价,应该如何考虑之前的数据。现在时间步长值将是100。让将数据X, Y分开。在第0次迭代中,前100个元素作为第一份记录,第101个元素将放入X中。前100个元素将放入Y中。
import numpy
def create_dataset(dataset, time_step=1):
dataX, dataY = [], []
for i in range(len(dataset) - time_step - 1):
a = dataset[i:(i + time_step), 0]
dataX.append(a)
dataY.append(dataset[i + time_step, 0])
return numpy.array(dataX), numpy.array(dataY)
time_step = 100
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)
LSTM被广泛用于序列预测问题,并且已被证明极其有效。它们之所以如此有效,是因为LSTM可以存储过去的信息,并忘记模型不再需要的信息。LSTM有三个门:
输入门:输入门向单元状态添加信息,遗忘门:它移除模型不再需要的信息,输出门:LSTM的输出门选择要显示为输出的信息。在实现任何LSTM时,总是需要将X训练重塑为3D,增加1的原因是时间步长和1是给LSTM的。
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
然后导入所需的堆叠LSTM模块。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
将使用一个顺序模型,并添加上述句子中提到的LSTM层。第一层应该是时间步长在1。
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(100,1)))
model.add(LSTM(50, return_sequences=True))
model.add(LSTM(50))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
让看看摘要。现在最后一部分是拟合X_train和y_train。
train_predict = model.predict(X_train)
test_predict = model.predict(X_test)
train_predict = scaler.inverse_transform(train_predict)
test_predict = scaler.inverse_transform(test_predict)
现在让看看均方误差。
import math
from sklearn.metrics import mean_squared_error
math.sqrt(mean_squared_error(y_train, train_predict))
这里的时间段是100,无论train_predict和test_predict中的值如何。只是在绘制它时,不要忘记需要逆转标量变换。绿色表示预测数据,蓝色表示完整数据,橙色表示训练数据。如果考虑到测试数据中的最后一天是2020年5月22日,想预测2020年5月23日的输出。需要前100个数据,所以正在取数据并重塑它。
x_input = test_data[341:].reshape(1, -1)
x_input.shape
因此,可以使用这种策略预测首选股票的价格。
可以用来创建交易策略的一种递归神经网络(RNN)是长短期记忆(LSTM)网络。这是如何使用LSTM在这种情况下的解释:
想法:由于LSTM擅长处理序列数据,它们可以用来分析历史财务数据,包括交易量、开盘和收盘价以及技术指标。模型试图通过检查这些序列来识别趋势并预测未来的价格变动。