Using a Keras Long ShortTerm Memory (LSTM) Model to Predict Stock Prices
LSTMs are very powerful in sequence prediction problems because they’re able to store past information. This is important in our case because the previous price of a stock is crucial in predicting its future price.
By Derrick Mwiti, Data Analyst
Editor’s note: This tutorial illustrates how to get started forecasting time series with LSTM models. Stock market data is a great choice for this because it’s quite regular and widely available to everyone. Please don’t take this as financial advice or use it to make any trades of your own.
In this tutorial, we’ll build a Python deep learning model that will predict the future behavior of stock prices. We assume that the reader is familiar with the concepts of deep learning in Python, especially Long ShortTerm Memory.
While predicting the actual price of a stock is an uphill climb, we can build a model that will predict whether the price will go up or down. The data and notebook used for this tutorial can be found here. It’s important to note that there are always other factors that affect the prices of stocks, such as the political atmosphere and the market. However, we won’t focus on those factors for this tutorial.
Introduction
LSTMs are very powerful in sequence prediction problems because they’re able to store past information. This is important in our case because the previous price of a stock is crucial in predicting its future price.
We’ll kick of by importing NumPy for scientific computation, Matplotlib for plotting graphs, and Pandas to aide in loading and manipulating our datasets.
Loading the Dataset
The next step is to load in our training dataset and select the Open
and High
columns that we’ll use in our modeling.
We check the head of our dataset to give us a glimpse into the kind of dataset we’re working with.
The Open
column is the starting price while the Close
column is the final price of a stock on a particular trading day. The High
and Low
columns represent the highest and lowest prices for a certain day.
Feature Scaling
From previous experience with deep learning models, we know that we have to scale our data for optimal performance. In our case, we’ll use Scikit Learn’s MinMaxScaler
and scale our dataset to numbers between zero and one.
Creating Data with Timesteps
LSTMs expect our data to be in a specific format, usually a 3D array. We start by creating data in 60 timesteps and converting it into an array using NumPy. Next, we convert the data into a 3D dimension array with X_train
samples, 60 timestamps, and one feature at each step.
Building the LSTM
In order to build the LSTM, we need to import a couple of modules from Keras:
Sequential
for initializing the neural networkDense
for adding a densely connected neural network layerLSTM
for adding the Long ShortTerm Memory layerDropout
for adding dropout layers that prevent overfitting
We add the LSTM layer and later add a few Dropout
layers to prevent overfitting. We add the LSTM layer with the following arguments:
 50 units which is the dimensionality of the output space
return_sequences=True
which determines whether to return the last output in the output sequence, or the full sequenceinput_shape
as the shape of our training set.
When defining the Dropout
layers, we specify 0.2, meaning that 20% of the layers will be dropped. Thereafter, we add the Dense
layer that specifies the output of 1 unit. After this, we compile our model using the popular adam optimizer and set the loss as the mean_squarred_error
. This will compute the mean of the squared errors. Next, we fit the model to run on 100 epochs with a batch size of 32. Keep in mind that, depending on the specs of your computer, this might take a few minutes to finish running.
Predicting Future Stock using the Test Set
First we need to import the test set that we’ll use to make our predictions on.
In order to predict future stock prices we need to do a couple of things after loading in the test set:
 Merge the training set and the test set on the 0 axis.
 Set the time step as 60 (as seen previously)
 Use
MinMaxScaler
to transform the new dataset  Reshape the dataset as done previously
After making the predictions we use inverse_transform
to get back the stock prices in normal readable format.
Plotting the Results
Finally, we use Matplotlib to visualize the result of the predicted stock price and the real stock price.
From the plot we can see that the real stock price went up while our model also predicted that the price of the stock will go up. This clearly shows how powerful LSTMs are for analyzing time series and sequential data.
Conclusion
There are a couple of other techniques of predicting stock prices such as moving averages, linear regression, KNearest Neighbours, ARIMA and Prophet. These are techniques that one can test on their own and compare their performance with the Keras LSTM. If you wish to learn more about Keras and deep learning you can find my articles on that here and here.
Discuss this post on Reddit and Hacker News.
Bio: Derrick Mwiti is a data analyst, a writer, and a mentor. He is driven by delivering great results in every task, and is a mentor at Lapid Leaders Africa.
Original. Reposted with permission.
Related:
 Introduction to Deep Learning with Keras
 Introduction to PyTorch for Deep Learning
 The Keras 4 Step Workflow
Top Stories Past 30 Days

