Operating regimes and causal features
The compressor is off, starting, offloaded or loaded, and a deviation means something different in each. Features computed without regard to regime average across four different machines.
Precision–recall, honestly scored
Out-of-sample windows only, walk-forward with a 48-hour embargo. The prevalence floor is 0.0200, which is where a useless model sits.
Runs
| Run | Model | Features | AUPRC | ROC-AUC |
|---|---|---|---|---|
| R7 | causal | 89 | 0.0194 | 0.158 |
| R8 | causal + regime | 116 | 0.0183 | 0.191 |
| R9 | logistic regression | 89 | 0.0230 | 0.476 |
| R10 | isolation forest | 89 | 0.0208 | 0.394 |
Per-event detection — where the value actually is
Window-level average precision says these models are useless. Episode-level detection says something different. Both are true, and the difference is the entire argument about metric selection.
| Event | Start | Scoring | Peak score percentile | Lead time of peak (h) |
|---|---|---|---|---|
| F1 | 2020-04-18 00:00:00 | in the training block | not scored | — |
| F2 | 2020-05-29 23:30:00 | out of sample | 94.4% | 43.8 |
| F3 | 2020-06-05 10:00:00 | out of sample | 95.7% | 46.8 |
| F4 | 2020-07-15 14:30:00 | out of sample | 95.5% | 35.7 |
What this asset can and cannot support
Stating this out loud is not a weakness in the demonstration. A supplier who shows four-for-four detection on four events is either leaking or overfitting, and the engineers in the room already know it.
Computed by scripts/build_models.py in 86.4s at 2026-08-09T19:08:15+00:00 · scikit-learn 1.6.1 · seed 20260809 · source: MetroPT-3 (Air Production Unit of a Metro do Porto train), CC BY 4.0, DOI 10.24432/C5VW3R. Nothing on this page is hardcoded.