Automatic Detection
Last updated on July 22, 2026
Automatic detection answers one question: is what I am seeing now unusual for this line? It sets no absolute thresholds, because a threshold that is right for a 99.5% line is wrong for a 60% line, and both are normal somewhere.
The principle
Severity is expressed in σ (sigma): how far the current metric sits from the line's own baseline, measured in units of that line's own normal variation.
σ = (current value − baseline) / normal spread of this lineTwo things follow, and both are deliberate.
- Level-independent. A drop from 99% to 98% and a drop from 50% to 45% both alert, because each is scaled by the variation you would expect at that yield level.
- Variability-independent. A line that habitually wanders between 50% and 60% has a wide normal spread, so wandering does not alert. A line that sits rock-steady at 55% has a narrow spread, and the same swing does alert.
The second axis is the one textbook formulas miss. They assume the only noise is statistical, but real production lines show one to five times more variation than that. So TofuPilot does not assume a spread — it measures yours, by replaying the same statistic at many points across the procedure's own history and observing how much it actually moved. That observed spread becomes the band, floored at the statistical minimum so a line with a flawless history cannot produce infinite sigma.
Memory is counted in units, not hours
There is no clock window. The detector weights recent units more heavily than older ones and lets weight decay as production continues — an EWMA (exponentially weighted moving average), the textbook SPC chart for detecting small, sustained shifts. If you want to study or challenge the method, that is the search term. Two consequences are worth knowing:
- Slow lines are monitored. A procedure running twenty units a week is judged on its last n units, not on an empty hour.
- Slow erosion accumulates. A yield sliding a little every day never ages out of a window, so it eventually crosses the ladder instead of resetting.
Severity ladders
| Type | Info | Warning | Critical |
|---|---|---|---|
| Yield drop | ≥ 2σ | ≥ 3σ | ≥ 5σ |
| Measurement drift | ≥ 3σ | ≥ 4σ | ≥ 5σ |
Drift starts one step higher because a typical organization has thousands of measurement series, and at 2σ, chance alone would produce alerts every evaluation.
Hysteresis
An alert fires at the info threshold and only resolves below 1.5σ. Between the two, the episode holds.
This is why an alert can stay open while the chart looks close to normal again. It is intentional: a metric hovering at the fire threshold would otherwise open and close an alert every few minutes.
Warm-up and eligibility
The detector refuses to grade what it cannot grade, rather than guessing.
| Type | Needs |
|---|---|
| Yield drop | Roughly 275 first-runs over the past 90 days on the procedure. |
| Measurement drift | At least 70 values in the series, and at least 5 distinct values. The full severity ladder unlocks at 100. |
Below these floors a procedure or series is simply not evaluated. If a new line produces no alerts, this is usually why.
The "at least 5 distinct values" rule exists because a measurement recorded to one decimal place can look perfectly stable when it is only coarsely quantized. There is nothing to detect drift in.
Noise guards
Four rules keep the automatic passes from crying wolf, and each explains a class of alert you might expect but not receive.
They exist because of alarm fatigue, the central lesson of industrial alarm management (ISA-18.2): an alarm that fires for nothing trains people to ignore it, and the real one gets ignored with it. A suppressed false alert is not a missed alert — it is what keeps the true ones credible.
- Near-perfect lines. On yield, severity is capped at info while fewer than three actual failures sit in the recent memory. Above roughly 99.6% FPY, one isolated failure is statistically a large excursion but practically nothing. This floor was set by replaying the detector against real production history: it removed every false warning on near-perfect lines without losing a single real incident.
- Jump channel. Drift also watches each individual value against a wide band — a Shewhart check, the classic control chart — requiring at least two of the last three values beyond it, so an abrupt shift is caught without waiting for the smoothed trend to follow. Pairing an EWMA with a Shewhart chart is standard SPC practice: each covers the other's blind spot.
- Outlier damping. Extreme individual values are winsorized — clamped toward a percentile bound rather than discarded — before they enter the baseline, so one sensor glitch cannot both spike the metric and inflate the band that judges it.
- Episode shelving. A measurement series that has already produced three episodes in 30 days stops opening new ones. A series alerting that often is telling you something structural about the line, and repeating it is noise.
Parts are separate, stations are pooled
For measurement drift, the two scope dimensions are treated differently, and the asymmetry is deliberate.
Each part is its own series. A drift series is identified by procedure, phase, measurement name, and part. Two product variants tested by one procedure — say two gear ratios with different nominal currents — are two physical populations: pooling them would read a change in the production mix as drift, and would judge each variant against a baseline that describes neither. So the detector never pools parts. On a multi-part procedure, each variant gets its own baseline automatically, and an alert names the part it fired on.
Stations are pooled into the series. Two stations running the same procedure are supposed to measure the same thing, so their values share one baseline. Splitting per station would also push low-volume stations below the eligibility floors and out of monitoring entirely — pooling maximizes coverage. The cost is sensitivity to single-station problems: a fixture offset on one bench widens the pooled spread, and a drift confined to that bench must be large enough to move the pooled numbers before it crosses the ladder.
When one station's volume justifies its own baseline, opt in explicitly: a custom rule scoped to that station grades the station's slice against the slice's own baseline. Per-fixture drift then fires on the station where it happens, and the alert names it.
Reference samples are excluded
Units flagged golden or failing are deliberately out of spec, so their values never enter a yield or drift baseline. They are watched by their own alert types instead. See Alert types.
Event types
The event types calibrate differently, because their verdict comes from a run outcome rather than a metric.
- Golden and failing samples need no calibration. The outcome is the signal.
- Unit retest threshold learns each procedure's normal retest rate from its recent units and sets the threshold just above the level that procedure rarely exceeds, with a floor of three. Critical is twice that.
- Run failed has no automatic mode at all.
When automatic is the wrong answer
Switch a type to custom criteria when you need a number that means something outside the data, rather than relative to it.
- A contractual or regulatory floor: Cpk must never go below 1.33.
- A metric the automatic pass does not compute: Last Pass Yield, run pass rate.
- A per-station baseline: automatic detection pools stations; a station-scoped custom rule slices them. (Parts need no override — each part is already its own series.)
- A line whose baseline is itself unacceptable. Automatic detection reports change, not badness. A line stable at 60% yield is stable, and it will not alert.
See Alert rules.
How is this guide?
Alert Types
Reference for every TofuPilot alert type: yield drop, measurement drift, golden and failing sample checks, unit retest threshold, and run failed.
Alert Rules
Learn how to create TofuPilot alert rules: pick an alert type, narrow the scope, set custom thresholds per severity, and route email to your team.