Skip to content

Releases: databricks-industry-solutions/many-model-forecasting

v0.1.7

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 11 Jul 15:00
a7f52e8

What's Changed

New Features & Enhancements

  • Hierarchical Reconciliation (#182): Make forecasts mathematically coherent across hierarchy levels (e.g. store → region → country → total). MMF runs the full forecasting pipeline once per hierarchy level in parallel; reconciliation post-processes the independent outputs into a single coherent forecast set.

    • New API — run_reconciliation_multilevel() in mmf_sa/reconciliation.py. Consumes one best_models table and one evaluation_output table per level, plus a user-provided membership (adjacency-list) table, and writes a reconciliation_output Delta table with columns unique_id, ds, y_base, y_reconciled, hierarchy_level, reconciliation_method, and reconciliation_timestamp.
    • Reconciliation methods — BottomUp, TopDown, MiddleOut, MinTrace (sub-methods: mint_shrink, mint_cov, wls_var, wls_struct), and ERM. Sparse reconcilers and sparse S-matrix construction are used for large hierarchies; Polars + Arrow power the in-memory reconciliation layer.
    • New optional dependency — install with pip install "mmf_sa[hierarchical] @ …" to pull in hierarchicalforecast==1.5.1, polars>=0.20.0, and scipy>=1.10.0.
    • MMF Agent Skill 6 — new slash command /hierarchical-reconciliation (6-hierarchical-reconciliation.md) with a reproducibility notebook template (mmf_reconciliation_notebook_template.ipynb).
    • Synthetic hierarchical data — synthetic_data_generation_hierarchical.ipynb for testing the multi-level workflow end-to-end.
    • Documentation — expanded README and mmf_sa/README.md with workflow diagrams, method comparison table, and install/usage examples.
    • Tests — 440+ unit tests in tests/unit/test_reconciliation.py.
  • FreshRetailNet Serverless MMF example (#193): End-to-end example running MMF on the public FreshRetailNet dataset using Databricks Serverless GPU, with optional Genie natural-language consumption.

Bug Fixes & Improvements

  • Fix Skill 5 best-model selection across multi-job run_ids (#194): MMF launches one job per model class (local, global ML, global DL, foundation), each writing its own run_id. Skill 5 previously pinned selection to a single global latest run_id, silently excluding all models except the last job to finish (the classic "foundation won 100%" artifact). Selection now picks the latest run_id per model so all models compete head-to-head. Tie-breaking switched from RANK() to ROW_NUMBER() for exactly one winner per series; on metric ties, cheaper compute tiers win (local → global ML → global DL → foundation). Updated Skill 4 to remove the incorrect "shared run_id" instruction. Applied to Skill 5 Steps 3/3a and the post-process reproducibility notebook template.

Dependency Updates

  • Bumped pyspark 3.3.2 → 3.4.4 in test dependencies (#187).
  • Bumped langsmith 0.8.0 → 0.8.18 in skills/.test (#192).

Upgrade Notes

  • Hierarchical reconciliation is opt-in. Install the new extra and run run_reconciliation_multilevel (or Skill 6) only when your use case has a meaningful hierarchy:
    pip install "mmf_sa[hierarchical] @ git+https://github.com/databricks-industry-solutions/many-model-forecasting.git@v0.1.7"
  • Multi-level workflow: run Skills 1–5 once per hierarchy level (in parallel), then Skill 6 to reconcile. Each level needs its own best_models and evaluation_output tables plus a membership adjacency table.
  • Skill 5 users on v0.1.6: if you ran multiple model-class jobs and saw one model dominate 100% of series in best_models, re-run Skill 5 after upgrading — the per-model run_id fix restores fair cross-model competition.
  • No breaking changes to run_forecast. Existing local, global, and foundation workflows are unchanged.

Full Changelog: v0.1.6...v0.1.7

v0.1.6

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 25 Jun 08:29
4ba889c

What's Changed

New Features & Enhancements

  • MLForecast (LightGBM) global models (#177): Added a new global modeling framework built on Nixtla MLForecast with gradient-boosted trees (LightGBM). Two new models are now selectable via active_models:
    • MLForecastLGBM — a LightGBM regressor with fixed hyperparameters, lag/rolling/date features, and support for static and dynamic external regressors.
    • MLForecastAutoLGBM — an automatically tuned variant using AutoMLForecast + Optuna hyperparameter search.
    • New pipeline mmf_sa/models/mlforecast/MLForecastPipeline.py integrates training, backtesting, evaluation, and scoring through the standard MMF run_forecast interface, including MLflow logging consistent with the other global models.
    • Model definitions added to mmf_sa/models/models_conf.yaml, with framework-level defaults wired into the daily/weekly/monthly/hourly forecasting_conf_*.yaml files.
  • New runnable MLForecast example notebooks (#177): Added end-to-end *_ml examples across all frequencies and execution modes:
  • Consistent example naming (#177): Existing deep-learning global examples were renamed with a _dl suffix (e.g. global_daily.ipynb → global_daily_dl.ipynb) to clearly distinguish them from the new MLForecast _ml examples. Update any hard-coded notebook paths accordingly.
  • MMF Agent skill support for MLForecast (#177): Added mmf_global_ml_notebook_template.ipynb and updated the skill docs (SKILL.md, provisioning and execution guides) so the MMF Agent can run LightGBM-based global models.
  • README & models docs updates (#177): Documented MLForecast in the "What's New" section, expanded mmf_sa/models/README.md, and added the new dependency group.

Bug Fixes & Improvements

  • Fix serverless foundation-model timestamp issue (#179): Resolved a timestamp handling bug affecting foundation models running on serverless GPU compute.

Dependency Updates

  • Added MLForecast stack to the global extra: mlforecast==1.0.31, lightgbm==4.6.0, optuna==3.6.1 (#177).
  • Bumped pyspark 3.3.0 → 3.3.2 (#178).
  • Bumped mlflow floor to >=3.12.0 in skills/.test (#180).
  • Bumped python-dotenv to >=1.2.2 in skills/.test to address a symlink vulnerability (#181).
  • skills/.test security bumps: cryptography 46.0.7 → 48.0.1 (#191), starlette 1.0.1 → 1.3.1 (#190) and 0.50.0 → 1.0.1 (#184), aiohttp 3.14.0 → 3.14.1 (#189) and 3.13.5 → 3.14.0 (#183), pyarrow 22.0.0 → 23.0.1 (#185).

Upgrade Notes

  • No breaking API changes to run_forecast. MLForecast models are opt-in via active_models (MLForecastLGBM, MLForecastAutoLGBM).
  • Install the updated global extra to pull in MLForecast, LightGBM, and Optuna:
    pip install "mmf_sa[global] @ git+https://github.com/databricks-industry-solutions/many-model-forecasting.git@v0.1.6"
  • Use Databricks Runtime 18.0 for ML or later for global (including MLForecast) and foundation models.
  • Example notebooks for deep-learning global models were renamed with a _dl suffix; update any saved references.

Full Changelog: v0.1.5...v0.1.6

v0.1.5

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 26 May 09:33
33da4d5

What's Changed

New Features & Enhancements

  • Foundation Model support on Serverless GPU compute (#175): Added a new serverless=True flag to run_forecast that routes Chronos and TimesFM inference through a driver-only single-GPU predict path instead of Spark Pandas UDFs. This is required on Databricks serverless GPU compute, where Spark Connect Python workers are CPU-only. Local and global models are unaffected — they already run driver-side. Moirai is not supported on serverless because it has no driver-only single-GPU predict path; an explicit ModelError is raised in that case.
    • New Forecaster.backtest_global_model parameter serverless_predict dispatches model.backtest with spark=None so the model's driver-only predict path is used.
    • ChronosForecaster.predict now branches between _predict_distributed (existing Pandas UDF path) and _predict_single (new driver-only batched ChronosPipeline.predict).
    • Timestamp arrays produced by the driver-only path are coerced from datetime64[ns] to datetime64[us] before createDataFrame to satisfy Spark Connect Arrow's microsecond-precision requirement.
    • Trade-off: the serverless path runs sequentially on a single GPU; there is no multi-GPU data parallelism across Spark workers.
  • New runnable serverless example (#175): Added examples/serverless/foundation_serverless.ipynb demonstrating end-to-end foundation-model forecasting on serverless GPU.
  • README updates (#175): Documented the serverless flag for foundation models and the new example notebook in the "What's New" and "Foundation models" sections.

Dependency Updates

  • Bumped idna 3.11 -> 3.15 in /skills/.test (#176)
  • Bumped langsmith 0.7.31 -> 0.8.0 in /skills/.test (#174)
  • Bumped urllib3 2.6.3 -> 2.7.0 in /skills/.test (#173)
  • Bumped langchain-core 1.2.31 -> 1.3.3 in /skills/.test (#172)
  • Bumped gitpython 3.1.47 -> 3.1.50 in /skills/.test (#171)
  • Bumped mako 1.3.11 -> 1.3.12 in /skills/.test (#170)

Upgrade Notes

  • No breaking changes. serverless defaults to False; existing classic-cluster workflows are unchanged.
  • To run foundation models on serverless GPU compute, pass serverless=True to run_forecast and use a Chronos or TimesFM model. Moirai still requires a classic GPU cluster.

Full Changelog: v0.1.4...v0.1.5

v0.1.4

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 04 May 07:14
5a4738b

What's Changed

New Features & Enhancements

  • Demo video walkthroughs in skills README (#168): Restructured the skills README demo section and wired in Genie Code demo recordings.
  • Skills improvements for generic agent compatibility (#162, #160): Made MMF skills more robust for generic agents (Claude Code + Genie Code).
  • Synthetic data generation updated to Spark (#166): Scales synthetic data generation for large workloads.
  • New synthetic data notebook (#155): Added a standalone synthetic data generation notebook.
  • Skills updates for external regressors (#151): Improved external-regressor guidance and robustness in MMF skills.
  • Expanded MMF documentation: Forecast problem brief carried across skills, STOP gates for parameter confirmation, covariate handling guidance, clearer user validation and notebook import steps.
  • Example notebook updates (#167): Added explanation of partitioning.
  • README updates (#164).

Bug Fixes & Improvements

  • Fix O(n^2) calculate_metrics in foundation model pipelines (#159): Significant speedup for metric calculation.
  • Minor fix on data quality checks.
  • Pinned TimesFM commit version for reproducibility.

Dependency Updates

  • Bumped gitpython 3.1.46 -> 3.1.47 (#163)
  • Bumped litellm 1.83.0 -> 1.83.7 (#161) and 1.81.7 -> 1.83.0 (#147)
  • Bumped langchain-openai 1.1.7 -> 1.1.14 (#158)
  • Bumped mako 1.3.10 -> 1.3.11 (#157)
  • Bumped langsmith 0.6.8 -> 0.7.31 (#156)
  • Bumped pytest 9.0.2 -> 9.0.3 (#154)
  • Bumped pillow 12.1.1 -> 12.2.0 (#153)
  • Bumped langchain-core 1.2.22 -> 1.2.28 (#150)
  • Bumped cryptography 46.0.6 -> 46.0.7 (#149)
  • Bumped aiohttp 3.13.3 -> 3.13.4 (#146)

Full Changelog: v0.1.3...v0.1.4

v0.1.3

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 24 Mar 04:42
5df159b

What's Changed

New Features

  • MMF Agent Skill Kit (PR #138, #137, #129): Added a comprehensive AI-assisted skills framework for Many-Model Forecasting. Includes step-by-step skill documents for data prep, series profiling, resource provisioning, forecast execution, and post-processing — enabling LLM agents (e.g., Claude Code, Cursor) to guide users through the full MMF workflow.
  • MMF Skills Demo (PR #136): Added an SVG animation demo and getting started section to the skills README, making it easier for new users to see the agent-assisted workflow in action.
  • Skills Test Infrastructure (PR #129): Introduced CI test infrastructure for validating MMF skill documents and notebook templates.

Bug Fixes & Improvements

  • Disabled autologging for NeuralForecast models (PR #128): Prevents MLflow autologging conflicts during NeuralForecast training.
  • Disabled TensorBoard logging (PR #128): Removes unnecessary TensorBoard overhead from the forecasting pipeline.
  • Fixed missing TimesFM xreg extra for covariate forecasting (PR #128): Ensures covariate support works correctly with TimesFM models.
  • Added detailed backtesting documentation (PR #127): Expanded the documentation on how backtesting works in the MMF framework.

Dependency Updates

  • Bumped pyasn1 0.6.2 → 0.6.3 (PR #135)
  • Bumped flask 3.1.2 → 3.1.3 (PR #134)
  • Bumped pillow 12.1.0 → 12.1.1 (PR #133)
  • Bumped langchain-core 1.2.8 → 1.2.11 (PR #132)
  • Bumped cryptography 46.0.4 → 46.0.5 (PR #131)
  • Bumped werkzeug 3.1.5 → 3.1.6 (PR #130)

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 22 Feb 14:44
a268a8f

What's Changed

New Features

  • Frontend Dash app for forecast exploration (PR #125): Added a Databricks Dash application that provides an interactive UI for exploring forecast results, including catalog/schema/table browsing, time series visualization, and metric comparison.

Bug Fixes & Improvements (PR #126)

  • Fixed miscellaneous bugs across the forecasting pipeline
  • Improved error handling and model abstraction layer
  • Minor fixes in Chronos, Moirai, NeuralForecast, and TimesFM pipelines
  • Updated quick start guide and README documentation

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 20 Feb 04:18
8b95aca

Many Model Forecasting v0.1.1

Release Date: February 20, 2026
Full Changelog: v0.1.0...v0.1.1


Highlights

This patch release adds covariate support for Chronos-2 foundation models, fixes multi-GPU distributed inference for TimesFM, and pins the TimesFM dependency to a stable commit for reproducible builds.


New Features

  • Chronos-2 covariate support — Chronos-2 models (amazon/chronos-2, autogluon/chronos-2-small, autogluon/chronos-2-synth) now support past and future covariates via the native list-of-dicts input format. This brings Chronos-2 to feature parity with TimesFM 2.5 for covariate forecasting. (PR #123)

Bug Fixes

  • TimesFM multi-GPU distributed inference — Fixed issues preventing TimesFM covariate forecasting from running correctly across multiple GPUs. (PRs #119, #120, #121)

Depend Changes

  • Pinned TimesFM to a specific commit (2dcc66f) — The timesfm dependency is now pinned to a known-good commit hash in both pyproject.toml and requirements-foundation.txt, ensuring reproducible installations and avoiding breakage from upstream changes. (PR #122)

Documentation

  • Updated README and models README to reflect Chronos-2 covariate support (✅ in the compatibility table).
  • Updated example notebook for external regressors with Chronos-2 guidance.

Files Changed (13 files, +731 / −104)

Area Files
Models ChronosPipeline.py, TimesFMPipeline.py
Dependencies pyproject.toml, requirements-foundation.txt
Documentation README.md, mmf_sa/models/README.md
Examples foundation_external_regressors_daily.ipynb, global_serverless.ipynb
CI/CD 4 GitHub Actions workflow files
Misc RUNME.py

Contributors

Thanks to all contributors for this release!


Upgrade

Update your clone or install:

git pull origin main
pip install -e ".[foundation]"

v0.1.0

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 13 Feb 12:23
4ff6854

v0.1.0 Release Notes

New Models

  • Chronos-2: Added Chronos2, Chronos2Small, and Chronos2Synth models from chronos-forecasting v2.2.2.
  • TimesFM 2.5: Added TimesFM_2_5_200m using the latest TimesFM API (from_pretrained + ForecastConfig).

Deprecated / Removed Models

  • ChronosT5 models removed: ChronosT5Tiny, ChronosT5Mini, ChronosT5Small, ChronosT5Base, ChronosT5Large.
  • TimesFM 1.0 & 2.0 removed: TimesFM_1_0_200m and TimesFM_2_0_500m.
  • Moirai models temporarily disabled due to uni2ts requiring torch<2.5, which is incompatible with the latest Databricks Runtimes.

Runtime Changes

  • Foundation models now require Databricks Runtime 18.0 for ML or later (previously 15.4LTS for ML).

Dependency Updates

  • chronos-forecasting upgraded from 1.4.1 to 2.2.2.
  • timesfm now installed from source (git+https://github.com/google-research/timesfm.git).
  • Removed uni2ts (Moirai) from foundation requirements.
  • Removed constraints.txt; added utilsforecast==0.2.15.
  • Removed pinned mlflow from requirements.txt (moved to pyproject.toml).
  • Reorganized pyproject.toml with optional dependency groups: [local], [global], [foundation].

Other Changes

  • Removed RUNME.py.
  • Updated all foundation example notebooks and YAML configs to reflect new model names.
  • Streamlined README.md changelog entries.

v0.0.0

Choose a tag to compare

@ryuta-yoshimatsu ryuta-yoshimatsu released this 12 Feb 14:28
1b79e8b

Initial release of Many Model Forecasting.