How these charts are built
Five public data feeds, five control charts, updating all day. Everything below is what we had to get right to make them honest — including the one that nearly made the first chart useless.
1. The limits are frozen, and that is the whole point
A control chart compares what the process is doing now against what it did when it was behaving. That comparison only means something if the second half stays still.
So each feed's limits are computed once, from a fixed baseline window of its first readings, and then never recomputed. Every point after that is judged against those numbers. The chart says frozen baseline on it because the alternative is so common: recompute the limits from whatever is currently on screen, and a process that drifts drags its own limits along with it. The chart stays reassuringly calm while the process walks away. It is the single most common mistake in SPC dashboards, and it is invisible — the chart looks fine, which is exactly the problem.
2. Sampling rate decides whether the chart works at all
GB grid frequency is published every fifteen seconds. Charting it at that rate produced a wall of red: 87.8% of points outside the control limits. Not because the grid was out of control — because consecutive readings fifteen seconds apart are almost the same reading.
Shewhart limits assume that consecutive points are independent. Grid frequency at 15 s has a lag-1 autocorrelation of 0.988. The moving range between neighbours is therefore tiny, the estimated sigma is tiny, the limits are absurdly narrow, and everything trips. The maths was right and the chart was worthless.
We measured the whole interval table and charted at fifteen minutes, where lag-1 autocorrelation is 0.246 and 0% of points fall outside the limits on a normal day. The raw 15-second data is still collected — the sampling control on the page resamples it live, so you can watch the chart fall apart at 15 s yourself. That is the most useful thing on the page.
The general lesson: before charting a fast signal, check whether consecutive readings are independent. If they are not, either sample slower or use a chart designed for autocorrelated data. A Shewhart chart on autocorrelated data does not fail loudly — it fails by crying wolf until nobody looks at it.
3. Rules are chosen, not switched on wholesale
The eight Nelson rules are not a set you enable together. Rules 5 to 8 read the sigma zones and assume roughly normal, independent data; on a real public feed they fire constantly and drown rule 1, the one everybody actually cares about.
An early version of the grid page ran all eight: 32 violations, none of them rule 1, nineteen from rule 6. The chart contradicted its own explanation. These pages now run rules 1 to 4, each individually toggleable, and every point in a triggering run is highlighted rather than just the last one — a run of nine on one side of the centre line is one event, not one point.
4. Which chart for which data
- I-MR — one reading at a time. Grid frequency, river level, an IoT sensor.
- X̄-R — several measurements that belong together. Air quality across five cities, sampled as a subgroup.
- c — counts of events in equal periods. Earthquakes per hour. Poisson, so the limits are c̄ ± 3√c̄ and the lower one is floored at zero.
Rational subgrouping is the judgement call here: a subgroup should contain only variation you consider noise. Our air quality demo is the honest counter-example — five cities under one weather system move together, so the subgroups are correlated and about half the chart sits inside a run-rule band. We say so on the page rather than picking data that flatters the chart.
5. What happens when a feed goes down
It does, regularly. A failed poll keeps the last good chart on screen and raises a small "reconnecting" note; the page never blanks, never discards data and never shows an empty axis because one request timed out. A feed that has gone quiet for long enough says so in plain words at the top instead of pretending yesterday's reading is current.
Everything on these pages is public data
Each feed names its source and carries that source's required attribution. We are not affiliated with any of them. If you run one of these services and would rather we did not, say so and we will take the page down the same day: [email protected].
The same charts, on your process
Everything described here — frozen baselines, versioned limit sets, per-rule configuration — is the product, not a demo rig. The public feeds run on it.