Live demo
13 series in. 4 alerts out.
One register, roughly 1,900 employees, 60 days of daily accruals, 13 series across four employee classes. On day 44 an HRIS update re-keyed the classes and four ratios on class=hourly-ops moved at once. Total payroll cost, headcount, and average salary all kept doing exactly what they were doing. Everything below is a flag for a human payroll review, not a determination of what anyone is owed.
Every number on this page is computed in your browser right now, by the same CUSUM and Bayesian changepoint code that runs in production. Nothing here is a screenshot.
The comparison that matters
Against the rule most teams actually ship
The standard configuration is a percentage or sigma threshold against a trailing mean, evaluated per metric. Run it over the exact same 13 series and count what lands in the channel.
The false-alarm count is not a judgement call. The incident was injected at a known index, so every naive alert before that index is wrong by construction.
What the engine found
Detection run
| Metric | Trend | Baseline | Now | Change | Confidence | Method |
|---|---|---|---|---|---|---|
Benefits deduction rate class=hourly-ops | 7.16% | 3.21% | −55.1% | 99.9% | CUSUM | |
Overtime hours per employee class=hourly-ops | 3.729 | 6.201 | +66.3% | 99.9% | CUSUM | |
Gross-to-net ratio class=hourly-ops | 0.713 | 0.765 | +7.4% | 99.9% | CUSUM | |
Effective tax rate class=hourly-ops | 21.4% | 17.6% | −17.7% | 99.9% | CUSUM |
Show your work
Benefits deduction rate · class=hourly-ops
Baseline mean μ = 0.0014 and σ = 0.0364, both computed from the first two thirds of the day-over-day percentage changes. The slack k = 0.0182 is half a sigma, and the decision boundary h = 0.1455 is four. The accumulator runs on percentage changes rather than raw levels so a healthy growing series cannot drift across the boundary on its own.
alert if |Δ| > 3σ vs 7-day mean fired 1 times across this one metric. The statistical pipeline sent one message, on the day the regime actually changed.
What lands in Slack
One message, with the work already done
- 1.Pull the benefits carrier eligibility file for class=hourly-ops and confirm the 412 members are still matched.
- 2.Check the overtime rule bound to hourly-ops for a lost daily threshold after the Aug 12 update.
- 3.Reconcile work-location to tax-jurisdiction mapping for the class against the pre-Aug-12 export, then take the withholding question to payroll tax counsel.
The written cause is generated only after the statistics confirm the change. The model never decides whether something is an anomaly — it explains one that has already been established. Getting that order backwards is how these products hallucinate.