Loading…
Loading…
A compact probabilistic load forecaster for the two SMARD net-load challenges of TS-Arena (24 h at 15 min, 72 h at 1 h): two small MLP quantile nets, 160,278 parameters in total, 144 kB and 150 kB as int8 ONNX, about 0.4 to 1.2 ms per series on one CPU thread. Self-evaluated on the TS-Arena Archive; not an official ranking. Code, protocol, ledger of the evaluations and reproduction scripts: https://github.com/sankalpsthakur/gridload-compact
weights/clock_ref.npz); anything that is not
a SMARD net-load series on the platform clock goes to a generic seasonal fallback with residual deciles, for which no claim is made.weights/hol_table.npz and derived from timestamps only.weights/net15_info.json, weights/net60_info.json and configs/final.json of the GitHub repository.holidays package (MIT), version 0.106.Self-evaluated on the TS-Arena Archive, window TEST-F (52 rounds, 2026-02-08 .. 2026-03-31; training cutoff 2026-02-06 23:45; configuration frozen and each variant evaluated once, pre-registered). Headline variant = the service code path with the int8 weights, scored with the platform's arena MASE and SQL against the 32 reference models of the Archive's field:
Scoring is the platform's arena MASE (MAE of the forecast divided by the MAE of the last-context-value persistence forecast over the same horizon) and SQL (scaled quantile loss, same scale), reimplemented from the
MIT backend of TS-Arena. This is a self-obtained evaluation on the TS-Arena Archive and not an official ranking. Protocol: selection rule, ensemble, spread grid and the eight evaluated variants were
pre-registered before any sweep, validation-stage or test-stage number existed; the configuration was frozen (hashes of the test-stage checkpoints) before the TEST-F evaluation; each variant was evaluated once
(16 evaluations), and an unchanged re-run of the frozen kernel gives byte-identical evidence tables. The definition-2 difference is carried by 17 archive-only late-March rounds; the intervals are the platform's
ISO-week block bootstrap (9 blocks in the full window) and are crude. Full tables, sub-windows, the ledger of all evaluations and the integrity checklist are in the GitHub repository (TEST-LOG.md,
INTEGRITY.md, results/).
| 15 min (definition 2) | hourly (definition 5) | |
|---|---|---|
| parameters per net / ensemble of 3 | 25,817 / 77,451 | 27,609 / 82,827 |
| ONNX ensemble, fp32 / int8 | 344,362 B / 144,175 B | 365,869 B / 149,554 B |
| spread (post-hoc scalar on the deciles, chosen on VAL-F) | 1.05 | 1.20 |
| latency, int8, model only, p50 (Kaggle CPU, AMD EPYC 7B12, 1 thread, batch 1, n=300) | 0.27 ms | 0.23 ms |
| latency, int8, end to end per series (numpy features + model), p50 | 1.16 ms | 1.23 ms |
| latency, fp32, model only / end to end, p50 | 0.28 ms / 1.18 ms | 0.24 ms / 1.27 ms |
| latency, Apple M4 (macOS), 1 thread, batch 1, int8, model only / end to end, p50 | 0.20 ms / 0.44 ms | 0.16 ms / 0.44 ms |
| latency, Apple M4 (macOS), fp32, model only / end to end, p50 | 0.14 ms / 0.39 ms | 0.12 ms / 0.39 ms |
Sources: results/bench-timeseries-b/out/bench_kaggle_cpu_{15,60}.json and results/bench-timeseries-b/m4_latency_{15,60}.json in the GitHub repository (median of 300 calls after warm-up, numpy features
included in the end-to-end figure).
The service (FastAPI, POST /predict, GET /health) is in the GitHub repository under submission/model-services/gridload-compact:
git clone https://github.com/sankalpsthakur/gridload-compact
cd gridload-compact/submission/model-services/gridload-compact
pip install -r requirements.txt # fastapi, uvicorn, pydantic, numpy, onnxruntime (pinned)
uvicorn app.main:app --port 8000 # reads ./weights, the same files as this repository
To use the files of this Hugging Face repository instead (run both from the service directory):
from huggingface_hub import snapshot_download
snapshot_download("sankalpsthakur/gridload-compact", local_dir="hf-weights")
GRIDLOAD_WEIGHTS=hf-weights uvicorn app.main:app --port 8000 # GRIDLOAD_PRECISION=fp32 selects the fp32 graphs (default int8)
Request: {"history": [{"ts": "2026-03-10T07:45:00.000Z", "value": 12345.0}, ...], "horizon": 96, "freq": "15min"} ("freq": "h" with "horizon": 72 for the hourly challenge; a list of such lists is a batch).
Response: {"prediction": [{"ts": ..., "value": ..., "probabilistic_values": {"q_0.1": ..., ..., "q_0.9": ...}}, ...]}.
| file | what |
|---|---|
weights/net15.onnx, weights/net15_int8.onnx |
15 min x 96 steps, 3-seed ensemble, fp32 (344,362 B) and int8 (144,175 B) |
weights/net60.onnx, weights/net60_int8.onnx |
1 h x 72 steps, 3-seed ensemble, fp32 (365,869 B) and int8 (149,554 B) |
weights/net15_info.json, weights/net60_info.json |
feature specification, spread, parameter counts, SHA-256 of the member checkpoints and of the ONNX files |
weights/hol_table.npz |
baked public holiday calendar table (DE federal and state, AT) |
weights/clock_ref.npz |
reference daily profile of the clock gate |
README.md |
this card |
holidays package (MIT).Self-evaluated, not peer-reviewed. Sankalp Thakur, October 2026.