Python Tensorflow Keras

Time Series Forecasting using Tensorflow Keras

Recurrent Neural Network (RNN) model has been very useful to predict time series data.. Training on Tensorflow Keras is a great platform to implement RNN as the learning curve is less steep as compared to other platforms eg Training on Pytorch. In this article, we will demonstrate how to apply the LSTM model with Tensorflow Keras to model time series. We will use Airline passengers data as example..

The LSTM model for the stock price is shown below

model = Sequential()
model.add(LSTM(hidden_size, activation='tanh',input_shape=(timesteps,feature)))
model.add(Dense(1,activation='linear'))

model.compile(loss='mse', optimizer='adam')
history = model.fit(trainX, trainY, epochs=1000)

To form the data, we can define a sliding window to scan the training data

def sliding_window(data, seq_length):
    x = []
    y = []

    for i in range(len(data)-seq_length-1):
        _x = data[i:(i+seq_length)]
        _y = data[i+seq_length]
        x.append(_x)
        y.append(_y)

    return np.array(x),np.array(y)

To test the model, we can split the time series data into training and. testing set

sc = MinMaxScaler()
dataset = sc.fit_transform(dataset)

timesteps = 4
X,y = sliding_window(dataset, timesteps)

train_size = int(len(y) * 0.67)
test_size = int(len(y)) - train_size

X_train = X[0:train_size]
y_train = y[0:train_size]

X_test = X[train_size:len(x)]
y_test = y[train_size:len(y)]

feature = 1
hidden_size = 5

# inputs: A 3D tensor with shape [batch, timesteps, feature].
X_train = np.reshape(X_train, (X_train.shape[0], timesteps, input_size))
X_test = np.reshape(X_test, (X_test.shape[0], timesteps, 1, input_size))

We can plot the actual and predicted stock prices using scikit learn and matplotlib libraries

loss = history.history['loss']
epoch = range(len(loss))

import matplotlib.pyplot as plt

plt.plot(epoch,loss)
plt.xlabel('Epoch')
plt.ylabel('Loss]')
plt.show()
yhat = model(X)

yhat = sc.inverse_transform(yhat)
y_ = sc.inverse_transform(y)

plt.axvline(x=train_size, c='g', linestyle='--')

plt.plot(y_,'b',label='actual')
plt.plot(yhat,'r',label='prediction')
plt.xlabel('Month')
plt.ylabel('Airline Passengers')
plt.legend()
plt.show()

The result shows that LSTM model is extremely good in predicting the time series

References:

Relevant Courses

July 22, 2021