Kaggle
Chemical Process Monitoring Time-Series Dataset
Datadory delivers Commodity Chemicals process-telemetry data covering ninety unbroken days inside six simulated chemical reactors - 777,600 one-minute rows and 21 sensor, process and label columns, split across two operating regimes (baseline and stress), with a slow seasonal term bending the baseline, ~6 percent staged sensor dropouts, four labeled gradual fault modes touching ~3.6 percent of samples, per-minute efficiency-loss severity and a time-to-fault countdown for remaining-useful-life modeling.
API, files, or your warehouse. Daily, weekly, or hourly.
- Where it covers
- Not applicable by design - simulated reactors, so there is no country, region or site dimension; the physics is the coverage
- How far back
- 90 continuous days, 2024-01-01 00:00 through 2024-03-30 23:59, sampled every minute without a gap - long enough for the seasonal term to bend the baseline
- How fine
- one row per reactor per minute - six units x 129,600 minutes = 777,600 rows x 21 columns, dropouts included
What is the Kaggle Chemical Process Monitoring Time-Series Dataset?
Kaggle — Chemical Process Monitoring Time-Series Dataset is a fully synthetic, minute-level multivariate record of six simulated commodity-chemical reactors - 777,600 rows and 21 columns covering ninety unbroken days from midnight on 1 January 2024 to the last minute of 30 March. Its author describes it as a continuous chemical reactor system built with realistic industrial sensor behavior, control dynamics, seasonal effects, multiple operating regimes and gradual fault development, and states plainly that no real plant or proprietary data is involved.
What makes it interesting for Commodity Chemicals work is that it is not a flat table of random numbers. Three reactors run regime A baseline operation and three run regime B stress operation - hotter, pressurized, with cooling that underperforms and noise that misbehaves. A slow sinusoidal ambient-temperature term bends cooling efficiency across the whole quarter, so the same reactor looks different in March than it did in January. Faults arrive gradually, not as instant step changes, and every row carries the labels that make supervised work possible: fault_type, efficiency_loss_pct and time_to_fault_min. Get a sample of this dataset scoped to the reactors and windows you want to test against.
What do the rows actually look like?
Three opening minutes from reactor A_R1, straight from the file:
# CHEMICAL_PROCESS_TIMESERIES.CSV -- REACTOR A_R1, REGIME A, THE OPENING MINUTES
timestamp reg reactor temp press feed coolant agit_rpm
2024-01-01 00:00:00 A A_R1 181.1356 15.7910 101.1089 79.1546 305.7799
2024-01-01 00:01:00 A A_R1 182.2498 15.7070 98.9324 - 302.2836
2024-01-01 00:02:00 A A_R1 183.1297 15.5934 99.7922 80.5937 -
# THE SAME FIRST MINUTE, WIDER VIEW
ambient_temp_effect : 0.0000000 agitator_speed_rpm : 305.7799
reaction_rate : 0.7245 conversion_rate : 99.1518
selectivity : 91.9274 yield, vibration, motor current,
power, both setpoints : further channels alongside
# LABEL DISTRIBUTION, ALL 777,600 ROWS
fault_type 0 normal : 749,699 rows
fault_type 1 gradual fault : 9,143 rows
fault_type 2 gradual fault : 6,842 rows
fault_type 3 gradual fault : 4,474 rows
fault_type 4 gradual fault : 7,442 rows
faulted share : ~3.6 percent
# SHAPE
reactors : 6 (A_R1-A_R3, B_R1-B_R3) regimes : 2
rows per reactor : 129,600 columns : 21
cadence : 1 minute x 90 days total : 777,600 rowsThe texture tells you how to work with it. Sensor values arrive at full float precision, so a temperature reads 181.1355580507772 rather than 181.14 - keep the digits, they carry the drift signals. Some cells arrive empty: the simulator stages roughly 6 percent sensor dropouts, concentrated in the coolant-flow and reactor-pressure channels, which is exactly the missing-data problem a real historian hands you. And the labels are rare by design - about one row in twenty-eight carries a fault, spread across four modes, which is the class imbalance any honest detector has to survive.
What fields does each column carry?
Twenty-one columns group into five jobs. Identity and context: timestamp, operating_regime, reactor_id and ambient_temp_effect tell you which unit, which minute, which world-state. Control-room sensors: reactor_temp, reactor_pressure, feed_flow_rate, coolant_flow_rate and agitator_speed_rpm are the channels an operator would watch on a trend screen. Quality variables: reaction_rate, conversion_rate, selectivity and yield_pct say how well the reaction is going. Equipment health: vibration_rms, motor_current and power_consumption_kw watch the machinery instead of the chemistry.
Then the part most sensor dumps lack. Control intent: temp_setpoint and pressure_setpoint record what the loops were asked to hold, so setpoint-versus-measurement gaps become a diagnostic rather than a guess. Labels: fault_type classes the minute, efficiency_loss_pct grades its damage and time_to_fault_min counts down to the event. Those three columns are why this dataset supports predictive-maintenance modeling instead of just plotting.
Where does the coverage sit?
- Geography: none, deliberately. These are simulated reactors, so there is no country, region or site dimension to join against - the physics is the coverage.
- Temporal: ninety continuous days, 2024-01-01 00:00 through 2024-03-30 23:59, sampled every minute without a gap. Long enough for the ambient sinusoid to bend the baseline, short enough to profile in an afternoon.
- Granularity: one row per reactor per minute - six units times 129,600 minutes equals 777,600 rows, each carrying 21 columns.
A caution worth more than most metadata: the catalog blurb undersells the depth, describing roughly a quarter-million rows over about half a year, while the file itself holds 777,600 rows across 90 days. We profile the artifact, not the brochure - and the difference matters when you budget rows for training versus validation.
How is the data delivered?
API, files, or your warehouse. Daily, weekly, or hourly.
You pick the channel and the cadence; the twenty-one-column dictionary above travels unchanged across all three. Files suit benchmark runners loading the full 90-day window once and iterating locally, API payloads suit products that pull a reactor-day at a time inside a dashboard or a demo, and warehouse delivery suits teams joining minute-level telemetry with their own maintenance logs in SQL. Changing cadence is a settings conversation, not a re-integration project.
Who uses this data, and for what?
- Data scientists and ML engineers benchmark anomaly detection, fault diagnosis and forecasting models on labeled ground truth - four gradual fault modes, a 3.6 percent positive class, and leave-one-reactor-out splits ready-made by reactor_id.
- Reliability and process-engineering teams prototype predictive-maintenance logic on time_to_fault_min before pointing anything at production historians, and use efficiency_loss_pct to tie alarms to money instead of just to alerts.
- Developers and data-product builders stand up digital-twin demos, monitoring dashboards and alerting workflows against realistic dynamics - regimes, seasonality and dropouts included - without waiting on a plant.
- Journalists, academics and students teach and write about industrial sensing with data that carries no confidentiality baggage, because nothing in it came from a real facility.
- Consultants and analytics vendors score competing monitoring tools against one shared reference instead of everyone grading their own homework.
Which personas get the most value?
Data scientists and ML engineers get the rarest thing in applied forecasting work: labels. fault_type classes the minute, time_to_fault_min converts the problem into remaining-useful-life regression, and the two-regime design punishes models that quietly memorized one operating envelope. Developers and data-product builders get realistic motion for demos - a reactor that drifts with the seasons and drops a coolant reading now and then beats a sine wave every time. Competitive-intel and product teams get a neutral yardstick for scoring monitoring vendors. Investors and quants get a reference environment for stress-testing industrial-IoT theses without buying hardware. Journalists, academics and students get citable, confidential-free material for teaching what a control room actually sees.
Why request this through Datadory?
Because the raw artifact arrives as a quarter-gigabyte CSV with opinions. We ship it typed against the twenty-one-field dictionary above, with a documented policy for the ~6 percent dropout cells instead of silent nulls, label columns joined and typed so a classifier trains on arrival, and regime-aware splits built in so nobody accidentally validates on the operating condition they trained on. Need engineered features - rolling drift statistics, per-reactor baseline residuals, one-row-per-episode fault tables? Those come mapped onto the same identifiers.
Get a sample of this dataset cut to the reactors, windows and label modes you care about, then put the full window on the delivery cadence your sprint plan actually runs on.
Which notes pair with this dataset?
Notes that pair well with this page:
- NIST Chemistry WebBook - evaluated thermochemistry and physical constants to anchor the simulated sensor ranges in real chemistry.
- EPA TSCA Chemical Substance Inventory - the regulatory universe of US commercial chemistry behind the substance classes these reactors stand in for.
- OECD eChemPortal - federated hazard and classification records across 34 government databases for the same chemistry.
Background reading: Predictive Maintenance and Multivariate Time Series. Browse the vertical on the Commodity Chemicals industry hub or the ranked best commodity chemicals datasets.
Field dictionary
Every field below is documented against real records. The full dictionary ships with the sample.
| Field | Type | Definition | Example |
|---|---|---|---|
timestamp | datetime | One-minute sample stamp; 129,600 consecutive minutes per reactor with no gaps, from midnight 1 January 2024 to 23:59 on 30 March 2024. | 2024-01-01 00:00:00 |
operating_regime | enum | A or B. Regime A runs baseline operation; regime B runs stress operation with higher temperature and pressure, reduced cooling efficiency, more measurement noise and a higher fault probability. The stratification variable for any honest train/test split. | A |
reactor_id | string | Reactor unit within its regime - A_R1 through A_R3 and B_R1 through B_R3, 129,600 rows apiece. Leave-one-reactor-out transfer experiments start from this column. | A_R1 |
ambient_temp_effect | number | Slow sinusoidal seasonal term that modulates cooling efficiency and pressure stability - the reason a model fitted on the first week drifts out of calibration by late March. | 0.0004848174217947801 |
reactor_temp | number | Reactor temperature sensor reading - the primary controlled variable and usually the first place regime-B stress shows up. | 181.1355580507772 |
reactor_pressure | number | Reactor pressure sensor reading; subject to simulated dropouts that arrive as empty cells. | 15.791012963824423 |
feed_flow_rate | number | Feed flow rate into the reactor - the manipulated input a control experiment would reach for first. | 101.10888211782434 |
coolant_flow_rate | number | Coolant flow rate; its effectiveness degrades under regime-B stress and the channel drops out occasionally. | 79.15464501147167 |
agitator_speed_rpm | number | Rotational speed of the agitator in rpm - the mixing-energy signal that pairs with motor current and vibration. | 305.7799314023679 |
reaction_rate | number | Reaction-rate process variable computed by the simulator's kinetics layer. | 0.7245422322031088 |
conversion_rate | number | Share of feed converted by the reaction, in percent; sags as fault conditions develop. | 99.15176033534667 |
selectivity | number | Selectivity percentage - of what converted, the fraction landing on the desired product. | 91.92742361441097 |
yield_pct | number | Process yield percentage - conversion and selectivity folded into the one number a plant manager quotes. | - |
vibration_rms | number | Root-mean-square vibration on rotating equipment - the classic early-warning channel for mechanical degradation. | - |
motor_current | number | Current draw of the agitator drive; climbs with fouling-style fault modes. | - |
power_consumption_kw | number | Unit power draw in kilowatts - the energy lens on the same disturbances the sensors catch. | - |
temp_setpoint | number | Temperature control-loop setpoint - read it beside reactor_temp to separate what the controller asked for from what the sensor reports. | - |
pressure_setpoint | number | Pressure control-loop setpoint; setpoint-versus-measurement gaps localize which loop a fault lives in. | - |
fault_type | integer | The label. 0 marks normal operation; values 1 through 4 denote four distinct gradual fault modes. Roughly 3.6 percent of rows carry a nonzero label. | 0 |
efficiency_loss_pct | number | Percent efficiency loss associated with developing fault conditions - the severity axis behind the class label. | - |
time_to_fault_min | integer | Minutes remaining until a fault event - turns classification into a remaining-useful-life regression target. | - |
Questions buyers ask
What is the Kaggle Chemical Process Monitoring Time-Series Dataset?
A fully synthetic multivariate time series of six simulated commodity-chemical reactors: 777,600 rows at one-minute resolution across 90 days, 21 sensor, process and label columns per row, two operating regimes (baseline and stress) split evenly across the units, and labeled gradual faults. The author states no real plant or proprietary data is used.
How many rows and columns does the dataset have?
777,600 rows by 21 columns. Each of the six reactors (A_R1-A_R3, B_R1-B_R3) contributes 129,600 consecutive one-minute observations spanning 2024-01-01 00:00 to 2024-03-30 23:59. Note the catalog blurb describes a smaller row count over a longer span - the file itself carries the 90-day, 777,600-row shape above.
Is the data from a real chemical plant?
No. It is generated by a simulation designed to behave like one: control-loop setpoints chasing measurements, a slow seasonal sinusoid bending cooling performance, rising measurement noise under stress, staged sensor dropouts around 6 percent of cells, and faults that develop gradually rather than switching on. Realistic texture, zero confidentiality exposure.
What do the fault labels cover?
Three columns. fault_type assigns each minute a class - 749,699 rows are normal (0) and 27,901 rows carry one of four gradual fault modes (9,143 type 1, 6,842 type 2, 4,474 type 3, 7,442 type 4), a 3.6 percent positive class. efficiency_loss_pct grades the severity, and time_to_fault_min counts down the minutes to the event for remaining-useful-life modeling.
What is the difference between the two operating regimes?
Regime A is baseline operation; regime B is stress operation with higher temperature and pressure, reduced cooling efficiency, increased measurement noise and a higher probability of fault development. Three reactors run each regime, which makes regime-aware splitting - and testing whether a model survives a new operating envelope - straightforward.
Why do some cells arrive empty?
The simulator stages sensor dropouts affecting roughly 6 percent of cells, concentrated in the coolant_flow_rate and reactor_pressure channels. That is a feature, not a defect: missing-data handling is part of real process monitoring. We document every gap and can impute, flag or mask them on delivery - your call when you request a sample.
See the rows before you pay anything.
Name this dataset and we send real records from it — scoped to the fields you asked for.