Synthetic Data for Predictive Maintenance

Predictive maintenance has a data problem that is the opposite of most: failures are rare, expensive, and nobody wants more of them. So teams reach for the public datasets, and the public datasets mostly draw every row independently. In AI4I 2020, the most widely used one, tool wear is as likely to fall as to rise between consecutive readings of the same machine, and there is no remaining-life label at all. A dataset for predicting failure in which nothing progresses toward failure is a classification exercise wearing a prognostics costume. Misata inverts it: you declare when a machine fails, damage accumulates toward that moment, and every sensor follows the damage. Remaining useful life is therefore exact by construction rather than estimated after the fact, which is what makes the label worth training on.

The tables Misata generates

readingsOne row per machine per cycle, with rul_cycles exact on every row
unitsOne row per machine: its life, its failure mode, its split
sensorsWear that never falls, vibration that stays flat then climbs, torque that rises as the tool dulls
failure_modesEach mode accentuates the measurement it actually shows in, so the label is diagnosable
ground_truthThe latent damage state, kept out of the benchmark so it cannot leak

What holds true, every time

  • rul_cycles equals life minus cycle on every row, because the failure time was declared before any row existed
  • Accumulated wear never decreases within a machine, because material does not come back
  • Each failure mode drives its own measurement: a heat-dissipation failure really is the hot one
  • Sensors go missing by control type rather than at random, the pattern intermittently monitored fleets actually show
  • Train and test split by machine, never by row, so no trajectory is memorised across the line
  • Each machine draws its own susceptibility, so the fleet is a population rather than one machine repeated

Frequently asked

How is this different from AI4I 2020?

AI4I draws every row independently, so a machine has no history: its tool wear correlates -0.024 with time, and there is no remaining-life column. Here damage accumulates per machine, wear rises on 100% of steps, and rul_cycles is exact on all 23,118 rows.

Is the remaining useful life label exact or estimated?

Exact. The failure time is declared before any row is generated, so remaining life is life minus cycle by construction. Nothing is annotated, inferred or fitted after the fact.

Can I generate my own fleet instead of using the sample?

Yes. Change the fleet size, the life distribution, the failure modes or the sensors in misata.yaml and regenerate. The labels stay exact because they are derived from the declaration rather than measured off the output.

Is the physics validated against real bearings?

No, and we do not claim it. The damage law is a simplified lumped model, chosen so trajectories behave the way wear behaves rather than to match a specific machine. What is exact is the labels and the declared structure. The bearing defect frequencies in misata.degradation are a separate matter: those follow from geometry and shaft speed, and for the SKF 6205 at 1797 rpm the function returns the published 107.36 Hz.

Does it contain anyone's real equipment data?

No. Nothing is sampled from real machines and no model is fitted on any, so there is no confidential process data in the output and nothing to anonymise.

Is the sample dataset free?

Yes. Public domain, CC0, no signup and no attribution required. 100 machines, 23,118 readings, with a held-out split and a published baseline of 22.8 cycles mean absolute error against 58.9 for guessing the mean.