Skip to content

v1.4.1: engine additions for probabilistic forecasting - #8

Merged
yallioux merged 10 commits into
mainfrom
release/v1.4.1
Oct 8, 2026
Merged

yallioux merged 10 commits into
mainfrom
release/v1.4.1

Conversation

@yallioux

@yallioux yallioux commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

v1.4.1: engine additions for probabilistic forecasting. Patch release: new methods and options only, plus the rejection of one invalid call. Existing calls give the same forecasts (tests/regression/ unchanged apart from the text of one error message). Found while building a probabilistic benchmark harness on fev-bench.

  • Fix: a distributional or mixture StaticTAM with the default log target rejects a training target with values <= 0 (they were clipped to 1e-12 before the log, so the fitted scale collapsed or exploded).
  • Quantiles: AdaptiveTAM.predict_quantiles (scale renewed online from past standardized residuals), KalmanTAM.predict_quantiles (predictive variance of the filter), SafetyTAM.predict_quantiles (several levels, signed per-tail calibration), OperaTAM(loss_type='pinball', tau=...) and aggregate_quantiles.
  • Distributions: target_transform "asinh" and "logit" for the distributional StaticTAM; loss="negative_binomial" and loss="tweedie" with discrete and compound Poisson-gamma quantiles, also for poisson.
  • f(x, ..., period=None | 'auto' | (low, high)): the range of one cycle of a Fourier input. The default is unchanged; cyclic=True as a fixed domain was tried first and broke the regression results.
  • Threads: limiting the CPU threads through OMP_NUM_THREADS / MKL_NUM_THREADS is documented and tested. A hang after torch.set_num_threads(n) seen on one PyTorch / oneMKL build reproduces without tam, so no engine change.
  • Release commit: version 1.4.1, CHANGELOG [1.4.1] - 2026-10-08, version DOI 10.5281/zenodo.23248249 in the README BibTeX.
  • Known limits, stated in the docs: the columns of AdaptiveTAM.predict_online carry the internal name __mu__ when the base is distributional; the Kalman variance after a long gap of missing targets is understated (inherited from the filter).

Checklist

Fill one row per line you add to CHANGELOG.md. "Not needed" is an answer only with its reason.

CHANGELOG entry Test (name; fails before the change?) math/ page architecture/ page User docs (README, THEORY, docstrings) Callers checked Regression
Fixed: log target rejects y <= 0 4 in tests/test_distributional.py (fail on 1.4.0) 02_distributional.md 02_distributional_code.md docstring mixture path Unchanged
f(x, ..., period=...) tests/test_cyclic_fixed_domain.py (13; fail on 1.4.0) FOURIER.md 06_the_spectrum_api.md docstring StaticTAM, AdaptiveTAM windows Unchanged (default None)
OperaTAM pinball loss, aggregate_quantiles tests/test_opera_pinball.py (5; fail on 1.4.0) 05_opera_aggregation.md 05_opera_gpu.md docstrings square and absolute losses Unchanged
SafetyTAM.predict_quantiles, calibrate(verbose=False) 5 in tests/test_safety.py (fail on 1.4.0) 04_risk_conformal_evt.md 04_risk_conformal_evt_code.md docstrings predict_intervals, ACI Unchanged
target_transform asinh and logit tests/test_target_transform.py (12; fail on 1.4.0) 02_distributional.md 02_distributional_code.md StaticTAM docstring mixture, conformal, CRPS, anomaly score Unchanged
AdaptiveTAM.predict_quantiles tests/test_adaptive_quantiles.py (12; fail on 1.4.0) 01_adaptive_online.md 01_adaptive_code.md docstrings plain base unchanged Unchanged
KalmanTAM.predict_quantiles tests/test_kalman_quantiles.py (9; fail on 1.4.0) 02_kalman_filter.md 02_kalman_torchscript.md docstring filter output bit-for-bit with and without the variance Unchanged
negative_binomial, tweedie, predict_quantiles for counts tests/test_count_families.py (16; 15 fail on 1.4.0) 01_reweighted_estimation.md 01_reweighted_estimation_code.md docstrings, bibliography other losses keep the same fit path 2 lines of RESULTS.txt: the supported-losses text of the unknown-loss error message
Limiting the CPU threads tests/test_thread_limits.py (no code change) Not needed: no theory 04_hardware_memory.md README Not needed: no code change Unchanged
Release 1.4.1 (version, DOI) Not needed: metadata only Not needed Not needed README, CITATION.cff Not needed Unchanged
  • Tests pass locally (pytest), and the new tests were written first and fail without the change.
  • The documentation pair is updated (math/ for theory, architecture/ for the implementation).
  • The docs build without warnings (build_docs.bat; the Documentation workflow runs on main after the merge).
  • One CHANGELOG.md line per user-visible change, under [1.4.1] (was [Unreleased]).
  • No frozen public API change: existing parameters keep their name, order and default (tests/test_api_contracts.py); new ones are keyword arguments with a default.
  • No print() in new code.
  • Data used by tests and examples is public.
  • Every commit is signed off (git commit -s, see CONTRIBUTING.md).
  • Every added file keeps its SPDX-FileCopyrightText and SPDX-License-Identifier header; its author is named as SPDX-FileContributor.

Pre-push verdict

READY TO PUSH against the v1.4.0 baseline, run before the release commit (which only changes versions and dates): tests pass, use cases ran, regression 0 fail / 0 warn. RESULTS.txt differs from 1.4.0 by the two error-message lines above; RESULTS_EXP.txt unchanged.

…rget with values <= 0

Signed-off-by: yallioux <yann4allioux@gmail.com>
…-tail calibration; calibrate(verbose=False)

Signed-off-by: yallioux <yann4allioux@gmail.com>
… one cycle used to normalise the feature

Signed-off-by: yallioux <yann4allioux@gmail.com>
…quantiles for quantile forecasts

Signed-off-by: yallioux <yann4allioux@gmail.com>
…, quantiles back-transformed exactly

Signed-off-by: yallioux <yann4allioux@gmail.com>
… base from past standardized residuals

Signed-off-by: yallioux <yann4allioux@gmail.com>
…tive variance of the filter

Signed-off-by: yallioux <yann4allioux@gmail.com>
… discrete and compound Poisson-gamma quantiles

Signed-off-by: yallioux <yann4allioux@gmail.com>
…reads hangs the batched LU of the grouped solves on one torch build

Signed-off-by: yallioux <yann4allioux@gmail.com>
Signed-off-by: yallioux <yann4allioux@gmail.com>
@yallioux yallioux changed the title v1.4.1: engine additions for probabilistic forecasting (part 1 of 2) v1.4.1: engine additions for probabilistic forecasting Oct 8, 2026
@yallioux
yallioux marked this pull request as ready for review October 8, 2026 20:59
@yallioux
yallioux merged commit 1d93905 into main Oct 8, 2026
27 checks passed
@yallioux
yallioux deleted the release/v1.4.1 branch October 9, 2026 06:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant