Measured, not promised

Evidence

The old README promised a 30–50% accuracy boost and shipped a model that ignored its inputs. This page only shows numbers a committed script reproduces — wins and losses alike.

The part most libraries hide

We publish the numbers our scripts reproduce — including where we lose

Event-timing audits on real held-out hardware. Lower is better (timing MAE in cycles). In these single-seed June runs APDTFlow won the battery and FD001 audits and lost to a linear baseline on FD002. A November 10-seed re-run of the battery audit put it slightly behind linear on average (mean 10.7 vs 9.7; ahead on 2 of 10 seeds): shown here, not buried.

Audit (real data, held-out units) APDTFlow Linear extrap. Persistence
Battery end-of-life 3 cells, leave-one-battery-out; June, one seed (10-seed re-run: mean 10.7, behind linear) 8.3 9.7 15.4
Turbofan FD001 40 unseen engines, 0.6% false alarms 8.3 8.7 11.5
Turbofan FD002 110 unseen engines, 6 operating regimes, 0.0% false alarms 9.2 8.1 11.3
0 false alarms across 2,638 no-crossing windows coverage 96 / 40 / 54 vs a 90% target battery re-run, 10 seeds: mean 10.7 vs linear 9.7 a script in experiments/ for every number
Trust panel showing the point-estimate bias and how to schedule around it

The trust panel reports its own miss

On cross-unit transfer the windows measured under their 90% target, and for distant events the point estimate saturates toward mid-horizon. That is why the operational rule exists:

schedule by act_by (the window's earliest edge), never by the point estimate.

Full benchmarks and reproduce commands →

Source of truth, with per-seed tables: docs/experiment_results.md. Windows are calibrated on the training windows, the library default; holding the most recent windows out instead is an option, and measured worse on these audits (docs/METHODOLOGY.md).

Grid accuracy

Is the base forecaster accurate?

6 datasets, 12-step horizon, MAE relative to seasonal-naive (under 1.0 beats it). APDTFlow beats seasonal-naive on 3 of 6 domains and wins outright on two; on smooth seasonal data the linear and Holt-Winters baselines are stronger, and we show those rows too.

Dataset APDTFlow Linear Holt-Winters
Daily min temperature (real) 0.73 0.74 0.80
Regime-switching nonlinear 0.77 0.83 0.86
Trend + dual seasonality 0.85 0.50 0.38
Retail-like multiplicative seasonal 1.01 0.68 0.81
Electric production (real, 397 pts) 1.52 1.03 1.23
Random walk (unpredictable) 1.86 1.15 1.12

For pure grid accuracy, tuned deep models (NeuralForecast) or zero-shot foundation models (Chronos-2, TimesFM, Moirai-2) may be stronger. APDTFlow is complementary — its value is predict_at and predict_when, which those models do not offer.

The full audit, in pictures

Evidence summary across three audits
Summary across the three event-timing audits.
FD002 robustness under shifting operating regimes
FD002: jet-engine timing under 6 operating regimes, with 0 false alarms.
Multivariate sensor-fusion audit
Multivariate fusion: sharper when it commits (5.9 vs 8.3 cycles), but commits less often.

Speed

CPU or GPU?

Training time per epoch, median of all epochs after the first, 3 fits each. Each training step runs as a CUDA graph on the GPU, which is what makes it win; before graph capture the default-size model trained 2x faster on the CPU. Single-window calls are still faster on the CPU.

Configuration CPU epoch GPU epoch Faster
Default-size model (hidden 16, batch 32) 4.60 s 1.04 s GPU, 4.4x
Continuous decoder (hidden 64, batch 64) 22.4 s 4.44 s GPU, 5.0x
NASA battery, 119 windows (hidden 16) 0.81 s 0.73 s about even
Large model (hidden 128, batch 256) 41.7 s 6.10 s GPU, 6.8x

Intel Core i7-12700H vs NVIDIA RTX 3050 Ti Laptop GPU (4 GB), WSL2, PyTorch 2.14.1, apdtflow 0.5.0. Full table, inference latency and method: docs/gpu_and_performance.md.

Reproduce every number

That pipeline is how every result on this page was produced — including the ideas we tested and rejected.

bash
python experiments/battery_eol_demo.py
python experiments/turbofan_when_demo.py
python experiments/fd002_robustness_demo.py
python experiments/benchmark_multidomain.py
python benchmarks/benchmark_device.py

Full protocol and per-cell breakdowns: docs/experiment_results.md. Have degradation or depletion data? Run python experiments/audit_predict_when.py on your own series and open a PR if APDTFlow wins.