A Python package for Bayesian forecasting with object-oriented design and probabilistic models under the hood.
- is stable and being incubated for long-term support. It may contain new experimental code, for which APIs are subject to change.
- requires PyStan as a system dependency. PyStan is licensed under GPLv3, which is a free, copyleft license for software.
Orbit: A Python Package for Bayesian Forecasting
Orbit is a Python package for Bayesian time series forecasting and inference. It provides a
familiar and intuitive initialize-fit-predict interface for time series tasks, while utilizing probabilistic programming languages under the hood.
Currently, it supports concrete implementations for the following
- Exponential Smoothing (ETS)
- Damped Local Trend (DLT)
- Local Global Trend (LGT)
- Kernel Time-based Regression (KTR-Lite)
It also supports the following sampling methods for
- Markov-Chain Monte Carlo (MCMC) as a full sampling method
- Maximum a Posteriori (MAP) as a point estimate method
- Variational Inference (VI) as a hybrid-sampling method on approximate
Installing Stable Release
Install from PyPi:
$ pip install orbit-ml
Install from source:
$ git clone https://github.com/uber/orbit.git $ cd orbit $ pip install -r requirements.txt $ pip install .
Installing from Dev Branch
$ pip install git+https://github.com/uber/[email protected]
Quick Start with Damped-Local-Trend (DLT) Model
FULL Bayesian Prediction
from orbit.utils.dataset import load_iclaims from orbit.models.dlt import DLTFull from orbit.diagnostics.plot import plot_predicted_data # log-transformed data df = load_iclaims() # train-test split test_size = 52 train_df = df[:-test_size] test_df = df[-test_size:] dlt = DLTFull( response_col='claims', date_col='week', regressor_col=['trend.unemploy', 'trend.filling', 'trend.job'], seasonality=52, ) dlt.fit(df=train_df) # outcomes data frame predicted_df = dlt.predict(df=test_df) plot_predicted_data( training_actual_df=train_df, predicted_df=predicted_df, date_col=dlt.date_col, actual_col=dlt.response_col, test_actual_df=test_df )