IND-Eval: Aligning Evaluation and Simulation for Industrial Time Series Foundation Models
Organizations: Cognite
Abstract
We introduce IND-Eval, a public benchmark that organizes industrial time series across domains into source-specific forecasting tasks. Relative to established benchmarks such as GIFT-Eval, it emphasizes finer sampling resolutions and a greater prevalence of multivariate forecasting. Evaluating Chronos-2, TiRex-2, and TimesFM-3, we find that TimesFM-3 achieves the lowest source-balanced aggregate nMASE and nCRPS and leads seven of nine sources under each metric; source-specific exceptions reinforce the need for domain-representative evaluation for model selection. These findings also motivate improving domain alignment during pretraining, where real industrial data are often too scarce to close domain-specific gaps directly; we therefore investigate whether a domain's statistical structure can guide simulator design. In a case study on two offshore well-monitoring regimes, we improve a general simulator's coverage using an oscillator-augmented simulation pipeline. This lowers forecasting error in the target domain but reduces performance on the subset of GIFT-Eval with natively univariate targets. A 50/50 mixture of the general and augmented simulation recipes achieves the lowest error among the three training recipes for all four event-metric pairs in the case study while recovering most of the lost GIFT-Eval performance. Together, these results illustrate how domain-representative evaluation can guide model selection and the composition of simulated data while revealing a trade-off between specialization and generality.
Figures & tables
Appendix figures & tables14 assets
Supplementary material from the paper’s appendix.
Appendix
| Source | Recorded system | Task construction | Tasks |
| NEATS | Offshore drilling streams with up to 12 canonical drilling variables at 1, 5, 10, or 12-second cadence | 21 well–event groups, each evaluated at 512- and 1,024-sample horizons | 42 |
| 3W | Multivariate oil-well instances organized into ten operating-event groups | One task per event and 512- or 1,024-sample horizon | 20 |
| PRONTO | Six annotated multiphase-flow transients with 12 targets and three known-future control variables | One task per annotated event and 512- or 1,024-sample horizon | 12 |
| Mesa del Sol | Fifteen months of microgrid power, voltage, frequency, and temperature measurements | Gap-bounded segments at 10-second, 2-minute, and 5-minute resolutions; 512-sample horizon | 3 |
| Tablet compression | Commercial batches with five direct-compression process targets | 25 product-code groups at 30-, 60-, and 180-sample horizons; one shared origin per batch | 75 |
| MetroPT-3 | Five channels from a metro train air-production unit | 190 leak-free, gap-bounded instances at 10-second cadence, evaluated at 30-, 60-, and 180-sample horizons | 3 |
| Source | Cleaning and resampling | Forecast-origin and exclusion rule |
|---|---|---|
| NEATS | Canonicalize channel aliases, units, and timestamps; retain up to 12 drilling targets; split at every cadence discontinuity; remove a channel if it is more than 80% missing, has at most three distinct values, or is flat on more than 75% of valid transitions. | Take up to five forward-anchored windows per source instance, 2,048 samples apart. An instance contributes only to horizons for which a full context and target fit. |
| 3W | Apply event-specific extraction, including a stitched transient and steady interval for event 1; mean-downsample to 2-second cadence except event 4, which remains at 1 second; interpolate sensor gaps; remove sparse, frozen, spike-dominated, and low-range channels. | Take up to two forward-anchored windows per instance. Except for event 9, drop a window only if every retained channel’s final 1,000 context points plus target span less than 5% of its earlier context range. This rule inspects the target interval. |
| PRONTO | Rename and align 15 process channels, then average the native 1-Hz data into 2-second bins. Twelve response channels are targets; Air In, Water In, and Air Valve are known-future covariates. | Fix origins at the six annotated events, use up to 4,096 pre-event samples, and skip an event–horizon pair when its pre-event history or post-event target is shorter than the horizon. |
| Mesa del Sol | Mask telemetry sentinels, known invalid codes, and short negative spikes; aggregate most channels by mean and one setpoint by its last value at 10-second, 2-minute, and 5-minute cadence. Mean bins require 80% native-sample coverage. Remove two near-constant setpoint channels and split at fully missing bins. | Take every non-overlapping 512-step window that fits within each gap-bounded segment. |
| Tablet compression | Preserve acquisition order; split when the batch or active-production state changes, time moves backwards, or a gap occurs; mask physically invalid SREL >15. Five process channels are targets. | Choose the earliest origin with at least 512 active context rows and a finite 180-step future for every target. Reuse that origin for the 30-, 60-, and 180-step horizons. This rule inspects the longest target interval. |
| MetroPT-3 | Sort by timestamp, remove four reported leak intervals, and split at the resulting row discontinuities or timestamp gaps over 15 seconds. No value resampling, interpolation, imputation, or scaling is applied to the output. | Use the latest origin with a shared 180-step future and 512–4,096 context samples. Remove dead-tail instances and require mean normalized context variability of at least 0.60 across four activity channels, with at least two channels at 0.10 or above. The dead-tail rule inspects the target interval. |
| Source | Cadence | Horizon (samples) | Horizon (physical) | Seasonal period |
|---|---|---|---|---|
| NEATS | 1, 5, 10, 12 s | 512, 1,024 | 8.5 min–3.4 h | 1 |
| 3W | 2 s (event 4: 1 s) | 512, 1,024 | 8.5–34 min | 1 |
| PRONTO | 2 s | 512, 1,024 | 17–34 min | 1 |
| Mesa del Sol | 10 s, 2 min, 5 min | 512 | 85 min, 17 h, 43 h | 1, 720, 288 |
| Tablet compression | 10 s (nominal) | 30, 60, 180 | 5–30 min | 1 |
| MetroPT-3 | 10 s | 30, 60, 180 | 5–30 min | 1 |
| Statistic | GIFT-Eval | IND-Eval |
|---|---|---|
| ACF-1 | 0.895 | 0.960 |
| ACF-5 | 0.555 | 0.823 |
| Spectral entropy | 0.559 | 0.428 |
| ARCH proxy | 0.667 | 0.845 |
| KPSS | 1.061 | 2.164 |
| Skewness | 0.581 | 0.091 |
| nMASE | nCRPS | |||
| Source | Naive | S-naive | Naive | S-naive |
| Aggregate | 1.217 | 1.000 | 1.294 | 1.000 |
| 3W | 1.000 | 1.000 | 1.000 | 1.000 |
| NEATS | 1.000 | 1.000 | 1.000 | 1.000 |
| PRONTO | 1.000 | 1.000 | 1.000 | 1.000 |
| Mesa del Sol | 1.280 | 1.000 | 1.410 | 1.000 |
| Setting | Chronos-2 | TiRex-2 | TimesFM-3 |
|---|---|---|---|
| Checkpoint | amazon/chronos-2 | NX-AI/TiRex-2 | google/timesfm-3.0-pytorch ; timesfm 3.0.1 |
| Targets | Joint within multivariate windows; separate across windows | Joint within multivariate windows; separate across windows | Joint within multivariate windows; separate across windows |
| PRONTO controls | Split into past and known-future covariate dictionaries | Supplied as one context-plus-future covariate tensor | Supplied as past_future_covariates |
| Quantiles | Requested at 0.1–0.9 | Checkpoint-native 0.1–0.9 | Checkpoint-native 0.1–0.9 |
| Horizon handling | Native for all tasks (adapter cap 2,048) | Chunks above checkpoint future_len , feeding back the median forecast | Native for all tasks (adapter cap 2,048) |
| Other settings | cross_learning=False ; float32 inference | Checkpoint-native forecast routine | use_symmetric_averaging , make_positive , and sort_quantiles enabled |
| Pretraining-overlap evidence | |||||
| Source | Rel. | Prior forecasting benchmark(s) | Chronos-2 | TiRex-2 | TimesFM-3 |
| Industrial core sources and documented benchmark overlap | |||||
| 3W | 2019 | none | unresolved | unresolved | unresolved |
| NEATS | unknown | none | unresolved | unresolved | unresolved |
| PRONTO | 2019 | none | unresolved | unresolved | unresolved |
| Mesa del Sol | 2023 | none | unresolved | unresolved | unresolved |
| Statistic | 3W | SarSim0 | SarSim0-oscillator |
|---|---|---|---|
| Robust skewness | 0.035 | 0.000 | 0.000 |
| Roughness | 0.0013 | 1.110 | 0.0046 |
| Trend strength | 0.132 | 0.082 | 0.735 |
| Spectral entropy | 0.204 | 0.782 | 0.297 |
| ACF level | 0.999 | 0.386 | 1.000 |
| ACF decay | 0.002 | 0.682 | 0.001 |
| Statistic | Leading component |
|---|---|
| ACF level | 0.505 |
| Spectral entropy | 0.498 |
| ACF decay | 0.442 |
| Log roughness | 0.384 |
| Trend strength | 0.369 |
| Isolated spike freq. | 0.093 |
| Hyperparameter | Value |
|---|---|
| Optimizer | NorMuon + AdamW |
| Learning rate | |
| Weight decay | 0.01 |
| Training steps reported | 50k |
| Effective batch size | 4,096 (2,048 2 accumulation) |
| Context length | 4,096 |
| Representation (dim.) | Simulator | NN rate (%) | Sibling-free (%) |
|---|---|---|---|
| Shape (256) | SarSim0 | 6.7 | 7.6 |
| SarSim0-oscillator | 19.9 | 27.6 | |
| Log-band power (29) | SarSim0 | 2.5 | 3.3 |
| SarSim0-oscillator | 17.0 | 24.9 | |
| Autocorrelation (29) | SarSim0 | 4.4 | 6.3 |
| SarSim0-oscillator | 17.1 | 27.8 |