Tracking Signal: Catch a Biased Forecast Before It Corrupts Your Schedule
Tracking Signal: Catch a Biased Forecast Before It Corrupts Your Schedule
A bad forecast almost never announces itself. It doesn't spike, crash, or throw an error. It drifts. Week after week the forecast lands a little high — or a little low — always in the same direction. Each miss is small enough to shrug off. But those small, same-direction misses compound: they quietly inflate every run size, nudge every reorder point, and by the time you notice, you're sitting on four weeks of dead stock or explaining another stockout on a SKU you "forecasted fine."
The tool that catches this drift early is the tracking signal — a lightweight statistical trip-wire that compares your accumulated forecast error against your typical error. It's cheap to compute, easy to automate, and it turns a slow-moving forecasting problem into a concrete scheduling trigger. This post shows you what it is, how to calculate it on a real SKU, where to set the limits, and — most importantly — what to do when it trips.
Accuracy and bias are two different questions
Before the formula, get the concepts straight, because most teams monitor the wrong one.
Magnitude asks: how far off was the forecast? That's what metrics like MAPE (mean absolute percentage error) and MAD (mean absolute deviation) measure. In supply-chain practice, accuracy is often tracked with MAPE, or with MAD divided by average sales — a volume-weighted MAPE known as the MAD/Mean ratio.
Bias asks a different question: which way is the forecast consistently wrong? Forecast bias is the persistent tendency for forecasts to run too high or too low. A good forecast is unbiased — its errors scatter randomly around zero. A common quantitative measure of bias is simply the mean of the forecast errors: if that mean drifts away from zero, you have systematic bias.
Here's why this distinction matters to a scheduler. Magnitude metrics like MAPE and MSE treat over-forecasting and under-forecasting symmetrically — a 100-unit miss high scores the same as a 100-unit miss low. But on the plant floor the costs are wildly asymmetric: over-forecasting buries you in excess inventory (and, for perishables, spoilage), while under-forecasting costs you sales and expedited changeovers. A forecast can post a perfectly "acceptable" MAPE while being biased the whole time — the average absolute error looks fine even as every single miss points the same direction. MAPE alone will never show you that. You need a bias detector.
What a tracking signal actually is
A tracking signal monitors forecasts against actuals and warns you when outcomes depart from the forecast in a way that isn't random. It is, in plain terms, a running trip-wire that ratios your cumulative error against your typical error. It's most useful exactly when you suspect the forecast model may no longer be valid.
The classic form is:
Tracking Signal = (Cumulative sum of forecast errors) ÷ (Mean Absolute Deviation)
Walk through the logic:
- If your errors are random noise, the positive misses and negative misses cancel out, so the cumulative sum of errors stays near zero. Divide a near-zero number by MAD and the signal hovers around zero. Healthy.
- If the forecast is biased, the errors keep piling up in the same direction, so the cumulative sum grows large — while MAD (the size of a typical miss) stays roughly constant. The ratio balloons. A large signal value indicates non-random error: the model is consistently over- or under-forecasting.
Sign tells you direction. A large positive signal typically means actuals keep exceeding the forecast (you're under-forecasting — stockout risk). A large negative signal means the forecast keeps exceeding actuals (over-forecasting — overstock risk).
A worked CPG example
Let's run it on a single SKU: a beverage 6-pack, forecast weekly. Error here is defined as Actual − Forecast (positive = we under-forecasted).
| Week | Forecast | Actual | Error | Cumulative Error | Cum. |Error| | MAD | Tracking Signal |
|---|---|---|---|---|---|---|---|
| 1 | 1,000 | 980 | −20 | −20 | 20 | 20 | −1.0 |
| 2 | 1,000 | 1,030 | +30 | +10 | 50 | 25 | +0.4 |
| 3 | 1,000 | 970 | −30 | −20 | 80 | 27 | −0.7 |
| 4 | 1,000 | 1,010 | +10 | −10 | 90 | 23 | −0.4 |
| 5 | 1,050 | 1,140 | +90 | +80 | 180 | 36 | +2.2 |
| 6 | 1,050 | 1,160 | +110 | +190 | 290 | 48 | +3.9 |
| 7 | 1,050 | 1,180 | +130 | +320 | 420 | 60 | +5.3 |
| 8 | 1,050 | 1,155 | +105 | +425 | 525 | 66 | +6.5 |
Weeks 1–4 are healthy: errors bounce both ways, cumulative error stays near zero, and the signal wobbles harmlessly between −1.0 and +0.4. That's noise — leave it alone.
Then something changes. Starting week 5, actuals run consistently above forecast — a real demand shift the model hasn't caught. Watch what happens: the cumulative error stops cancelling and starts marching upward, and the tracking signal climbs from +2.2 to +6.5 in four weeks. The signal crossed its control limit (more on limits next) the same week the bias set in. That's the whole point — it flagged a directional problem while each individual miss (+90, +110) was still small enough to ignore in a weekly review.
Setting control limits
The signal is only useful with a threshold that says "investigate now." A widely used practitioner rule of thumb is ±4 MAD — trip the alarm when the tracking signal exceeds +4 or drops below −4. Treat this as a heuristic, not a law of physics. In the table above, the signal breaches +4 at week 6.
There's also a smoothed variant worth knowing. Trigg's tracking signal (1964) ratios a smoothed error to a smoothed absolute error. When no meaningful bias exists, smoothed error stays small relative to smoothed absolute error, keeping the ratio near zero. Trigg published thresholds tied to the smoothing constant: with β = 0.1, a signal above roughly 0.51 indicates the errors are no longer random. The smoothed form reacts faster to recent behavior and doesn't require you to carry a growing cumulative sum.
Whatever threshold you pick, understand the trade-off you're making: tight limits catch drift sooner but throw more false alarms; loose limits stay quiet but let bias run longer before you react. That's a policy choice, and it should match how expensive a wrong run is for the SKU in question. A high-velocity A-item with long changeovers earns tighter limits than a slow C-item.
From tripped signal to schedule action
A tracking signal that trips is not a forecasting footnote — it's a scheduling trigger. Here's the triage sequence when a SKU breaches its limit.
1. Explain the drift. Run a quick checklist before touching anything:
- Was there a promotion or known event the forecast didn't include?
- Is this a new item still finding its baseline?
- Did a price change or competitor move shift the demand curve?
- Is this a seasonality shift the model hasn't learned yet?
- Is it a genuine, sustained level change in demand?
2. Decide the response. Based on the cause:
- Model is stale / level has shifted → adjust the forecast or make the model more responsive. This is the intuition behind adaptive smoothing (Trigg & Leach, 1967): a large tracking signal suggests the series has genuinely shifted, so you temporarily use a larger smoothing constant to let the next forecast react faster to recent actuals.
- Cause is real but the fix will take a cycle → protect service by adjusting safety stock while the forecast catches up. If you're under-forecasting, a biased-low forecast is silently eroding the buffer you thought you had.
- Ambiguous single-week outlier → hold and watch. Don't overreact to one noisy reading.
3. Respect your time fences. This is the guardrail. A tripped signal tells you the future plan needs adjusting — it does not license yanking a frozen near-term schedule on one reading. Reconcile the correction with your frozen-zone rules so you fix the next run plan without destabilizing the runs already committed.
Special cases and pitfalls
Intermittent and slow-moving SKUs. For lumpy demand — the slow-moving C-items common in any CPG portfolio — standard percentage metrics break down. MAPE is undefined whenever actual sales equal zero (you can't divide by zero), and those zero weeks are exactly what intermittent demand is made of. This is a strong reason to lean on error- and bias-based monitoring for slow movers rather than percentage accuracy. Pair this with ABC-XYZ segmentation so you apply the right monitoring to the right demand pattern.
Don't mistake an outlier for bias. A single big spike can jolt the signal, but bias is about persistence — errors in the same direction, week after week. One-off outliers should nudge the signal and then wash out as cumulative error re-centers. If it doesn't wash out, it wasn't an outlier; it was the start of a shift.
Monitor at the level you schedule. Bias can hide in aggregation. A portfolio-level forecast can look beautifully unbiased while individual SKU-lines are badly biased in offsetting directions. You schedule at the SKU-line level, so monitor the tracking signal there — not just at the rolled-up total.
Put it in your weekly cadence
The tracking signal earns its keep when it's automatic. Where forecasts are produced repeatedly, performance can be monitored with a tracking signal that flags deteriorating models on its own — no manual audit required. Build it into your weekly demand review or S&OP dashboard:
- Compute error, cumulative error, MAD, and the tracking signal for every scheduled SKU each cycle.
- Auto-flag any SKU breaching its control limit as an exception.
- Route those exceptions into the schedule review before the next run plan locks — so bias gets corrected upstream instead of showing up downstream as overstock or a stockout.
Accurate demand forecasts are the foundation of optimized inventory, sound capacity planning, and effective resource allocation. The tracking signal is how you keep that foundation honest between full forecast reviews. For the broader philosophy of forecasts that hold up on the floor, see forecasting that survives the floor; for the downstream cost of letting bias run, see stop firefighting stockouts.
TL;DR
- Accuracy ≠ bias. MAPE and MAD tell you how far off; they hide which way. Bias is persistent directional error — measured as the mean of forecast errors.
- The tracking signal is your bias detector. Cumulative error ÷ MAD. Near zero = healthy random noise; a large ± value = systematic over- or under-forecasting.
- Set a limit and automate it. ±4 MAD is a common heuristic; Trigg's smoothed form (β = 0.1 → ~0.51) is a faster-reacting alternative. Tighter limits catch drift sooner but cry wolf more.
- A tripped signal is a scheduling trigger. Explain the cause, then either fix the forecast, buffer with safety stock, or hold — but never override a frozen schedule on one reading.
- Watch slow movers with bias, not percentages. MAPE breaks on zero-demand weeks; error-based monitoring doesn't.
Sources
- Tracking signal — definition, MAD-ratio formula, Trigg threshold, adaptive smoothing: https://en.wikipedia.org/wiki/Tracking_signal
- Forecast bias — definition, mean-error measure, automated monitoring rationale: https://en.wikipedia.org/wiki/Forecast_bias
- Calculating demand forecast accuracy — MAPE, MAD/Mean ratio, asymmetric error cost, intermittent-demand caveats: https://en.wikipedia.org/wiki/Calculating_Demand_Forecast_Accuracy
- Demand forecasting for supply chains (practitioner framing): https://www.netstock.com/blog/demand-forecasting-for-supply-chains-how-to-predict-plan/
- Demand and supply planning context (S&OP linkage): https://www.ism.ws/supply-chain/demand-and-supply-planning/
More from the journal
The Bullwhip Effect on Your CPG Line: Why a 5% Shelf Wobble Becomes a Whipsawing Schedule
Your inbound order signal swings harder than consumers actually buy. That jumpiness is a structural amplification called the bullwhip effect. Here's how to name it, measure it, and dampen it from the plant floor.
Croston's Method for Intermittent SKUs: Forecasting the Slow Movers Your Average Keeps Getting Wrong
Standard moving averages and exponential smoothing quietly mis-forecast your sporadic SKUs. Croston's method forecasts demand size and demand interval separately — here's how it works, when to use SBA or TSB, and how to decide which SKUs need it.
Little's Law for CPG Schedulers: Predict Line Lead Time from WIP and Throughput
The line is running at rate, yet orders keep shipping late. Little's Law explains why: lead time is WIP divided by throughput. Learn to predict flow time, cap queues, and quote promise dates you can keep.