Factory sensors with failure labels
A year of hourly sensor readings from six machines, with the degradation stage, remaining useful life, and the failures and work orders they lead to.
Six machines monitored hourly for a year: vibration, bearing temperature, motor current, pressure and speed, with the machine's degradation stage, its remaining useful life, and a label for failure within 24 hours. Failures and the work orders that repair them are linked back to the readings.
- predictive maintenance
- IoT
- sensor data
- remaining useful life
- time series
- machine learning
Explore
Every table, profiled
Each column's type, spread, empties and most common values, measured from the CSVs in the download. Switch to the first rows to see the data exactly as it sits in the file.
sensor_readings.csv
52,560 rows · 13 columns · 1 foreign keys
- normal75%
- idle19%
- high5.4%
- stopped1.2%
- healthy57%
- degrading27%
- critical15%
- stopped1.2%
- seal_leak28%
- bearing_wear28%
- electrical_fault18%
- overheating15%
- imbalance10%
Keys
Every join resolves
4 foreign keys, 52,668 references checked against the table each one points at. None points at a row that does not exist.
assets
- site_idsites.site_id6 rows checked0 orphans
failure_events
- asset_idassets.asset_id39 rows checked0 orphans
sensor_readings
- asset_idassets.asset_id52,560 rows checked0 orphans
work_orders
- asset_idassets.asset_id63 rows checked0 orphans
Checks
What we checked
- 4 foreign-key relationships checked, 0 orphaned rows
- No row is dated before the row it belongs to
- 52,560 hourly readings from 6 machines; 1.7% are labelled as failing within 24 hours
- 39 failures; in the 72 hours before 39 of them the machine had already left the healthy state
- Remaining useful life counts down by one hour per reading in 100% of consecutive readings (it resets at a repair)
- 63 work orders, 63 of them closed on or after they opened
The same checks ship in the zip as INTEGRITY.txt, so you can rerun them in any SQL engine. How we verify
Questions, answered
Worth asking it
Each answer is the query's result on these exact files. Open one for its SQL and rows, then check your own query against it.
1How early can a model flag a failure using vibration and temperature alone?Vibration averages 2.57 mm/s over a week out and 4.45 mm/s in the last 24 hours.
-- Running readings only, by hours left before the next failure. select case when rul_hours <= 24 then '0-24 h' when rul_hours <= 72 then '25-72 h' when rul_hours <= 168 then '73-168 h' else 'over 168 h' end as hours_to_failure, count(*) as readings, round(avg(vibration_mm_s), 2) as avg_vibration_mm_s, round(avg(bearing_temp_c), 1) as avg_bearing_temp_c from sensor_readings where operating_mode <> 'stopped' and rul_hours is not null group by 1 order by min(rul_hours)hours_to_failure readings avg_vibration_mm_s avg_bearing_temp_c 0-24 h 897 4.45 62.2 25-72 h 1,868 4.21 60.9 73-168 h 3,735 3.87 59.5 over 168 h 39,942 2.57 53.5 2Does remaining useful life fall faster for some failure modes?seal_leak comes soonest after a repair (1,202 h on average), bearing_wear latest (1,340 h).
select failure_mode, count(*) as failures, round(avg(hours_since_last_repair), 0) as avg_hours_between_failures, round(min(hours_since_last_repair), 0) as shortest, round(max(hours_since_last_repair), 0) as longest from failure_events where hours_since_last_repair is not null group by failure_mode order by avg_hours_between_failuresfailure_mode failures avg_hours_between_failures shortest longest seal_leak 11 1,202 569 1,960 imbalance 4 1,208 799 1,529 electrical_fault 7 1,281 940 1,818 overheating 6 1,311 283 3,161 bearing_wear 11 1,340 598 2,785 3How much downtime does each failure mode cost?bearing_wear costs the most downtime: 119 hours over 11 failures.
select failure_mode, count(*) as failures, round(sum(downtime_hours), 1) as downtime_hours, round(avg(downtime_hours), 1) as avg_downtime_hours from failure_events group by failure_mode order by downtime_hours descfailure_mode failures downtime_hours avg_downtime_hours bearing_wear 11 119 10.8 seal_leak 11 114.1 10.4 overheating 6 92.2 15.4 electrical_fault 7 68.3 9.8 imbalance 4 47.7 11.9 4Are preventive work orders placed before or after degradation begins?Preventive work orders opened while the machine was healthy (13), degrading (6), critical (5).
-- The machine's state in the hour before each work order was opened (the work order itself stops it). select w.order_type, r.degradation_stage, count(*) as work_orders from work_orders w join sensor_readings r on r.asset_id = w.asset_id and r.recorded_at = date_trunc('hour', w.opened_at) - interval '1 hour' group by w.order_type, r.degradation_stage order by w.order_type, work_orders descorder_type degradation_stage work_orders corrective stopped 34 corrective critical 5 preventive healthy 13 preventive degrading 6 preventive critical 5
Every query runs on the files in the download as they are. ANSWERS.sql holds all of them; run it in DuckDB from the dataset's folder.
Full version · $15
This sample, or the full Predictive Maintenance Fleet
Two years of sensor readings, failures, repairs and costs for 240 machines. Try its free preview before you decide.
| This sample | Predictive Maintenance Fleet | |
|---|---|---|
| Rows | 52,669 | 179,004 |
| Tables | 5 | 6 |
| Columns | 42 | 91 |
| Formats | CSV | CSV |
| Audit | Keys and the checks listed above | 68 checks, all listed |
| Licence | CC0, free | Commercial use, $15 once |
| Built for | predictive maintenance, IoT, sensor data, remaining useful life | Remaining useful life (RUL) regression, Survival analysis, Anomaly detection and alarm tuning, Failure mode diagnosis, Maintenance strategy and cost, Dashboards and teaching |
Use it
Take it, or make one shaped like yours
Rebuild it byte for byte
The zip includes RECIPE.json: the Studio pack, the overrides and seed 20260921 that made these exact rows.
Your own tables, your own numbers
Describe the data you need in Studio and get connected tables with the totals you state, profiled like this and checked before you download.
The full version, and what goes with it
All premiumVibration through a life that ends in failure
240 machines at 4 plants, two years
Two years of sensor readings, failures, repairs and costs for 240 machines
Answer key
- failure_mode
- true_life_days
- true_failure_at
- +6 more
- Rows
- 179,004
- Tables
- 6
- Checks
- 68 of 68
Free preview18-question projectProfile and previewAn 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 preview
Related free datasets
All 12- Machine degradation100 machines monitored from commissioning to failure, with an exact remaining-useful-life label on every one of 23,118 readings.46,336 rows · 3 tables
- Synthetic AML transaction dataset with labelled typologies and ground truthA bank's customers, accounts and transactions, with the laundering typologies labelled, the rule-based alerts raised, and the cases and SARs that followed.44,612 rows · 6 tables
- Retail star schemaA dimensional model you can actually practise joins on: one fact table, four dimensions, 47,051 rows, every join resolving and every total known.47,051 rows · 5 tables
- Ecommerce storefrontA year of orders across five joined tables, with best sellers, heavy buyers, a real Q4 peak and totals that reconcile to the cent.49,493 rows · 5 tables
- B2B SaaS subscription analyticsAccounts, seats, MRR, churn and support load, where company size actually drives the plan.42,240 rows · 5 tables
- Credit risk portfolio3,000 borrowers and 4,200 commercial loans, where a credit rating actually predicts whether the loan defaults, at the rate S&P's own data says it should.7,200 rows · 2 tables
Fully synthetic. No real person, company or transaction is represented, and no production data was read to make it. CC0: use it anywhere, no attribution needed.

