# About NeuralForecast

**NeuralForecast** offers a large collection of neural forecasting models focused on their usability, and robustness. The models range from classic networks like `MLP`

, `RNN`

s to novel proven contributions like `NBEATS`

, `NHITS`

, `TFT`

and other architectures.

## 🎊 Features

**Exogenous Variables**: Static, historic and future exogenous support.**Forecast Interpretability**: Plot trend, seasonality and exogenous`NBEATS`

,`NHITS`

,`TFT`

,`ESRNN`

prediction components.**Probabilistic Forecasting**: Simple model adapters for quantile losses and parametric distributions.**Train and Evaluation Losses**Scale-dependent, percentage and scale independent errors, and parametric likelihoods.**Automatic Model Selection**Parallelized automatic hyperparameter tuning, that efficiently searches best validation configuration.**Simple Interface**Unified SKLearn Interface for`StatsForecast`

and`MLForecast`

compatibility.**Model Collection**: Out of the box implementation of`MLP`

,`LSTM`

,`RNN`

,`TCN`

,`DilatedRNN`

,`NBEATS`

,`NHITS`

,`ESRNN`

,`Informer`

,`TFT`

,`PatchTST`

,`VanillaTransformer`

,`StemGNN`

and`HINT`

. See the entire collection here.

## Why?

There is a shared belief in Neural forecasting methods’ capacity to improve our pipeline’s accuracy and efficiency.

Unfortunately, available implementations and published research are yet
to realize neural networks’ potential. They are hard to use and
continuously fail to improve over statistical methods while being
computationally prohibitive. For this reason, we created
`NeuralForecast`

,
a library favoring proven accurate and efficient models focusing on
their usability.

## 💻 Installation

### PyPI

You can install
`NeuralForecast`

’s
*released version* from the Python package index
pip with:

```
pip install neuralforecast
```

(Installing inside a python virtualenvironment or a conda environment is recommended.)

### Conda

Also you can install
`NeuralForecast`

’s
*released version* from
conda with:

```
conda install -c conda-forge neuralforecast
```

(Installing inside a python virtualenvironment or a conda environment is recommended.)

### Dev Mode

If you want to make some modifications to the code and see the effects in real time (without reinstalling), follow the steps below:

```
git clone https://github.com/Nixtla/neuralforecast.git
cd neuralforecast
pip install -e .
```

## How to Use

```
import numpy as np
import pandas as pd
from IPython.display import display, Markdown
import matplotlib.pyplot as plt
from neuralforecast import NeuralForecast
from neuralforecast.models import NBEATS, NHITS
from neuralforecast.utils import AirPassengersDF
# Split data and declare panel dataset
Y_df = AirPassengersDF
Y_train_df = Y_df[Y_df.ds<='1959-12-31'] # 132 train
Y_test_df = Y_df[Y_df.ds>'1959-12-31'] # 12 test
# Fit and predict with NBEATS and NHITS models
horizon = len(Y_test_df)
models = [NBEATS(input_size=2 * horizon, h=horizon, max_steps=50),
NHITS(input_size=2 * horizon, h=horizon, max_steps=50)]
nf = NeuralForecast(models=models, freq='M')
nf.fit(df=Y_train_df)
Y_hat_df = nf.predict().reset_index()
# Plot predictions
fig, ax = plt.subplots(1, 1, figsize = (20, 7))
Y_hat_df = Y_test_df.merge(Y_hat_df, how='left', on=['unique_id', 'ds'])
plot_df = pd.concat([Y_train_df, Y_hat_df]).set_index('ds')
plot_df[['y', 'NBEATS', 'NHITS']].plot(ax=ax, linewidth=2)
ax.set_title('AirPassengers Forecast', fontsize=22)
ax.set_ylabel('Monthly Passengers', fontsize=20)
ax.set_xlabel('Timestamp [t]', fontsize=20)
ax.legend(prop={'size': 15})
ax.grid()
```

## 🙏 How to Cite

If you enjoy or benefit from using these Python implementations, a citation to the repository will be greatly appreciated.

```
@misc{olivares2022library_neuralforecast,
author={Kin G. Olivares and
Cristian Challú and
Federico Garza and
Max Mergenthaler Canseco and
Artur Dubrawski},
title = {{NeuralForecast}: User friendly state-of-the-art neural forecasting models.},
year={2022},
howpublished={{PyCon} Salt Lake City, Utah, US 2022},
url={https://github.com/Nixtla/neuralforecast}
}
```