Premium · 240 machines at 4 plants, two years
Predictive Maintenance Fleet
Two years of sensor readings, failures, repairs and costs for 240 machines
179,004 rows in 6 linked tables: 240 rotating assets at 4 plants, 175,440 daily sensor readings, 758 asset lives (runs), 520 work orders and 2,042 route inspections, 1 January 2024 to 31 December 2025.
Real run-to-failure data is scarce: plants replace parts before they fail, failures are rare, and the few public sets are one machine on a test rig. This fleet has the whole picture a reliability team works with: many machine types and failure modes, sensors that respond to the mode that is developing, repairs that cut lives short (censoring), and the money. Every reading carries the true remaining life, even where the part was replaced before it could fail, so a remaining-life model can be scored against what would really have happened.
Uses
What it is built for
Remaining useful life (RUL) regression
with
rul_daysortrue_rul_days, and failure within 30 days classification withfails_within_30d(5.7% positive, the realistic imbalance).Survival analysis
238 runs are right-censored at the cut-off and 194 were ended early by a repair or replacement; Weibull, Cox and Kaplan-Meier on
runs.csvwith load, climate and failure mode as covariates.Anomaly detection and alarm tuning
the alarms are rule-based (ISO zone, temperature, pressure, current, debris); beat them with a model, and measure false alarms against lead time.
Failure mode diagnosis
from the sensor signature: vibration for bearings, imbalance and misalignment, temperature for lubrication, pressure for impellers and seals, current for windings, oil debris for gears.
Maintenance strategy and cost
run-to-failure against condition-based against age-based replacement; breakdowns cost a median $29,513 against $9,692 for a condition-based repair.
Dashboards and teaching
MTBF, MTTR, availability, backlog, PM compliance, cost by site and criticality in Power BI, Tableau or SQL; a reliability engineering course or a CMMS demo.
Project kit
A portfolio project you can check yourself
A brief from the Reliability Manager at a four-plant manufacturing group, 18 questions from warm-up to stretch, and an answer key to grade against. Every answer was worked out twice on these files, in DuckDB SQL and separately in pandas, and the kit was written only when the two agreed.
The brief
Two-year reliability review and the case for online monitoring
From the Reliability Manager at a four-plant manufacturing group · 1 January 2024 to 31 December 2025
- BRIEF.mdthe request, from the Reliability Manager at a four-plant manufacturing group
- QUESTIONS.md18 questions, each asking for one value in a stated form
- load.sqlevery table into DuckDB with the right types
- check.pygrades your answers, names the misreading a wrong one matches
- solutions/the answer key and the SQL behind every answer
- WRITEUP_TEMPLATE.mdthe two pages a hiring manager reads
What the checker says
$ python kit/check.py kit/my_answers.csv
Q05 wrong that is the answer when you average the lives of the runs that failed, which leaves out the time the others ranA wrong answer is named for the mistake it matches, such as the wrong rows in a denominator or a mean where a median is asked, without giving the answer away. --reveal shows one answer and its SQL when you want it.
- Warm-up
- 4
- Core
- 8
- Stretch
- 6
Read all 18 questions
Warm-up
- Q01. Monitored assets. How many assets have online condition monitoring?
- Q02. Breakdowns. How many breakdown work orders (wo_type 'corrective (breakdown)') were raised in the two years?
- Q03. Maintenance spend. What was the total cost of all work orders, lost production included?
- Q04. Still running at the cut. How many runs were still running at the cut, 31 December 2025?
Core
- Q05. MTBF. Mean time between failures for the fleet over the two years: the asset-days running (readings with running true, one a day) divided by the number of breakdown work orders. Give it in days.
- Q06. MTTR. Mean time to repair: the average downtime of breakdown work orders, in hours.
- Q07. Typical breakdown. What is the median downtime of a breakdown work order, in hours?
- Q08. Availability. What share of asset-days was the fleet running (readings with running true, over all readings)?
- Q09. Lost output. What share of total work-order cost is lost production?
- Q10. The commonest breakdown. Which failure mode accounts for the most breakdown work orders?
- Q11. The costliest site. Which site (its site_code) had the highest total work-order cost?
- Q12. Warning time. For each run that ended in failure, find its first alarmed reading in the 90 days before the failure (ended_at). Over the runs that had one, what is the median number of days from that reading to the failure?
Stretch
- Q13. Where monitoring catches failures. For criticality A assets, of the runs that ended inside the window by a failure or by being caught by monitoring, what share were caught by monitoring?
- Q14. Alarm precision. Of the alarmed readings whose outcome is known (fails_within_30d is not empty), what share came in the 30 days before a failure?
- Q15. What a breakdown costs. What is the median total cost of a breakdown work order, divided by the median total cost of a condition-based one (wo_type 'corrective (planned, condition-based)')?
- Q16. Heat. What is the median true life (true_life_days) of runs at hot sites (climate 'hot and dry' or 'hot and humid') divided by the median at the other sites?
- Q17. Load and life. What is the Spearman rank correlation between an asset's load_factor_pct and the true_life_days of its runs, over every run (ties take their average rank)?
- Q18. A spare on the shelf. For breakdowns, what is the median downtime when the spare was not on hand (runs.spare_on_hand false) divided by the median when it was?
In the data
What the full files show
Computed from every row of the full dataset when it was packaged, not drawn as a target. The free preview is a slice of the same data.
Vibration through a life that ends in failure
- Gave warning
- Sudden
Chance of failing within 30 days, by ISO 10816-3 zone
- Zone A1.9%
- Zone B11.1%
- Zone C30.8%
- Zone D89.3%
Failures by mode
- bearing wear96
- shaft misalignment67
- seal leak52
- lubrication breakdown45
- rotor imbalance24
- winding insulation16
- gear tooth wear15
- impeller erosion11
What a work order costs, by type
- corrective (breakdown)$29,513
- corrective (planned, condition-based)$9,692
- preventive replacement$7,459
Answer key
The truth, in its own columns
What a model, a control chart or an analyst is trying to find ships next to the data, so you can score an answer instead of guessing at it. Each line is measured from the full files.
- runs.failure_modeThe true failure mode of the life, which sets the signals that move.8 values: bearing wear, shaft misalignment, seal leak…
- runs.true_life_daysHow long the life lasts to failure if nothing intervenes; a run caught or replaced early ends before it.70.9 to 2,921.1, mean 433.3
- runs.true_failure_atWhen the machine would fail, including for runs that were caught or renewed first.2024-01-10 08:59:05 to 2033-06-10 20:20:16
- runs.warning_signsWhether the failure gives signs a sensor can see, or comes suddenly.true on 82.3% of rows
- runs.pf_onsetThe share of the life at which the signals start to rise (the P on the P-F curve); near 1 for sudden failures.0.55 to 0.98, mean 0.69
- readings.life_usedThe share of the run's true life used at the reading.0 to 1, mean 0.46, 0.79% empty
- readings.rul_daysDays left until the run ends, however it ends.0 to 720.3, mean 158.2, 34.9% empty
- readings.true_rul_daysDays left until the true failure: the remaining-useful-life target.0 to 2,920.3, mean 313.8, 0.79% empty
- readings.fails_within_30dWhether the machine truly fails within 30 days: the classification target.true on 5.7% of rows, 3.9% empty
How it behaves
Measured on the files you download
Each of these is computed from the delivered rows when the dataset is packaged, not written as a target.
- Signals stay flat for most of a life, then rise along a P-F curve: median vibration on vibration-type failures goes 1.57 -> 1.63 -> 2.46 -> 8.46 mm/s from new to the last 3% of life.
- 91% of warned and 5% of sudden failures gave a sustained alarm first, median 41 days ahead. 21% of failures were sudden: some faults give no warning a sensor can see.
- Harder-worked machines live shorter (bearings with the cube of load): Spearman -0.57 between load factor and true life; hot sites wear machines out sooner (median true life 268 against 351 days).
- Near the end of a life, bearing temperature is 61 C against 42 C for bearing and lubrication failures against other modes; discharge pressure falls to 77% of nominal against 96% for impeller and seal failures.
- Breakdowns keep a machine down a median 51 h against 6 h for planned work; lost production is $20,543,709 of the $21,992,407 maintenance cost.
- Runs: 326 failures, 105 caught by monitoring, 89 age-based replacements, 238 still running at the cut-off. Sensor dropouts: about 0.8% of readings.
Audit
68 of 68 checks pass
Re-run on the delivered files by an independent script with plain pandas. The results ship in INTEGRITY.json.
- every key resolves; one reading per asset per day for all 731 days; runs of an asset never overlap and each starts after the last repair ended; a run still going at the cut-off has no end in the files;
- the run in force is rebuilt for every reading from the run table, and every label (run age, life used, remaining life, true remaining life, fails within 30 days) recomputes from it;
- no sensor value while the asset is down; pressure only on pumps and compressors, oil debris only on gearboxes and compressors; ISO 10816-3 zone, alarm and alarm reason recompute from the readings;
- one work order per run ended in the window, its type from how the run ended, its times from the run, its costs re-adding; inspection findings recompute from the measured vibration and follow each asset's PM interval;
- the physics above: P-F curve, mode-specific signals, load and climate against life, criticality against catches, sudden failures, false alarm rate.
All 68 checks
- ✓ sites.site_id unique
- ✓ assets.asset_id unique
- ✓ runs.run_id unique
- ✓ readings.reading_id unique
- ✓ work_orders.work_order_id unique
- ✓ inspections.inspection_id unique
- ✓ assets.site_id -> sites: 0 orphans of 240
- ✓ runs.asset_id -> assets: 0 orphans of 758
- ✓ runs.site_id -> sites: 0 orphans of 758
- ✓ readings.asset_id -> assets: 0 orphans of 175,440
- ✓ readings.site_id -> sites: 0 orphans of 175,440
- ✓ readings.run_id -> runs: 0 orphans of 174,047
- ✓ work_orders.run_id -> runs: 0 orphans of 520
- ✓ work_orders.asset_id -> assets: 0 orphans of 520
- ✓ inspections.asset_id -> assets: 0 orphans of 2,042
- ✓ a run's site and a reading's site are the asset's
- ✓ one reading per asset per day, every day of both years: 731 days x 240 assets
- ✓ a run's end = start + life; true failure = start + true life; back in service = end + downtime
- ✓ a failure ends at the true life; a renewal before it
- ✓ a run still going at the cut has no end in the files yet: 238 runs going at the cut
- ✓ each run starts the moment the last repair ends
- ✓ run numbers count up from 1 per asset
- ✓ each asset is part-way through a run on the first day
- ✓ no run starts after the cut-off
- ✓ outcome at cut-off: running when the run outlives the data
- ✓ every failure mode can happen to its kind of asset
- ✓ run_id is the run in force at the reading, empty while the asset is down
- ✓ running exactly when a run is in force; no run hours while down
- ✓ rul_days = run end - reading, and empty where the run was still going at the cut
- ✓ true_rul_days = true failure - reading (past a renewal too)
- ✓ life_used = age / true life
- ✓ fails_within_30d only in a run's last 30 days before a real failure, unknown where the cut came first
- ✓ no sensor value while the asset is down
- ✓ sensor dropouts are rare (about 1%): vibration_rms_mm_s 0.84%, bearing_temp_c 0.79%, motor_current_a 0.80%
- ✓ pressure only on pumps and compressors, oil debris only on gearboxes and compressors
- ✓ run hours are the asset's duty hours while running
- ✓ ISO 10816-3 zone recomputes from vibration
- ✓ alarm reason recomputes (vibration zone C/D, bearing over 85 C, pressure under 88% or current over 108% of expected at that load, oil debris over 1500/ml)
- ✓ daily load wanders around each asset's own load factor: median gap 0.5 points
- ✓ readings stay physical
- ✓ one work order for every run that ended inside the window, none for others
- ✓ work order type follows how the run ended
- ✓ planned work starts when the run is stopped, a breakdown once a fitter reaches it; all close when the asset is back
- ✓ a breakdown is called in minutes after it happens, planned work raised days before: median call 9 min
- ✓ a fitter reaches a P1 breakdown faster than a P2: P1 42 min, P2 146 min
- ✓ failure mode and component replaced are the run's
- ✓ total cost = parts + labour + lost production
- ✓ labour cost = hours x rate (breakdown overtime 135, planned 95)
- ✓ found condition: failed on breakdowns, a confirmed defect on monitored catches
- ✓ planned stops, planned work orders and inspection routes fall on weekday day shifts
- ✓ inspections fall inside the window: 2024-01-01 to 2025-12-04
- ✓ breakdowns happen around the clock: 71% outside weekday day shifts
- ✓ times are not snapped to a grid: 0.2% on a 6-minute mark
- ✓ an inspection finds the asset down exactly when no run is in force
- ✓ inspection finding recomputes from the measured vibration
- ✓ route frequency follows each asset's PM interval: 6-12 per asset
- ✓ vibration flat for most of the life, then rising toward a vibration failure: 1.57 -> 1.63 -> 2.46 -> 8.46
- ✓ bearings and lubrication run hot near the end; other modes do not: 61 C against 42 C
- ✓ impeller erosion and seal leaks lose pressure: 77% of nominal against 96%
- ✓ hot sites wear equipment out sooner: median true life 268 against 351 days
- ✓ harder-worked assets live shorter: Spearman -0.57
- ✓ critical assets have more failures caught in time: A 31%, B 13%, C 3%
- ✓ breakdowns keep an asset down far longer than planned work: 51 h against 6 h
- ✓ failures with warning signs alarm first, weeks ahead (the P-F interval); sudden ones mostly do not: 91% of warned and 5% of sudden failures gave a sustained alarm first, median 41 days ahead; 22% of failures sudden
- ✓ only a run with warning signs is caught by monitoring
- ✓ false alarms happen on healthy machines, rarely: 0.16% of readings in the first half of a life
- ✓ zone D is rare: 1.7% of readings
- ✓ every asset ends the data running or under repair; runs are right-censored at the cut-off: 238 censored runs
- ✓ runs: 758; failure 326, running at cut-off 238, caught by monitoring 105, age-based replacement 89
- ✓ failure modes: bearing wear 31%, shaft misalignment 15%, seal leak 12%, lubrication breakdown 11%, rotor imbalance 11%, winding insulation 7%, impeller erosion 6%, gear tooth wear 6%
- ✓ maintenance spend: $21,992,407, of it lost production $20,543,709
Tables
6 tables, 179,004 rows
Every table in the zip with what it holds, its rows and its columns. The bars are on a log scale, so the small reference tables still show.
- readingsOne reading per asset per day for two years: vibration RMS and crest factor, bearing temperature, motor current, discharge pressure, oil debris, load, ambient, ISO 10816-3 zone, alarm and its reason; plus labels (run age, life used, remaining life to the run's end and to the true failure, fails within 30 days)175,440 rows · 24 cols
- inspectionsRoute-based vibration checks at each asset's PM interval, with the measured value and the finding2,042 rows · 7 cols
- runsEvery life of every asset, from install or repair to the next failure or renewal: failure mode, true life, whether it gave warning signs, how it ended, downtime, and whether it was still running at the cut-off758 rows · 19 cols
- work_ordersOne per run that ended in the window: breakdown, condition-based or preventive, priority, raised/started/completed, component replaced, found condition, labour hours, parts, labour and lost-production cost520 rows · 19 cols
- assetsPumps, motors, fans, gearboxes and compressors: type, criticality A/B/C, rated power and current, nominal pressure, install year, load factor, duty hours, online monitoring or route-based, PM interval240 rows · 15 cols
- sitesFour plants in different climates: ambient temperature and its seasonal swing, spares lead time, cost of an hour of downtime4 rows · 7 cols
Explore
Every table, profiled
Each column's type, spread, empties and most common values, measured from the full CSVs. Switch to the first rows to see the data as it sits in the file.
readings.csv
175,440 rows · 24 columns · 3 foreign keys
- A80%
- B14%
- C3.6%
- D1.8%
- vibration76%
- pressure loss15%
- motor current6.5%
- oil debris2.7%
- bearing temperature0.2%
Keys
Every join resolves
10 foreign keys, 530,285 references checked against the table each one points at. None points at a row that does not exist.
assets
- site_idsites.site_id240 rows checked0 orphans
inspections
- asset_idassets.asset_id2,042 rows checked0 orphans
readings
- asset_idassets.asset_id175,440 rows checked0 orphans
- site_idsites.site_id175,440 rows checked0 orphans
- run_idruns.run_id174,047 rows checked0 orphans
runs
- asset_idassets.asset_id758 rows checked0 orphans
- site_idsites.site_id758 rows checked0 orphans
work_orders
- run_idruns.run_id520 rows checked0 orphans
- asset_idassets.asset_id520 rows checked0 orphans
- site_idsites.site_id520 rows checked0 orphans
In the zip
What you get
- CSVs: one file per table, with a header row and ISO dates.
- README.md: what each table holds, how the data behaves (measured), what was checked and what to know.
- ANSWER_KEY.md: what happened at the plant, when, where it shows and the query that finds it.
- INTEGRITY.json: the 68 audit checks and their results.
- RECIPE.json: the Misata blueprint that made these exact rows, seed 20240101.
- kit/: the project kit: the brief, 18 questions, load.sql for DuckDB, check.py, the answer key with its SQL, and the write-up template.
All 20 files
- sites.csv222 B
- assets.csv20 KB
- runs.csv128 KB
- readings.csv22.8 MB
- work_orders.csv107 KB
- inspections.csv184 KB
- README.md10 KB
- INTEGRITY.json10 KB
- RECIPE.json36 KB
- kit/BRIEF.md2 KB
- kit/QUESTIONS.md4 KB
- kit/README.md1 KB
- kit/WRITEUP_TEMPLATE.md2 KB
- kit/check.py3 KB
- kit/load.sql694 B
- kit/my_answers.csv100 B
- kit/questions.json5 KB
- kit/solutions/ANSWER_KEY.md9 KB
- kit/solutions/key.json7 KB
- kit/solutions/solutions.sql3 KB
Before you use it
Things to know
- ISO 10816-3 zone limits (2.3 / 4.5 / 7.1 mm/s) are applied to every asset for simplicity; real limits depend on machine class and foundation.
- The files show the records as they stood at the close of 31 December 2025. A run still going then has no end yet: no
ended_at,end_reason,life_days, downtime or return to service. Itsfailure_mode,true_life_daysandtrue_failure_atare the ground truth of the life it was living. true_rul_daysandtrue_failure_atare ground truth no plant could know; userul_daysfor a realistic label and the true values to study how censoring biases a model.rul_daysis empty on a run still going at the cut, andfails_within_30dis empty in its last 30 days, where the outcome was not yet known.pf_onsetis the fraction of the true life at which degradation became visible (about 0.985 for a sudden failure).- Lives are compressed so two years hold enough failures to learn from: the median life of a failure mode is 260 to 760 days, several times shorter than most plants see (a well-kept bearing or gear set often runs for years). The shape of each life (the P-F curve, the load and climate effects, the censoring) is what the data is built to teach, not its length; do not quote the MTBF as a benchmark.
lost_production_costis downtime hours times the site's hourly rate, scaled by criticality (A 1, B 0.45, C 0.12).- Sites, assets and models are invented; no real plant, manufacturer or equipment record is represented.
Questions
Before you buy
Is this real data?
What do I get?
Can I try it before buying?
How was it checked?
Is there a project to do with it?
Can I use it commercially?
What should I know before using it?
Can I get a bigger or different version?
Want it bigger, in another setting, or with your own columns? Have us build it or make it in Studio.
More premium datasets
All 9An X-bar chart with the truth underneath: flatness, characteristic 139
3 plants, 36 CNC machines, six months
Six months of control charts with the ground truth underneath
Answer key
- active_cause_id
- true_cause_shift_sigma
- true_tool_wear_sigma
- +6 more
- Rows
- 515,442
- Tables
- 15
- Checks
- 101 of 101
Free preview18-question projectProfile and previewQA review of manufacturing batch records, by month
One oral-solids plant, five systems, two years
Two years of a pharmaceutical plant's records, from process order to QP release
Answer key
- root_cause
- batch_disposition_outcome
- conclusion
- +6 more
- Rows
- 661,497
- Tables
- 65
- Checks
- 133 of 133
Free previewProfile and previewCard spending each month, debit and credit
2,500 US households at five banks and seven card issuers, two years
Five banks' raw statement lines, with every label behind them
Answer key
- description
- merchant_name
- category
- +6 more
- Rows
- 7,627,186
- Tables
- 14
- Checks
- 50 of 50
Free previewProfile and preview

