Same Fault, Two Valves
Two cooling-water valves start sticking at 08:00 on a simulated plant. A standard monitor raises an alarm on one within 9 minutes. The other, it cannot tell apart from a normal day.
I wanted to see, with real numbers, how much of a plant's trouble shows up in its recorded data. So I ran an experiment on a public benchmark: a simulated chemical plant that process-control researchers have worked with since 1993. It records 41 measurements and 11 controller outputs every three minutes.
I gave it the same fault in two places: a cooling-water valve that sticks, once on the reactor and once on the condenser, both from 08:00. A standard monitor raised an alarm on the first within 9 minutes. On the second, over the next forty hours, it flagged about as often as it does on a normal day.
01One plant, run twice
The data is a public dataset (Rieth and colleagues, 2017) of 21,000 simulated runs of the Tennessee Eastman process. I scored faults on its 48-hour test runs. In those, each faulty run has a twin: for the first eight hours it matches a normal run value for value. At 08:00 the fault switches on and the two days split. I checked this for all 400 faulty runs used here.
So each chart below shows the same day twice, with the fault and without it.
02A standard monitor, trained on normal running
I trained a standard monitor from the process-monitoring textbooks: principal component analysis (PCA) on all 52 recorded values, fitted to 250,000 samples of normal operation. It flags any sample that falls outside what normal looked like, at a 99% limit. Three flags in a row count as an alarm.
03Valve one: the reactor's cooling water
At 08:00 the reactor's cooling-water valve starts to stick, and the reactor temperature starts to swing with it. The first sample after 08:00 is already flagged. The alarm follows at 08:09.
Show the numbers, hour by hour
The monitor itself only says that something is off. To see which readings moved, I compared each run with its normal twin, which no real plant has. The three that moved most are the reactor cooling-water valve signal (13.9× its normal spread), reactor temperature (13.5×) and the reactor cooling-water outlet temperature (10.5×). Nothing else moved more than 3%.
04Valve two: the condenser's cooling water
Same fault, same 08:00, different valve. This time the index stays where a normal day keeps it.
Show the numbers, hour by hour
There is a trace, if you know where to look. Across the 20 runs, the condenser cooling-water outlet temperature is the value that widens most against its twin, by a median of 1.09 times.
Show the numbers, hour by hour
05Quiet is the right output, for the wrong reason
Researchers who sort these faults put the condenser valve among the controllable ones: the control system compensates and the process state barely moves. For faults like that, they write, a monitor's flag rate "should ideally be as low as" its false-alarm rate, so operators are not distracted (Sun and colleagues, 2020; they sort the faults from prior knowledge, on a different dataset from the same simulator).
So staying quiet is the right output here. PCA did not decide that, though. The same paper notes that PCA cannot tell whether a fault is controllable or not.
What this monitor lacks is concrete. The valve's real stem position is not one of the 52 recorded values, and the recorded signal for that valve, XMV(11), barely changes: its spread after 08:00 is 1.00 times its twin's. Methods built for faults like this do better. Du and Du (2018) report detecting it, and two other faults most methods miss, from the same kind of process data.
06What a person on rounds would see
A sticking valve has a look: the stem holds, then jumps, instead of travelling smoothly. Someone standing at it at the right moment can see it.
The simulator has no people in it, so I wrote these two field notes myself, the way a round could plausibly record them. They are fiction, and so are the gold marks on the charts above, which sit at the minute each note was written.
Reactor CW valve. Panel called it in. Stem not moving smooth: holds, then jumps. Reactor temp swinging with it. Called maintenance.
Condenser CW valve sticking. Stem holds, then jumps. Panel says normal. Called maintenance.
07What each source can answer at hour 48
Valve two, the run where the monitor stays quiet. Three questions, asked of this PCA monitor and then of the monitor plus one fictional field note.
| Question | This PCA monitor | Plus one fictional note |
|---|---|---|
| Is anything wrong? | Nothing it can separate from normal: 2.25% of samples flagged in this run, 2.00% in its normal twin. | Yes: the note reports the condenser cooling-water valve sticking. |
| Which equipment? | It does not say. A flag is not a location. | The condenser cooling-water valve. |
| Since when? | It does not say. | No later than 10:06, when the note was written. |
For valve one, the monitor answers the first and third on its own: something is wrong, since 08:09. The note adds which valve, and that its stem is sticking.
08How this was done
- Data. Rieth, Amsel, Tran and Cook (2017), Harvard Dataverse, public domain. The three files used were checksum-verified at download: 500 normal runs to train, 500 more to measure false alarms, and test runs 1 to 20 of each of the 20 faults.
- Names. Recorded values, fault types and the short descriptions of faults 16 to 20 follow the model code in N. L. Ricker's Tennessee Eastman archive, which marks 16 to 20 as unknown. Where that code says the separator's cooling water, I say the condenser's, as Du and Du do.
- Monitor. PCA on the 52 standardised values, 31 components (90.1% of the variance), Hotelling T² and SPE limits at 99%. A sample is flagged when either crosses its limit. An alarm is three flags in a row, timed at the third.
- Measured. The flag rate on 480,000 normal samples, and the flag rate, alarm count and alarm delay for all 20 faults. Full table below.
- Checked. A second implementation, written separately, reproduced every measured number quoted in the text. Changing the tuning (80, 90 or 95% of the variance, or a 99.9% limit) does not change the picture.
- Tools. Python (numpy, pandas, scipy). The 837 MB R data file is read by a small streaming reader written for this, which matched a reference reader value for value on the two normal-running files. Charts are plain SVG. I wrote the pipeline with an AI coding assistant, to my specification; every number on the page comes from that code and its separate re-check.
- Code. The whole pipeline is public on GitHub, with the steps to download the data and re-run every number yourself.
- Not claimed. This is a simulation, not a plant, and it tests one kind of monitor. The field notes are fiction. Neither the dataset's authors nor Pacific Science & Engineering Group reviewed or endorse this page.
All 20 faults, measured
| Fault | Type | What is disturbed | Flagged after 08:00 | Runs that alarmed | Median alarm delay |
|---|---|---|---|---|---|
| 1 | Step | A/C ratio of stream 4, B composition constant | 99.76% | 20 of 20 | 15 min |
| 2 | Step | B composition of stream 4, A/C ratio constant | 98.79% | 20 of 20 | 42 min |
| 3 | Step | D feed (stream 2) temperature | 2.02% | 4 of 20 | 1491 min |
| 4 | Step | Reactor cooling water inlet temperature | 99.94% | 20 of 20 | 9 min |
| 5 | Step | Condenser cooling water inlet temperature | 27.49% | 20 of 20 | 9 min |
| 6 | Step | A feed loss (stream 1) | 100.00% | 20 of 20 | 9 min |
| 7 | Step | C header pressure loss (stream 4) | 100.00% | 20 of 20 | 9 min |
| 8 | Random | A/B/C composition of stream 4 | 96.96% | 20 of 20 | 66 min |
| 9 | Random | D feed (stream 2) temperature | 2.07% | 5 of 20 | 1962 min |
| 10 | Random | C feed (stream 4) temperature | 41.66% | 20 of 20 | 136.5 min |
| 11 | Random | Reactor cooling water inlet temperature | 77.19% | 20 of 20 | 33 min |
| 12 | Random | Condenser cooling water inlet temperature | 98.81% | 20 of 20 | 25.5 min |
| 13 | Drift | Reaction kinetics | 94.95% | 20 of 20 | 126 min |
| 14 | Stiction | Reactor cooling water valve | 99.98% | 20 of 20 | 9 min |
| 15 | Stiction | Condenser cooling water valve | 2.34% | 8 of 20 | 1072.5 min |
| 16 | Random | (unknown) Heat transfer within the stripper heat exchanger | 29.68% | 20 of 20 | 118.5 min |
| 17 | Random | (unknown) Heat transfer within the reactor | 92.45% | 20 of 20 | 100.5 min |
| 18 | Random | (unknown) Heat transfer within the condenser | 93.90% | 20 of 20 | 160.5 min |
| 19 | Stiction | (unknown) Compressor recycle, separator and stripper underflow, stripper steam valves | 17.80% | 20 of 20 | 291 min |
| 20 | Random | (unknown) | 55.95% | 20 of 20 | 120 min |
Tuning sweep
| Variance kept | Limit | Components | Normal day | Valve one | Valve two |
|---|---|---|---|---|---|
| 80% | 99% | 25 | 1.98% | 99.98% | 2.53% |
| 90% | 99% | 31 | 1.95% | 99.98% | 2.34% |
| 95% | 99% | 36 | 2.04% | 99.98% | 2.64% |
| 90% | 99.9% | 31 | 0.19% | 99.96% | 0.28% |
Pick the three control valves you would least like to see stick. For each one, ask: if it stuck tonight, which screen would show it? If the honest answer is none, the first sign will be what someone notices walking past.
Which valve on your plant would you bet is sticking right now, with every screen reading normal?
Sources: Rieth, Amsel, Tran, Cook (2017), Additional Tennessee Eastman Process Simulation Data for Anomaly Detection Evaluation, Harvard Dataverse · Downs & Vogel (1993), A plant-wide industrial process control problem, Computers & Chemical Engineering 17(3) · N. L. Ricker, Tennessee Eastman Challenge Archive · Sun, Paiva, Xu, Sundaram, Braatz (2020), Fault Detection and Identification using Bayesian Recurrent Neural Networks · Du & Du (2018), ADCHEM
Ran this with a different monitor, or got a different answer? I would like to see it: [email protected]