Note SynForecast is in alpha. APIs and seed-identical outputs may change before the first stable release.
Installation
Install SynForecast from PyPI:Quick start
Generate a long-format panel from a balanced collection of generators:[unique_id, ds, y]. Pass engine="polars" to return a Polars DataFrame.
Use a specific generator when you need explicit control over the data-generating
process:
Augment observed series
SynAugment analyzes each input series, fits a suitable generator, and adds
synthetic series with matching timestamps and statistical characteristics:
Works with the Nixtlaverse
SynForecast materializes the same[unique_id, ds, y] schema used throughout
the Nixtlaverse. The generated or augmented DataFrame can be passed directly
to forecasting libraries without a SynForecast-specific adapter.
NeuralForecast
MLForecast
StatsForecast
Why SynForecast?
Synthetic time series are useful when real observations are scarce, sensitive, expensive, or do not cover the conditions a system must handle. SynForecast is designed for:- Testing forecasting and anomaly-detection pipelines against known behavior
- Augmenting small training panels without altering validation data
- Pretraining global forecasting models on diverse temporal processes
- Stress-testing changepoints, missingness, anomalies, and regime changes
- Reproducible simulation with explicit, validated generator configurations
SynAugment is fitted to observed
data and its output can resemble that data.
Evidence and benchmarks
SynForecast’s native Rust batch path is designed for high-throughput data generation. Reproducible scripts and committed result summaries are available inbenchmarks/;
performance depends on generator, series shape, thread count, and hardware.
Synthetic data does not improve every model or dataset. The
when synthetic data helps
guide reports positive, neutral, and negative results so that augmentation and
pretraining choices can be evaluated against observed-only baselines.
Features
- 31 generators across statistical, stochastic, multivariate, domain-specific, and pretraining categories
- Long-format output following Nixtla conventions
- pandas, Polars, cuDF, Modin, and PyArrow output through Narwhals
- Changepoint, anomaly, missingness, and exogenous-variable injection
- Dataset composition with
SynSetand augmentation withSynAugment - Seed-deterministic parallel generation
- Native generation through Rust and PyO3
Documentation
- Getting started
- Tutorials and capabilities
- Generator reference
- Contributing
- Roadmap
- Changelog
- Support
- Security policy
- Citation

