Today, give a try to Techtonique web app, a tool designed to help you make informed, data-driven decisions using Mathematics, Statistics, Machine Learning, and Data Visualization
This post is about forecasting airline passenger numbers with quasi-randomized neural networks, and most specifically using nnetsauce
’s class MTS
. MTS
stands for ‘Multivariate Time Series’, but MTS
can also be used for univariate time series as shown in this post.
The data used here is the famous AirPassengers
dataset, a time series of monthly totals of international airline passengers from 1949 to 1960. AirPassengers
has a total number of 144 observations, an upward trend, and a seasonal component.
It also has a time-varying volatility, which makes it a bit more challenging and interesting to forecast.
0 - Install and load packages
Install nnetsauce
at the command line:
pip install nnetsauce --upgrade --no-cache-dir
Python code for loading the packages:
import nnetsauce as ns
import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge
1 - Load AirPassengers
data
url = "https://raw.githubusercontent.com/Techtonique/datasets/main/time_series/univariate/AirPassengers.csv"
df = pd.read_csv(url)
df.index = pd.DatetimeIndex(df.date)
df.drop(columns=['date'], inplace=True)
df.plot()
2 - Train a quasi-randomized neural network based on Ridge regression
The quasi-randomized neural network used here relies on a Ridge Regression model, and has 5 hidden nodes by default (that makes it a nonlinear model). The replications
parameter below is the number of predictive simulations. The kernel
parameter set to ‘gaussian’ means that a Gaussian kernel is used for simulating from the residuals’ density. The lags
parameter is set to 15, which means that the quasi-randomized neural network model is run on the 15 previous values of the time series to predict the next value.
regr = ns.MTS(obj=Ridge(),
replications=250,
kernel='gaussian',
lags=15)
regr.fit(df)
3 - Forecasting 40 steps ahead
regr.predict(h=40)
regr.plot(type_plot="pi")
regr.plot(type_plot="spaghetti")
The prediction interval is a bit narrow on this data set, but the model captures the trend, seasonality and time-varying volatility quite well. Do not hesitate to try the model on other time series data sets, and tune the hyperparameters of the model. Another example of univariate time series can be found in the link appearing at the top of this post. Other types of predictions intervals will be available in future versions of nnetsauce
.
Comments powered by Talkyard.