Quick Start Guide#

This page contains details of how you can build a simple model using NeuralProphet with minimal features.

Install#

NeuralProphet can be installed with pip:

$ pip install neuralprophet

If you plan to use the package in a Jupyter notebook, we recommend to install the ‘live’ version. This will allow you to enable progress='plot' in the train function to get a live plot of train (and validation) loss:

$ pip install neuralprophet[live]

Alternatively, you can get the most up to date version by cloning directly from GitHub <https://github.com/ourownstory/neural_prophet>_:

$ git clone https://github.com/ourownstory/neural_prophet.git
$ cd neural_prophet
$ pip install .

If you plan to use NeuralProphet in Google Colab, please use the following commands to avoid conflicts with pre-installed packages in Colab:

!pip uninstall -y torch notebook notebook_shim tensorflow tensorflow-datasets prophet torchaudio torchdata torchtext torchvision

!pip install neuralprophet
or
!pip install git+https://github.com/ourownstory/neural_prophet.git

Import#

Now you can use NeuralProphet in your code:

[1]:
from neuralprophet import NeuralProphet

Input Data#

The input data format expected by the neural_prophet package is the same as in original prophet. It should have two columns, ds which has the timestamps and y column which contains the observed values of the time series. Throughout this documentation, we will be using the time series data of the log daily page views for the Peyton Manning Wikipedia page. The data can be imported as follows.

[2]:
import pandas as pd

data_location = "https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"

df = pd.read_csv(data_location + "wp_log_peyton_manning.csv")
df.head()
[2]:
ds y
0 2007-12-10 9.5908
1 2007-12-11 8.5196
2 2007-12-12 8.1837
3 2007-12-13 8.0725
4 2007-12-14 7.8936

First Model#

A simple model with neural_prophet for this dataset can be fitted by creating an object of the NeuralProphet class as follows and calling the fit function. This fits a model with the default settings in the model. Note that the frequency of data is set globally here. Valid timeseries frequency settings are pandas timeseries offset aliases.

[3]:
m = NeuralProphet()
m.set_plotting_backend("plotly-static")  # show plots correctly in jupyter notebooks
metrics = m.fit(df)
WARNING - (NP.forecaster.fit) - When Global modeling with local normalization, metrics are displayed in normalized scale.
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Dataframe freq automatically defined as D
INFO - (NP.config.init_data_params) - Setting normalization to global as only one dataframe provided for training.
INFO - (NP.utils.set_auto_seasonalities) - Disabling daily seasonality. Run NeuralProphet with daily_seasonality=True to override this.
INFO - (NP.config.set_auto_batch_epoch) - Auto-set batch_size to 32
INFO - (NP.config.set_auto_batch_epoch) - Auto-set epochs to 141
WARNING - (NP.config.set_lr_finder_args) - Learning rate finder: The number of batches (93) is too small than the required number for the learning rate finder (237). The results might not be optimal.

Once the model is fitted, we can make predictions using the fitted model. Here we are predicting in-sample over our data to evaluate the model fit. We could do the same for a holdout set.

[ ]:
predicted = m.predict(df)
forecast = m.predict(df)
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Defined frequency is equal to major frequency - D
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Defined frequency is equal to major frequency - D
INFO - (NP.df_utils.return_df_in_original_format) - Returning df with no ID column
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Defined frequency is equal to major frequency - D
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Defined frequency is equal to major frequency - D
INFO - (NP.df_utils.return_df_in_original_format) - Returning df with no ID column

Plotting#

With the forecasts obtained from the model, you can visualize them.

[ ]:
m.plot(forecast)
_images/quickstart_9_0.svg

This is a simple model with a trend, a weekly seasonality and a yearly seasonality estimated by default. You can also look at the individual components separately as below.

[ ]:
m.plot_components(forecast)
_images/quickstart_11_0.svg

The individual coefficient values can also be plotted as below to gain further insights.

[ ]:
m.plot_parameters()
_images/quickstart_13_0.svg

Improved model#

The model can be improved by adding additional features such as auto-regression and uncertainty.

Here we add auto-regression terms and uncertainty to the model. The number of terms can be specified by the n_lags argument. Uncertainty intervals can be added by setting the quantiles argument.

[ ]:
m = NeuralProphet(n_lags=10, quantiles=[0.05, 0.95])
m.set_plotting_backend("plotly-static")
metrics = m.fit(df)
forecast = m.predict(df)
WARNING - (NP.forecaster.fit) - When Global modeling with local normalization, metrics are displayed in normalized scale.
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Dataframe freq automatically defined as D
INFO - (NP.config.init_data_params) - Setting normalization to global as only one dataframe provided for training.
INFO - (NP.utils.set_auto_seasonalities) - Disabling daily seasonality. Run NeuralProphet with daily_seasonality=True to override this.
INFO - (NP.config.set_auto_batch_epoch) - Auto-set batch_size to 32
INFO - (NP.config.set_auto_batch_epoch) - Auto-set epochs to 141
WARNING - (NP.config.set_lr_finder_args) - Learning rate finder: The number of batches (93) is too small than the required number for the learning rate finder (237). The results might not be optimal.
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Defined frequency is equal to major frequency - D
INFO - (NP.df_utils._infer_frequency) - Major frequency D corresponds to 99.966% of the data.
INFO - (NP.df_utils._infer_frequency) - Defined frequency is equal to major frequency - D
INFO - (NP.df_utils.return_df_in_original_format) - Returning df with no ID column

After specifiying tbe forecast step, we can plot the forecast.

[ ]:
m.highlight_nth_step_ahead_of_each_forecast(1).plot(forecast)
_images/quickstart_17_0.svg

Feel free to explore more features of NeuralProphet in our tutorials and how-to-guides.