Darts is still in an early development phase and we cannot always guarantee backwards compatibility. Changes that may break code which uses a previous release of Darts are marked with a "🔴".
Improved
- Option to avoid global matplotlib configuration changes. #924 by Mike Richman.
0.19.0 (2022-04-13)
Improved
- New model:
NHiTS
implementing the N-HiTS model. #898 by Julien Herzen. - New model:
StatsForecastAutoARIMA
implementing the (faster) AutoARIMA version of statsforecast. #893 by Julien Herzen. - New model:
Croston
method. #893 by Julien Herzen. - Better way to represent stochastic
TimeSeries
from distributions specified by quantiles. #899 by Gian Wiher. - Better sampling of trajectories for stochastic
RegressionModel
s. #899 by Gian Wiher. - Improved user guide with more sections. #905 by Julien Herzen.
- New notebook showcasing transfer learning and training forecasting models on large time series datasets. #885 by Julien Herzen.
Fixed
- Some issues with PyTorch Lightning >= 1.6.0 #888 by Julien Herzen.
0.18.0 (2022-03-22)
Improved
LinearRegressionModel
andLightGBMModel
can now be probabilistic, supporting quantile and poisson regression. #831, #853 by Gian Wiher.- New models:
BATS
andTBATS
, based on tbats. #816 by Julien Herzen. - Handling of stochastic inputs in PyTorch based models. #833 by Julien Herzen.
- GPU and TPU user guide. #826 by @gsamaras.
- Added train and validation loss to PyTorch Lightning progress bar. #825 by Dennis Bader.
- More losses available in
darts.utils.losses
for PyTorch-based models:SmapeLoss
,MapeLoss
andMAELoss
. #845 by Julien Herzen. - Improvement to the seasonal decomposition #862. by Gian Wiher.
- The
gridsearch()
method can now return best metric score. #822 by @nlhkh. - Removed needless checkpoint loading when predicting. #821 by Dennis Bader.
- Changed default number of epochs for validation from 10 to 1. #825 by Dennis Bader.
Fixed
- Fixed some issues with encoders in
fit_from_dataset()
. #829 by Julien Herzen. - Fixed an issue with covariates slicing for
DualCovariatesForecastingModels
. #858 by Dennis Bader.
0.17.1 (2022-02-17)
Patch release
Fixed
- Fixed issues with (now deprecated)
torch_device_str
parameter, and improved documentation related to using devices with PyTorch Lightning. #806 by Dennis Bader. - Fixed an issue with
ReduceLROnPlateau
. #806 by Dennis Bader. - Fixed an issue with the periodic basis functions of N-BEATS. #804 by Vladimir Chernykh.
- Relaxed requirements for
pandas
; frompandas>=1.1.0
topandas>=1.0.5
. #800 by @adelnick.
0.17.0 (2022-02-15)
Improved
- 🚀 Support for PyTorch Lightning: All deep learning models are now implemented using PyTorch Lightning. This means that many more features are now available via PyTorch Lightning trainers functionalities; such as tailored callbacks, or multi-GPU training. #702 by Dennis Bader.
- The
RegressionModel
s now accept anoutput_chunk_length
parameter; meaning that they can be trained to predict more than one time step in advance (and used auto-regressively to predict on longer horizons). #761 by Dustin Brunner. - 🔴
TimeSeries
"simple statistics" methods (such asmean()
,max()
,min()
etc, ...) have been refactored to work natively on stochasticTimeSeries
, and over configurable axes. #773 by Gian Wiher. - 🔴
TimeSeries
now support only pandasRangeIndex
as an integer index, and does not supportInt64Index
anymore, as it became deprecated with pandas 1.4.0. This also now brings the guarantee thatTimeSeries
do not have missing "dates" even when indexed with integers. #777 by Julien Herzen. - New model:
KalmanForecaster
is a new probabilistic model, working on multivariate series, accepting future covariates, and which works by running the state-space model of a given Kalman filter into the future. Thefit()
function uses the N4SID algorithm for system identification. #743 by Julien Herzen. - The
KalmanFilter
now also works onTimeSeries
containing missing values. #743 by Julien Herzen. - The estimators (forecasting and filtering models) now also return their own instance when calling
fit()
, which allows chaining calls. #741 by Julien Herzen.
Fixed
- Fixed an issue with tensorboard and gridsearch when
model_name
is provided. #759 by @gdevos010. - Fixed issues with pip-tools. #762 by Tomas Van Pottelbergh.
- Some linting checks have been added to the CI pipeline. #749 by Tomas Van Pottelbergh.
0.16.1 (2022-01-24)
Patch release
- Fixed an incompatibility with latest version of Pandas (#752) by Julien Herzen.
- Fixed non contiguous error when using lstm_layers > 1 on GPU. (#740) by Dennis Bader.
- Small improvement in type annotations in API documentation (#744) by Dustin Brunner.
- Added flake8 tests to CI pipelines (#749, #748, #745) by Tomas Van Pottelbergh and Dennis Bader.
0.16.0 (2022-01-13)
Improved
- The documentation page has been revamped and now contains a brand new Quickstart guide, as well as a User Guide section, which will be populated over time.
- The API documentation has been revamped and improved,
notably using
numpydoc
. - The datasets building procedure has been improved in
RegressionModel
, which yields dramatic speed improvements.
Added
- The
KalmanFilter
can now do system identification usingfit()
(using nfoursid).
Fixed
- Catch a potentially problematic case in ensemble models.
- Fixed support for
ReduceLROnPlateau
scheduler.
- We have switched to black for code formatting (this is checked by the CI pipeline).
0.15.0 (2021-12-24)
Added:
-
On-the-fly encoding of position and calendar information in Torch-based models. Torch-based models now accept an option
add_encoders
parameter, specifying how to use certain calendar and position information as past and/or future covariates on the-fly.Example:
from darts.dataprocessing.transformers import Scaler add_encoders={ 'cyclic': {'future': ['month']}, 'datetime_attribute': {'past': ['hour', 'dayofweek']}, 'position': {'past': ['absolute'], 'future': ['relative']}, 'custom': {'past': [lambda idx: (idx.year - 1950) / 50]}, 'transformer': Scaler() }
This will add a cyclic encoding of the month as future covariates, add some datetime attributes as past and future covariates, an absolute/relative position (index), and even some custom mapping of the index (such as a function of the year). A
Scaler
will be applied to fit/transform all of these covariates both during training and inference. -
The scalers can now also be applied on stochastic
TimeSeries
. -
There is now a new argument
max_samples_per_ts
to the :func:fit()
method of Torch-based models, which can be used to limit the number of samples contained in the underlying training dataset, by taking (at most) the most recentmax_samples_per_ts
training samples per time series. -
All local forecasting models that support covariates (Prophet, ARIMA, VARIMA, AutoARIMA) now handle covariate slicing themselves; this means that you don't need to make sure your covariates have the exact right time span. As long as they contain the right time span, the models will slice them for you.
-
TimeSeries.map()
and mappers data transformers now work on stochasticTimeSeries
. -
Granger causality function:
utils.statistics.granger_causality_tests
can test if one univariateTimeSeries
"granger causes" another. -
New stationarity tests for univariate
TimeSeries
:darts.utils.statistics.stationarity_tests
,darts.utils.statistics.stationarity_test_adf
anddarts.utils.statistics.stationarity_test_kpss
. -
New test coverage badge 🦄
Fixed:
- Fixed various issues in different notebooks.
- Fixed a bug handling frequencies in Prophet model.
- Fixed an issue causing
PastCovariatesTorchModels
(such asNBEATSModel
) prediction to fail whenn > output_chunk_length
ANDn
not being a multiple ofoutput_chunk_length
. - Fixed an issue in backtesting which was causing untrained models
not to be trained on the initial window when
retrain=False
. - Fixed an issue causing
residuals()
to fail for Torch-based models.
- Updated the contribution guidelines
- The unit tests have been re-organised with submodules following that of the library.
- All relative import paths have been removed and replaced by absolute paths.
- pytest and pytest-cov are now used to run tests and compute coverage.
0.14.0 (2021-11-28)
Added:
- Probabilistic N-BEATS: The
NBEATSModel
can now produce probabilistic forecasts, in a similar way as all the other deep learning models in Darts (specifying alikelihood
and predicting withnum_samples
>> 1). - We have improved the speed of the data loaing functionalities for PyTorch-based models. This should speedup training, typically by a few percents.
- Added
num_loader_workers
parameters tofit()
andpredict()
methods of PyTorch-based models, in order to control thenum_workers
of PyTorch DataLoaders. This can sometimes result in drastic speedups. - New method
TimeSeries.astype()
which allows to easily case (e.g. betweennp.float64
andnp.float32
). - Added
dtype
as an option to the time series generation modules. - Added a small performance guide for PyTorch-based models.
- Possibility to specify a (relative) time index to be used as future covariates in the TFT Model. Future covariates don't have to be specified when this is used.
- New TFT example notebook.
- Less strict dependencies: we have loosened the required dependencies versions.
Fixed:
- A small fix on the Temporal Fusion Transformer
TFTModel
, which should improve performance. - A small fix in the random state of some unit tests.
- Fixed a typo in Transformer example notebook.
0.13.1 (2021-11-08)
Added:
- Factory methods in
TimeSeries
are nowclassmethods
, which makes inheritance ofTimeSeries
more convenient.
Fixed:
- An issue which was causing some of the flavours installations not to work
0.13.0 (2021-11-07)
Added:
- New forecasting model: Temporal Fusion Transformer (
TFTModel
). A new deep learning model supporting both past and future covariates. - Improved support for Facebook Prophet model (
Prophet
):- Added support for fit & predict with future covariates. For instance:
model.fit(train, future_covariates=train_covariates)
andmodel.predict(n=len(test), num_sample=1, future_covariates=test_covariates)
- Added stochastic forecasting, for instance:
model.predict(n=len(test), num_samples=200)
- Added user-defined seasonalities either at model creation with kwarg
add_seasonality
(Prophet(add_seasonality=kwargs_dict)
) or pre-fit withmodel.add_seasonality(kwargs)
. For more information on how to add seasonalities, see the Prophet docs. - Added possibility to predict and return the base model's raw output with
model.predict_raw()
. Note that this returns a pd.DataFramepred_df
, which will not be supported for further processing with the Darts API. But it is possible to access Prophet's methods such as plots withmodel.model.plot_compenents(pred_df)
.
- Added support for fit & predict with future covariates. For instance:
- New
n_random_samples
ingridsearch()
method, which allows to specify a number of (random) hyper parameters combinations to be tried, in order mainly to limit the gridsearch time. - Improvements in the checkpointing and saving of Torch models.
- Now models don't save checkpoints by default anymore. Set
save_checkpoints=True
to enable them. - Models can be manually saved with
YourTorchModel.save_model(file_path)
(file_path pointing to the .pth.tar file). - Models can be manually loaded with
YourTorchModel.load_model(file_path)
or the original methodYourTorchModel.load_from_checkpoint()
.
- Now models don't save checkpoints by default anymore. Set
- New
QuantileRegression
Likelihood class indarts.utils.likelihood_models
. Allows to apply quantile regression loss, and get probabilistic forecasts on all deep learning models supporting likelihoods. Used by default in the Temporal Fusion Transformer.
Fixed:
- Some issues with
darts.concatenate()
. - Fixed some bugs with
RegressionModel
s applied on multivariate series. - An issue with the confidence bounds computation in ACF plot.
- Added a check for some models that do not support
retrain=False
forhistorical_forecasts()
. - Small fixes in install instructions.
- Some rendering issues with bullet points lists in examples.
0.12.0 (2021-09-25)
Added:
- Improved probabilistic forecasting with neural networks
- Now all neural networks based forecasting models (except
NBEATSModel
) support probabilistic forecasting, by providing thelikelihood
parameter to the model's constructor method. darts.utils.likelihood_models
now contains many more distributions. The complete list of likelihoods available to train neural networks based models is available here: https://unit8co.github.io/darts/generated_api/darts.utils.likelihood_models.html- Many of the available likelihood models now offer the possibility to specify "priors" on the distribution's parameters. Specifying such priors will regularize the training loss to make the output distribution more like the one specified by the prior parameters values.
- Now all neural networks based forecasting models (except
- Performance improvements on
TimeSeries
creation. creatingTimeSeries
is now be significantly faster, especially for large series, and filling missing dates has also been significantly sped up. - New rho-risk metric for probabilistic forecasts.
- New method
darts.utils.statistics.plot_hist()
to plot histograms of time series data (e.g. backtest errors). - New argument
fillna_value
toTimeSeries
factory methods, allowing to specify a value to fill missing dates (instead ofnp.nan
). - Synthetic
TimeSeries
generated withdarts.utils.timeseries_generation
methods can now be integer-index (just pass an integer instead of a timestamp for thestart
argument). - Removed some deprecation warnings
- Updated conda installation instructions
Fixed:
- Removed extra 1x1 convolutions in TCN Model.
- Fixed an issue with linewidth parameter when plotting
TimeSeries
. - Fixed a column name issue in datetime attribute time series.
- We have removed the
develop
branch. - We force sklearn<1.0 has we have observed issues with pmdarima and sklearn==1.0
0.11.0 (2021-09-04)
Added:
- New model:
LightGBMModel
is a new regression model. Regression models allow to predict future values of the target, given arbitrary lags of the target as well as past and/or future covariates.RegressionModel
already works with any scikit-learn regression model, and nowLightGBMModel
does the same with LightGBM. If you want to activate LightGBM support in Darts, please read the detailed install notes on the README carefully. - Added stride support to gridsearch
Fixed:
- A bug which was causing issues when training on a GPU with a validation set
- Some issues with custom-provided RNN modules in
RNNModel
. - Properly handle
kwargs
in thefit
function ofRegressionModel
s. - Fixed an issue which was causing problems with latest versions of Matplotlib.
- An issue causing errors in the FFT notebook
0.10.1 (2021-08-19)
Fixed:
- A bug with memory pinning that was causing issues with training models on GPUs.
Changed:
- Clarified conda support on the README
0.10.0 (2021-08-13)
Added:
-
🔴 Improvement of the covariates support. Before, some models were accepting a
covariates
(orexog
) argument, but it wasn't always clear whether this represented "past-observed" or "future-known" covariates. We have made this clearer. Now all covariate-aware models supportpast_covariates
and/orfuture_covariates
argument in theirfit()
andpredict()
methods, which makes it clear what series is used as a past or future covariate. We recommend this article for more information and examples. -
🔴 Significant improvement of
RegressionModel
(incl.LinearRegressionModel
andRandomForest
). These models now support training on multiple (possibly multivariate) time series. They also support bothpast_covariates
andfuture_covariates
. It makes it easier than ever to fit arbitrary regression models (e.g. from scikit-learn) on multiple series, to predict the future of a target series based on arbitrary lags of the target and the past/future covariates. The signature of these models changed: It's not using "exog
" keyword arguments, butpast_covariates
andfuture_covariates
instead. -
Dynamic Time Warping. There is a brand new
darts.dataprocessing.dtw
submodule that implements Dynamic Time Warping between twoTimeSeries
. It's also coming with a newdtw
metric indarts.metrics
. We recommend going over the new DTW example notebook for a good overview of the new functionalities -
Conda forge installation support (fully supported with Python 3.7 only for now). You can now
conda install u8darts-all
. -
TimeSeries.from_csv()
allows to obtain aTimeSeries
from a CSV file directly. -
Optional cyclic encoding of the datetime attributes future covariates; for instance it's now possible to call
my_series.add_datetime_attribute('weekday', cyclic=True)
, which will add two columns containing a sin/cos encoding of the weekday. -
Default seasonality inference in
ExponentialSmoothing
. If left toNone
, theseasonal_periods
is inferred from thefreq
of the provided series. -
Various documentation improvements.
Fixed:
- Now transformations and forecasting maintain the columns' names of the
TimeSeries
. The generation moduledarts.utils.timeseries_generation
also comes with better default columns names. - Some issues with our Docker build process
- A bug with GPU usage
Changed:
- For probabilistic PyTorch based models, the generation of multiple samples (and series) at prediction time is now vectorized, which improves inference performance.
0.9.1 (2021-07-17)
Added:
- Improved
GaussianProcessFilter
, now handling missing values, and better handling time series indexed by datetimes. - Improved Gaussian Process notebook.
Fixed:
TimeSeries
now supports indexing usingpandas.Int64Index
and not justpandas.RangeIndex
, which solves some indexing issues.- We have changed all factory methods of
TimeSeries
to havefill_missing_dates=False
by default. This is because in some cases inferring the frequency for missing dates and resampling the series is causing significant performance overhead. - Fixed backtesting to make it work with integer-indexed series.
- Fixed a bug that was causing inference to crash on GPUs for some models.
- Fixed the default folder name, which was causing issues on Windows systems.
- We have slightly improved the documentation rendering and fixed the titles
of the documentation pages for
RNNModel
andBlockRNNModel
to distinguish them.
Changed:
- The dependencies are not pinned to some exact versions anymore.
- We have fixed the building process.
0.9.0 (2021-07-09)
Added:
- Multiple forecasting models can now produce probabilistic forecasts by specifying a
num_samples
parameter when callingpredict()
. Stochastic forecasts are stored by utilizing the newsamples
dimension in the refactoredTimeSeries
class (see 'Changed' section). Models supporting probabilistic predictions so far areARIMA
,ExponentialSmoothing
,RNNModel
andTCNModel
. - Introduced
LikelihoodModel
class which is used by probabilisticTorchForecastingModel
classes in order to make predictions in the form of parametrized distributions of different types. - Added new abstract class
TorchParametricProbabilisticForecastingModel
to serve as parent class for probabilistic models. - Introduced new
FilteringModel
abstract class alongsideMovingAverage
,KalmanFilter
andGaussianProcessFilter
as concrete implementations. - Future covariates are now utilized by
TorchForecastingModels
when the forecasting horizon exceeds theoutput_chunk_length
of the model. Before,TorchForecastingModel
instances could only predict beyond theiroutput_chunk_length
if they were not trained on covariates, i.e. if they predicted all the data they need as input. This restriction has now been lifted by letting a model not only consume its own output when producing long predictions, but also utilizing the covariates known in the future, if available. - Added a new
RNNModel
class which utilizes and rnn module as both encoder and decoder. This new class natively supports the use of the most recent future covariates when making a forecast. See documentation for more details. - Introduced optional
epochs
parameter to theTorchForecastingModel.predict()
method which, if provided, overrides then_epochs
attribute in that particular model instance and training session. - Added support for
TimeSeries
with apandas.RangeIndex
instead of just allowingpandas.DatetimeIndex
. ForecastingModel.gridsearch
now makes use of parallel computation.- Introduced a new
force_reset
parameter toTorchForecastingModel.__init__()
which, if left to False, will prevent the user from overriding model data with the same name and directory.
Fixed:
- Solved bug occurring when training
NBEATSModel
on a GPU. - Fixed crash when running
NBEATSModel
withlog_tensorboard=True
- Solved bug occurring when training a
TorchForecastingModel
instance with abatch_size
bigger than the available number of training samples. - Some fixes in the documentation, including adding more details
- Other minor bug fixes
Changed:
- 🔴 The
TimeSeries
class has been refactored to support stochastic time series representation by adding an additional dimension to a time series, namelysamples
. A time series is now based on a 3-dimensionalxarray.DataArray
with shape(n_timesteps, n_components, n_samples)
. This overhaul also includes a change of the constructor which is incompatible with the old one. However, factory methods have been added to create aTimeSeries
instance from a variety of data types, includingpd.DataFrame
. Please refer to the documentation ofTimeSeries
for more information. - 🔴 The old version of
RNNModel
has been renamed toBlockRNNModel
. - The
historical_forecast()
andbacktest()
methods ofForecastingModel
have been reorganized a bit by making use of new wrapper methods to fit and predict models. - Updated
README.md
to reflect the new additions to the library.
0.8.1 (2021-05-22)
Fixed:
- Some fixes in the documentation
Changed:
- The way to instantiate Dataset classes; datasets should now be used like this
from darts.datasets import AirPassengers
ts: TimeSeries = AirPassengers().load()
0.8.0 (2021-05-21)
Added:
RandomForest
algorithm implemented. Uses the scikit-learnRandomForestRegressor
to predict future values from (lagged) exogenous variables and lagged values of the target.darts.datasets
is a new submodule allowing to easily download, cache and import some commonly used time series.- Better support for processing sequences of
TimeSeries
.- The Transformers, Pipelines and metrics have been adapted to be used on sequences of
TimeSeries
(rather than isolated series). - The inference of neural networks on sequences of series has been improved
- The Transformers, Pipelines and metrics have been adapted to be used on sequences of
- There is a new utils function
darts.utils.model_selection.train_test_split
which allows to split aTimeSeries
or a sequence ofTimeSeries
into train and test sets; either along the sample axis or along the time axis. It also optionally allows to do "model-aware" splitting, where the split reclaims as much data as possible for the training set. - Our implementation of N-BEATS,
NBEATSModel
, now supports multivariate time series, as well as covariates.
Changed
RegressionModel
is now a user exposed class. It acts as a wrapper around any regression model with afit()
andpredict()
method. It enables the flexible usage of lagged values of the target variable as well as lagged values of multiple exogenous variables. Allowed values for thelags
argument are positive integers or a list of positive integers indicating which lags should be used during training and prediction, e.g.lags=12
translates to training with the last 12 lagged values of the target variable.lags=[1, 4, 8, 12]
translates to training with the previous value, the value at lag 4, lag 8 and lag 12.- 🔴
StandardRegressionModel
is now calledLinearRegressionModel
. It implements a linear regression model fromsklearn.linear_model.LinearRegression
. Users who still need to use the formerStandardRegressionModel
with another sklearn model should use theRegressionModel
now.
Fixed
- We have fixed a bug arising when multiple scalers were used.
- We have fixed a small issue in the TCN architecture, which makes our implementation follow the original paper more closely.
Added:
- We have added some contribution guidelines.
0.7.0 (2021-04-14)
Added:
darts
Pypi package. It is now possible topip install darts
. The older nameu8darts
is still maintained and provides the different flavours for lighter installs.- New forecasting model available: VARIMA (Vector Autoregressive moving average).
- Support for exogeneous variables in ARIMA, AutoARIMA and VARIMA (optional
exog
parameter infit()
andpredict()
methods). - New argument
dummy_index
forTimeSeries
creation. If a series is just composed of a sequence of numbers without timestamps, setting this flag will allow to create aTimeSeries
which uses a "dummy time index" behind the scenes. This simplifies the creation ofTimeSeries
in such cases, and makes it possible to use all forecasting models, except those that explicitly rely on dates. - New method
TimeSeries.diff()
returning differencedTimeSeries
. - Added an example of
RegressionEnsembleModel
in intro notebook.
Changed:
- Improved N-BEATS example notebook.
- Methods
TimeSeries.split_before()
andsplit_after()
now also accept integer or float arguments (in addition to timestamp) for the breaking point (e.g. specify 0.8 in order to obtain a 80%/20% split). - Argument
value_cols
no longer has to be provided if not necessary when creating aTimeSeries
from aDataFrame
. - Update of dependency requirements to more recent versions.
Fixed:
- Fix issue with MAX_TORCH_SEED_VALUE on 32-bit architectures (unit8co#235).
- Corrected a bug in TCN inference, which should improve accuracy.
- Fix historical forecasts not returning last point.
- Fixed bug when calling the
TimeSeries.gaps()
function for non-regular time frequencies. - Many small bug fixes.
0.6.0 (2021-02-02)
Added:
Pipeline.invertible()
a getter which returns whether the pipeline is invertible or not.TimeSeries.to_json()
andTimeSeries.from_json()
methods to convertTimeSeries
to/from aJSON
string.- New base class
GlobalForecastingModel
for all models supporting training on multiple time series, as well as covariates. All PyTorch models are nowGlobalForecastingModel
s. - As a consequence of the above, the
fit()
function of PyTorch models (all neural networks) can optionally be called with a sequence of time series (instead of a single time series). - Similarly, the
predict()
function of these models also accepts a specification of which series should be forecasted - A new
TrainingDataset
base class. - Some implementations of
TrainingDataset
containing some slicing logic for the training of neural networks on several time series. - A new
TimeSeriesInferenceDataset
base class. - An implementation
SimpleInferenceDataset
ofTimeSeriesInferenceDataset
. - All PyTorch models have a new
fit_from_dataset()
method which allows to directly fit the model from a specifiedTrainingDataset
instance (instead of using a default instance when going via the :func:fit()
method). - A new explanatory notebooks for global models: https://github.com/unit8co/darts/blob/master/examples/02-multi-time-series-and-covariates.ipynb
Changed:
- 🔴 removed the arguments
training_series
andtarget_series
inForecastingModel
s. Please consult the API documentation of forecasting models to see the new signatures. - 🔴 removed
UnivariateForecastingModel
andMultivariateForecastingModel
base classes. This distinction does not exist anymore. Instead, now some models are "global" (can be trained on multiple series) or "local" (they cannot). All implementations ofGlobalForecastingModel
s support multivariate time series out of the box, except N-BEATS. - Improved the documentation and README.
- Re-ordered the example notebooks to improve the flow of examples.
Fixed:
- Many small bug fixes.
- Unit test speedup by about 15x.
0.5.0 (2020-11-09)
Added:
- Ensemble models, a new kind of
ForecastingModel
which allows to ensemble multiple models to make predictions:EnsembleModel
is the abstract base class for ensemble models. Classes deriving fromEnsembleModel
must implement theensemble()
method, which takes in aList[TimeSeries]
of predictions from the constituent models, and returns the ensembled prediction (a singleTimeSeries
object)RegressionEnsembleModel
, a concrete implementation ofEnsembleModel
which allows to specify any regression model (providingfit()
andpredict()
methods) to use to ensemble the constituent models' predictions.
- A new method to
TorchForecastingModel
:untrained_model()
returns the model as it was initially created, allowing to retrain the exact same model from scratch. Works both when specifying arandom_state
or not. - New
ForecastingModel.backtest()
andRegressionModel.backtest()
functions which by default compute a single error score from the historical forecasts the model would have produced.- A new
reduction
parameter allows to specify whether to compute the mean/median/… of errors or (whenreduction
is set toNone
) to return a list of historical errors. - The previous
backtest()
functionality still exists but has been renamedhistorical_forecasts()
- A new
- Added a new
last_points_only
parameter tohistorical_forecasts()
,backtest()
andgridsearch()
Changed:
- 🔴 Renamed
backtest()
intohistorical_forecasts()
fill_missing_values()
andMissingValuesFiller
used to remove the variable names when used withfill='auto'
– not anymore.- Modified the default plotting style to increase contrast and make plots lighter.
Fixed:
- Small mistake in the
NaiveDrift
model implementation which caused the first predicted value to repeat the last training value.
Changed:
@random_method
decorator now always assigns a_random_instance
field to decorated methods (seeded with a random seed). This doesn't change the observed behavior, but allows to deterministically "reset"TorchForecastingModel
by saving_random_instance
along with the other parameters of the model upon creation.
0.4.0 (2020-10-28)
Added:
- Data (pre) processing abilities using
DataTransformer
,Pipeline
:DataTransformer
provide a unified interface to apply transformations onTimeSeries
, using theirtransform()
methodPipeline
:- allow chaining of
DataTransformers
- provide
fit()
,transform()
,fit_transform()
andinverse_transform()
methods.
- allow chaining of
- Implementing your own data transformers:
- Data transformers which need to be fitted first should derive from the
FittableDataTransformer
base class and implement afit()
method. Fittable transformers also provide afit_transform()
method, which fits the transformer and then transforms the data with a single call. - Data transformers which perform an invertible transformation should derive from the
InvertibleDataTransformer
base class and implement ainverse_transform()
method. - Data transformers which are neither fittable nor invertible should derive from the
BaseDataTransformer
base class - All data transformers must implement a
transform()
method.
- Data transformers which need to be fitted first should derive from the
- Concrete
DataTransformer
implementations:MissingValuesFiller
wraps aroundfill_missing_value()
and allows to fill missing values using either a constant value or thepd.interpolate()
method.Mapper
andInvertibleMapper
allow to easily perform the equivalent of amap()
function on a TimeSeries, and can be made part of aPipeline
BoxCox
allows to apply a BoxCox transformation to the data
- Extended
map()
onTimeSeries
to accept functions which use both a value and its timestamp to compute a new value e.g.f(timestamp, datapoint) = new_datapoint
- Two new forecasting models:
TransformerModel
, an implementation based on the architecture described in Attention Is All You Need by Vaswani et al. (2017)NBEATSModel
, an implementation based on the N-BEATS architecture described in N-BEATS: Neural basis expansion analysis for interpretable time series forecasting by Boris N. Oreshkin et al. (2019)
Changed:
- 🔴 Removed
cols
parameter frommap()
. Using indexing onTimeSeries
is preferred.# Assuming a multivariate TimeSeries named series with 3 columns or variables. # To apply fn to columns with names '0' and '2': #old syntax series.map(fn, cols=['0', '2']) # returned a time series with 3 columns #new syntax series[['0', '2']].map(fn) # returns a time series with only 2 columns
- 🔴 Renamed
ScalerWrapper
intoScaler
- 🔴 Renamed the
preprocessing
module intodataprocessing
- 🔴 Unified
auto_fillna()
andfillna()
into a singlefill_missing_value()
function#old syntax fillna(series, fill=0) #new syntax fill_missing_values(series, fill=0) #old syntax auto_fillna(series, **interpolate_kwargs) #new syntax fill_missing_values(series, fill='auto', **interpolate_kwargs) fill_missing_values(series, **interpolate_kwargs) # fill='auto' by default
Changed:
- GitHub release workflow is now triggered manually from the GitHub "Actions" tab in the repository, providing a
#major
,#minor
, or#patch
argument. #211 - (A limited number of) notebook examples are now run as part of the GitHub PR workflow.
0.3.0 (2020-10-05)
Added:
- Better indexing on TimeSeries (support for column/component indexing) #150
- New
FourTheta
forecasting model #123, #156 map()
method for TimeSeries #121, #166- Further improved the backtesting functions #111:
- Added support for multivariate TimeSeries and models
- Added
retrain
andstride
parameters
- Custom style for matplotlib plots #191
- sMAPE metric #129
- Option to specify a
random_state
at model creation using the@random_method
decorator on models using neural networks to allow reproducibility of results #118
Changed:
- 🔴 Refactored backtesting #184
- Moved backtesting functionalities inside
ForecastingModel
andRegressionModel
# old syntax: backtest_forecasting(forecasting_model, *args, **kwargs) # new syntax: forecasting_model.backtest(*args, **kwargs) # old syntax: backtest_regression(regression_model, *args, **kwargs) # new syntax: regression_model.backtest(*args, **kwargs)
- Consequently removed the
backtesting
module
- Moved backtesting functionalities inside
- 🔴
ForecastingModel
fit()
method syntax using TimeSeries indexing instead of additional parameters #161# old syntax: multivariate_model.fit(multivariate_series, target_indices=[0, 1]) # new syntax: multivariate_model.fit(multivariate_series, multivariate_series[["0", "1"]]) # old syntax: univariate_model.fit(multivariate_series, component_index=2) # new syntax: univariate_model.fit(multivariate_series["2"])
Fixed:
- Solved issue of TorchForecastingModel.predict(n) throwing an error at n=1. #108
- Fixed MASE metrics #129
- [BUG] ForecastingModel.backtest: Can bypass sanity checks #188
- ForecastingModel.backtest() fails if forecast_horizon isn't provided #186
Added:
- Gradle to build docs, docker image, run tests, … #112, #127, #159
- M4 competition benchmark and notebook to the examples #138
- Check of test coverage #141
Changed:
Fixed:
- Passed the
freq
parameter to theTimeSeries
constructor in all TimeSeries generating functions #157