## 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