Time-Series Forecasting: Predicting Apple Stock Price Using An LSTM Model
Time-series & forecasting models
Traditionally most machine learning (ML) models use as input features some observations (samples / examples) but there is no time dimension in the data.
Time-series forecasting models are the models that are capable to predict future values based on previously observed values. Time-series forecasting is widely used for non-stationary data. Non-stationary data are called the data whose statistical properties e.g. the mean and standard deviation are not constant over time but instead, these metrics vary over time.
These non-stationary input data (used as input to these models) are usually called time-series. Some examples of time-series include the temperature values over time, stock price over time, price of a house over time etc. So, the input is a signal (time-series) that is defined by observations taken sequentially in time.
The LSTM model
Long short-term memory (LSTM) is an artificial recurrent neural network (RNN) architecture used in the field of deep learning. Unlike standard feedforward neural networks, LSTM has feedback connections. It can not only process single data points (e.g. images), but also entire sequences of data (such as speech or video inputs).
LSTM models are able to store information over a period of time.
Let’s start coding!
We are going to build a multi-layer LSTM recurrent neural network to predict the last value of a sequence of values i.e. the AAPL stock price in this example.
Modules needed: Keras, Tensorflow, Pandas, Scikit-Learn & Numpy
Let’s load the data and inspect them:
We’ll be taking last 20 years of EOD data of AAPL, the more the merrier.
I am using the AAPL dataset, which is already divided into training set and test set, but you can do the divison with a simple command!
training_set = df.iloc[:4780, 1:2].values
test_set = df.iloc[4780:, 1:2].values
Let’s visualise the dataset
The target value to be predicted is going to be the “Close” stock price value. Hence the following statement.
training_set = dataset_train.iloc[:, 1:2].values
It’s a good idea to normalize the data before model fitting. This will boost the performance.
Building the input variable
As an example for this article I used the model described above to predict closing price of AAPLstock for next trading day given data from last sixty trading day
We have now reshaped the data into the following format (#values, #time-steps, #1 dimensional output).
Now, it’s time to build the model. We will build the LSTM with 100 neurons and 5 hidden layers. Finally, we will assign 1 neuron in the output layer for predicting the normalized stock price. We will use the MSE loss function and the Adam stochastic gradient descent optimizer.
Getting the test data ready and making predictions
Visualising the results
We can clearly see that our model performed very good. It is able to accuretly follow most of the unexcepted jumps/drops however, for the most recent date stamps, we can see that the model expected (predicted) lower values compared to the real values of the stock price.
Disclaimer There have been attempts to predict stock prices using time series analysis algorithms, though they still cannot be used to place bets in the real market. This is just a tutorial article that does not intent in any way to “direct” people into buying stocks.
Till next time!