← Raymond P. Capisinio

LAB 01 · 2026·10·22 · An experiment on a public benchmark

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.

1.95%of samples flagged on a normal day, measured on 500 normal runs it had never seen. In 145 of those 500 two-day runs it still raised at least one 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.

Monitor index over two days. 1.0 is the flag limit; above it, a sample is flagged. Run 1 of 20, picked by rule: the run whose flag rate is closest to the median of the 20, the lowest-numbered on a tie.
Show the numbers, hour by hour
9 minfrom the valve sticking to the alarm, the third flag in a row. All 20 runs alarmed; 99.98% of samples after 08:00 were flagged.

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.

Monitor index, zoomed in on the flag limit. The dashed normal twin lies over the sticking-valve run for most of the two days. Run 6 of 20, picked by the same rule.
Show the numbers, hour by hour
2.34%of samples flagged after 08:00, across all 20 runs. Normal runs over the same hours: 2.05%. 8 of the 20 runs raised an alarm at some point; so did 5 of their 20 normal twins.

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.

How much the condenser cooling-water outlet temperature wanders within each hour (standard deviation, °C), run 6. In this run it widens 1.06 times after 08:00, and a few other values widen about as much. It only stands out across all 20 runs.
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.

FictionField note · 08:24 · valve one run

Reactor CW valve. Panel called it in. Stem not moving smooth: holds, then jumps. Reactor temp swinging with it. Called maintenance.

FictionField note · 10:06 · valve two run

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.

QuestionThis PCA monitorPlus 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
FaultTypeWhat is disturbedFlagged after 08:00Runs that alarmedMedian alarm delay
1StepA/C ratio of stream 4, B composition constant99.76%20 of 2015 min
2StepB composition of stream 4, A/C ratio constant98.79%20 of 2042 min
3StepD feed (stream 2) temperature2.02%4 of 201491 min
4StepReactor cooling water inlet temperature99.94%20 of 209 min
5StepCondenser cooling water inlet temperature27.49%20 of 209 min
6StepA feed loss (stream 1)100.00%20 of 209 min
7StepC header pressure loss (stream 4)100.00%20 of 209 min
8RandomA/B/C composition of stream 496.96%20 of 2066 min
9RandomD feed (stream 2) temperature2.07%5 of 201962 min
10RandomC feed (stream 4) temperature41.66%20 of 20136.5 min
11RandomReactor cooling water inlet temperature77.19%20 of 2033 min
12RandomCondenser cooling water inlet temperature98.81%20 of 2025.5 min
13DriftReaction kinetics94.95%20 of 20126 min
14StictionReactor cooling water valve99.98%20 of 209 min
15StictionCondenser cooling water valve2.34%8 of 201072.5 min
16Random(unknown) Heat transfer within the stripper heat exchanger29.68%20 of 20118.5 min
17Random(unknown) Heat transfer within the reactor92.45%20 of 20100.5 min
18Random(unknown) Heat transfer within the condenser93.90%20 of 20160.5 min
19Stiction(unknown) Compressor recycle, separator and stripper underflow, stripper steam valves17.80%20 of 20291 min
20Random(unknown)55.95%20 of 20120 min
Tuning sweep
Variance keptLimitComponentsNormal dayValve oneValve two
80%99%251.98%99.98%2.53%
90%99%311.95%99.98%2.34%
95%99%362.04%99.98%2.64%
90%99.9%310.19%99.96%0.28%
Take this onto shift

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]