Application: available
Infer the state nobody measures.
The two quantities that decide how a heater is performing are almost never instrumented. Fouling has no transmitter. True excess air is not what the stack analyser tells you. Both can be inferred from tags you already record.
What we can recover, and what we cannot
Three latent states were tested against a 120-day history. The scores decide what ships.
Blocked-CV R2 from ml_metrics.json, key soft_sensor. A sensor that scores badly is gated off in code, not flagged in a footnote.
Why these two matter
Fouling index. An insulating layer on the convection tubes sends heat up the stack that should have reached the process. Nobody measures it, so cleaning gets scheduled on the calendar or on a hunch. Inferred continuously, it lets a decoke be timed on condition, and it moves the safe lean-air limit, which is why we optimise air and cleaning together rather than separately.
True excess air. The stack O2 analyser reads a mixed average downstream of everything. Air ingress, a skewed register or a degraded burner all put a gap between that reading and what the burners are actually getting. The inferred value is what the optimiser trims against.
The one we switched off.
Fuel hydrogen cannot be inferred from the available tags, so it is switched off and nothing downstream reads it. A refinery that wants it online needs a Wobbe meter or a fast GC on the fuel header. More modelling will not recover a signal the tags do not carry.
We are showing you a failure on a product page because the alternative is shipping a number at R2 0.05 and letting an optimiser act on it. A soft sensor that is quietly wrong is worse than no soft sensor, and you would have no way to tell from a dashboard.