import numpy as np import pandas as pd import os from statsmodels.tsa.statespace.sarimax import SARIMAX from statsmodels.graphics.tsaplots import plot_acf,plot_pacf from statsmodels.tsa.seasonal import seasonal_decompose #from pmdarima import auto_arima from sklearn.metrics import mean_squared_error from statsmodels.tools.eval_measures import rmse import warnings warnings.filterwarnings("ignore") import matplotlib.pyplot as plt %matplotlib inline
In this article we will try to forecast a time series data basically. We'll build three different model with Python and inspect their results. Models we will use are ARIMA (Autoregressive Integrated Moving Average), LSTM (Long Short Term Memory Neural Network) and Facebook Prophet. Let's jump in and start with ARIMA.
ARIMA is a model which is used for predicting future trends on a time series data. It is model that form of regression analysis.
For ARIMA models, a standard notation would be ARIMA with p, d, and q, where integer values substitute for the parameters to indicate the type of ARIMA model used.
LSTM stands for long short term memory. It is a model or architecture that extends the memory of recurrent neural networks. Typically, recurrent neural networks have ‘short term memory’ in that they use persistent previous information to be used in the current neural network. Essentially, the previous information is used in the present task. That means we do not have a list of all of the previous information available for the neural node. LSTM introduces long-term memory into recurrent neural networks. It mitigates the vanishing gradient problem, which is where the neural network stops learning because the updates to the various weights within a given neural network become smaller and smaller. It does this by using a series of ‘gates’. These are contained in memory blocks which are connected through layers, like this:
arima_pred = arima_result.predict(start = len(train_data), end = len(df)-1, typ="levels").rename("ARIMA Predictions") arima_pred
1994-09-01 133.943955 1994-10-01 157.814451 1994-11-01 181.865146 1994-12-01 183.541331 1995-01-01 144.902539 1995-02-01 136.857294 1995-03-01 151.136283 1995-04-01 133.214691 1995-05-01 137.923012 1995-06-01 120.564847 1995-07-01 128.439705 1995-08-01 138.819035 Freq: MS, Name: ARIMA Predictions, dtype: float64
test_data['Monthly beer production'].plot(figsize = (16,5), legend=True) arima_pred.plot(legend = True);