Segmented Conformal Transport for predictive CDF recalibration under nonstationarity
Project description
tsconformal
This repository contains the SCT reference implementation and benchmarks.
tsconformal implements Segmented Conformal Transport (SCT) for one-step predictive CDF recalibration under nonstationarity. The repository also contains the benchmark runners, analysis scripts, and reproducibility notes used to evaluate the method.
Companion paper (preprint DOI): https://doi.org/10.13140/RG.2.2.28984.30723
What is included
The tracked tree is deliberately compact.
src/tsconformal/: core packagebenchmarks/: real-data and synthetic benchmark runnersanalysis/: scripts for generating tables and figures from saved benchmark resultsreproducibility/: workflow notes and frozen benchmark settingsdata/benchmark_results.json: compact real-data benchmark snapshot on the currentE_series/T_evalschema
What is intentionally omitted
The omitted artifacts are the large local ones.
The release does not track the raw benchmark input archives, the cached forecast directories, or the generated benchmark outputs. Those artifacts are large, local, and either externally sourced or mechanically reproducible from the tracked code and settings. The omitted paths are:
data/raw/data/archive/raw_data.zipdata/cached_forecasts/data/results/benchmark_results_shards/data/results/*.jsonanalysis/output/
The workflow therefore has two operational stages.
- Colab / GPU cache stage for Chronos-2 one-step-ahead forecast caching.
- Local CPU/RAM stage for the benchmark overlay and analysis.
The raw benchmark input sources and expected local filenames are recorded in data/README.md.
Installation
Published releases install from PyPI.
pip install tsconformal
The editable install below matches the development environment.
python3.11 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip setuptools wheel
pip install -e ".[plots,dev]"
pip install ruptures statsmodels "chronos-forecasting>=2.0" torch
Minimal package example
The example below shows the public calibrator workflow.
from tsconformal import (
CUSUMNormDetector,
QuantileGridCDFAdapter,
SegmentedTransportCalibrator,
)
detector = CUSUMNormDetector(kappa=0.02, threshold=0.20)
cal = SegmentedTransportCalibrator(
grid_size=49,
rho=0.99,
n_eff_min=50,
step_schedule=lambda n: min(0.20, 1.0 / max(n ** 0.5, 1e-8)),
detector=detector,
cooldown=168,
confirm=3,
)
base_cdf = QuantileGridCDFAdapter(
probabilities=[0.01, 0.10, 0.50, 0.90, 0.99],
quantiles=[-1.2, -0.4, 0.0, 0.7, 1.4],
)
calibrated_cdf = cal.predict_cdf(base_cdf)
cal.update(y_t=0.35, base_cdf=base_cdf)
Reproducing the benchmark workflow
The workflow is explicit.
1. Cache Chronos-2 forecasts on Colab
The repository includes a Colab notebook for the GPU cache stage at reproducibility/tsconformal_benchmark_colab.ipynb. The same cache stage is also recorded as plain CLI commands in docs/cache_step_cli.md. On a GPU machine, for example Colab, the cache stage runs as follows:
The public cache CLI currently implements Chronos-2 only.
PYTHONPATH=src:. python benchmarks/data_loaders.py
PYTHONPATH=src:. python benchmarks/cache_fm_forecasts.py --dataset fred_md --model chronos2 --device auto --series-batch-size 128
PYTHONPATH=src:. python benchmarks/cache_fm_forecasts.py --dataset electricity --model chronos2 --device auto --series-batch-size 64
PYTHONPATH=src:. python benchmarks/cache_fm_forecasts.py --dataset traffic --model chronos2 --device auto --series-batch-size 32
The cache stage then archives data/cached_forecasts/... for transfer back to the local benchmark machine.
2. Run the real-data benchmark overlay locally
The local overlay stage consumes cached JSON forecasts at:
data/cached_forecasts/{dataset}/chronos2/*.json
The real-data runner then executes as follows:
PYTHONPATH=src:. python benchmarks/run_real_data.py
The runner writes:
data/results/benchmark_results_shards/{dataset}/{model}.jsonl
data/results/benchmark_results.jsonl
data/benchmark_results.json
3. Run the synthetic benchmark locally
The synthetic benchmark is independent of the cached forecast bundle.
PYTHONPATH=src:. python benchmarks/run_synthetic.py --n-replicates 10 --seed-base 20260306 --output-json data/results/synthetic_results.json
4. Generate tables and figures from saved results
The paper-facing artifact stage is separate.
PYTHONPATH=src:. python analysis/generate_paper_artifacts.py \
--results data/benchmark_results.json \
--synthetic-results data/results/synthetic_results.json \
--output analysis/output/paper
The generator accepts --real-data-log path/to/postcache_reproduction_<run_id>.log
when the real-data runtime table is required.
The local post-cache reproduction driver is reproducibility/run_postcache_reproduction.sh.
The synchronized benchmark settings used by the current workflow are recorded in:
configs/real_data_actual_settings.jsonconfigs/synthetic_actual_settings.jsonconfigs/manuscript_claimed_settings.json
Settings synchronization
The code and manuscript settings are synchronized. The workflow record is in reproducibility/paper_alignment.md, and the machine-readable manuscript mirror is in configs/manuscript_claimed_settings.json.
Bundled results snapshot
The bundled real-data snapshot is current.
The tracked data/benchmark_results.json already uses the refreshed E_series/T_eval schema expected by the current benchmark runner and paper artifact generator. It is sufficient for local smoke tests and for regenerating the real-data paper tables from the tracked snapshot.
The repository does not bundle data/results/synthetic_results.json, the sharded benchmark outputs, or analysis/output/paper/. The full paper-facing artifact set therefore requires a fresh synthetic run followed by analysis/generate_paper_artifacts.py. A full end-to-end real-data rerun additionally requires benchmarks/run_real_data.py against the synchronized cached forecast bundle.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tsconformal-0.2.0.tar.gz.
File metadata
- Download URL: tsconformal-0.2.0.tar.gz
- Upload date:
- Size: 32.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5360478d184383e48eceea9233188cb2c3e087ba120f282cccbb5656604522eb
|
|
| MD5 |
ef0033f36c72eff298bb76e06f31e284
|
|
| BLAKE2b-256 |
c5055d0b04f82f51dabb442e8166bbd77d71949792d1dcdccb0585bce7d11561
|
Provenance
The following attestation bundles were made for tsconformal-0.2.0.tar.gz:
Publisher:
release.yml on daradehghan/segmented-conformal-transport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tsconformal-0.2.0.tar.gz -
Subject digest:
5360478d184383e48eceea9233188cb2c3e087ba120f282cccbb5656604522eb - Sigstore transparency entry: 1340754909
- Sigstore integration time:
-
Permalink:
daradehghan/segmented-conformal-transport@661bb8be8073ecc5dbfce598eb50cfc1883b8bab -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/daradehghan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@661bb8be8073ecc5dbfce598eb50cfc1883b8bab -
Trigger Event:
push
-
Statement type:
File details
Details for the file tsconformal-0.2.0-py3-none-any.whl.
File metadata
- Download URL: tsconformal-0.2.0-py3-none-any.whl
- Upload date:
- Size: 36.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eede834d0e14e8b80feb16cfb8a304a1491a9fa735b27f7435a2f2c1d723d1f4
|
|
| MD5 |
069a488482a7ac260b259833ae5b383b
|
|
| BLAKE2b-256 |
3526f401ba7e331491e53b4e65d70a2b3dd74932848647c1fd4d8d9901815718
|
Provenance
The following attestation bundles were made for tsconformal-0.2.0-py3-none-any.whl:
Publisher:
release.yml on daradehghan/segmented-conformal-transport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tsconformal-0.2.0-py3-none-any.whl -
Subject digest:
eede834d0e14e8b80feb16cfb8a304a1491a9fa735b27f7435a2f2c1d723d1f4 - Sigstore transparency entry: 1340754910
- Sigstore integration time:
-
Permalink:
daradehghan/segmented-conformal-transport@661bb8be8073ecc5dbfce598eb50cfc1883b8bab -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/daradehghan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@661bb8be8073ecc5dbfce598eb50cfc1883b8bab -
Trigger Event:
push
-
Statement type: