darts is a Python library for easy manipulation and forecasting of time series.
It contains a variety of models, from classics such as ARIMA to deep neural networks.
The models can all be used in the same way, using fit() and predict() functions,
similar to scikit-learn. The library also makes it easy to backtest models,
and combine the predictions of several models and external regressors. Darts supports both
univariate and multivariate time series and models. The neural networks can be trained
on multiple time series, and some of the models offer probabilistic forecasts.
Examples & Tutorials
Introductory Blog Post
We recommend to first setup a clean Python environment for your project with at least Python 3.7 using your favorite tool (conda, venv, virtualenv with or without virtualenvwrapper).
Once your environment is set up you can install darts using pip:
pip install darts
For more detailed install instructions you can refer to our installation guide at the end of this page.
Create a TimeSeries object from a Pandas DataFrame, and split it in train/validation series:
import pandas as pd
from darts import TimeSeries
# Read a pandas DataFrame
df = pd.read_csv('AirPassengers.csv', delimiter=",")
# Create a TimeSeries, specifying the time and value columns
series = TimeSeries.from_dataframe(df, 'Month', '#Passengers')
# Set aside the last 36 months as a validation series
train, val = series[:-36], series[-36:]
Fit an exponential smoothing model, and make a (probabilistic) prediction over the validation series’ duration:
from darts.models import ExponentialSmoothing
model = ExponentialSmoothing()
prediction = model.predict(len(val), num_samples=1000)
Plot the median, 5th and 95th percentiles:
import matplotlib.pyplot as plt
prediction.plot(label='forecast', low_quantile=0.05, high_quantile=0.95)
We invite you to go over the example and tutorial notebooks in
the examples directory.
Currently, the library contains the following features:
Forecasting Models: A large collection of forecasting models; from statistical models (such as
ARIMA) to deep learning models (such as N-BEATS). See table of models below.
Data processing: Tools to easily apply (and revert) common transformations on time series data (scaling, boxcox, …)
Metrics: A variety of metrics for evaluating time series’ goodness of fit;
from R2-scores to Mean Absolute Scaled Error.
Backtesting: Utilities for simulating historical forecasts, using moving time windows.
Regressive Models: Possibility to predict a time series from lagged versions of itself
and of some external covariate series, using arbitrary regression models (e.g. scikit-learn models)
Multivariate Support: Tools to create, manipulate and forecast multivariate time series.
Probabilistic Support: TimeSeries objects can (optionally) represent stochastic
time series; this can for instance be used to get confidence intervals.
Filtering Models: Darts offers three filtering models: KalmanFilter, GaussianProcessFilter,
and MovingAverage, which allow to filter time series, and in some cases obtain probabilistic
inferences of the underlying states/values.
Here’s a breakdown of the forecasting models currently implemented in Darts. We are constantly working
on bringing more models and features.
Past-observed covariates support
Future-known covariates support
Theta and FourTheta
FFT (Fast Fourier Transform)
Regression Models (incl RandomForest and LinearRegressionModel)
RNNModel (incl. LSTM and GRU); equivalent to DeepAR in its probabilistic version
BlockRNNModel (incl. LSTM and GRU)
( x )
The development is ongoing, and there are many new features that we want to add.
We welcome pull requests and issues on GitHub.
Before working on a contribution (a new feature or a fix), **check our contribution guidelines**.
If what you want to tell us is not a suitable github issue, feel free to send us an email at email@example.com for darts related matters or firstname.lastname@example.org for any other inquiries.
Some of the models depend on prophet and torch, which have non-Python dependencies.
A Conda environment is thus recommended because it will handle all of those in one go.
The following steps assume running inside a conda environment.
If that’s not possible, first follow the official instructions to install
and torch, then skip to
To create a conda environment for Python 3.7
(after installing conda):
conda create --name <env-name> python=3.7
Don’t forget to activate your virtual environment
conda activate <env-name>
conda install -c conda-forge -c pytorch pip prophet pytorch
conda install -c conda-forge -c pytorch pip prophet pytorch cpuonly
Install Darts with all available models: pip install darts.
pip install darts
As some models have relatively heavy (or non-Python) dependencies,
we also maintain the u8darts package, which provides the following alternate lighter install options:
Install core only (without neural networks, Prophet or AutoARIMA): pip install u8darts
pip install u8darts
Install core + neural networks (PyTorch): pip install 'u8darts[torch]'
pip install 'u8darts[torch]'
Install core + Facebook Prophet: pip install 'u8darts[prophet]'
pip install 'u8darts[prophet]'
Install core + AutoARIMA: pip install 'u8darts[pmdarima]'
pip install 'u8darts[pmdarima]'
If the conda setup is causing too many problems, we also provide a Docker image with everything set up for you and ready-to-use Python notebooks with demo examples.
To run the example notebooks without installing our libraries natively on your machine, you can use our Docker image:
./gradlew docker && ./gradlew dockerRun
Then copy and paste the URL provided by the docker container into your browser to access Jupyter notebook.
For this setup to work you need to have a Docker service installed. You can get it at Docker website.
The gradle setup works best when used in a python environment, but the only requirement is to have pip installed for Python 3+
To run all tests at once just run
alternatively you can run
./gradlew unitTest_all # to run only unittests
./gradlew coverageTest # to run coverage
./gradlew lint # to run linter
To run the tests for specific flavours of the library, replace _all with _core, _prophet, _pmdarima or _torch.
To build documantation locally just run
After that docs will be available in ./docs/build/html directory. You can just open ./docs/build/html/index.html using your favourite browser.