Where they were before
The operator ran a large freight network with dispatch tracking every load in transit. What dispatch could not do was see a delay coming. The first sign that a shipment was going to be late was usually a customer calling to ask where it was.
By the time that call came in, there was nothing dispatch could do except apologize and give an ETA that was itself a guess. Customer service had no early information to work with, and the account teams learned about problems from their customers instead of from their own operations.
The data to predict this already existed. Route history, weather patterns, driver and vehicle logs, past delays and their causes, all of it sat in the transportation management system. Nobody had built anything that read it forward instead of just recording it after the fact.
The problem
A freight operator's dispatch team found out about late shipments the same way customers did: after they were already late. Customer service was reactive, and nobody could give a client an accurate new ETA.
Why this is harder than it looks
A logistics network runs on real conditions, not a clean schedule. Traffic, weather, a mechanical issue, a delay at a previous stop that cascades into the next one, all of it interacts in ways that are hard to reason about by hand but are exactly the kind of pattern a model trained on enough history can pick up.
The prediction also had to be useful at the right granularity. A forecast that says "this route is often late" tells dispatch nothing they can act on today. It had to be specific to this shipment, right now, with enough lead time to actually do something: reroute, notify the customer, adjust a downstream commitment.
And a wrong prediction has its own cost. A false alarm that has dispatch scrambling to reroute a shipment that was never actually going to be late burns goodwill and effort. The model had to be confident enough to act on, not just directionally right.
How we approached it
We built the delay-prediction model on the operator's own shipment history: routes actually driven, delays that actually happened and why, not a generic freight-industry assumption about travel times.
The prediction surfaces directly in the dispatch dashboard the team already uses, with a confidence score attached, not a separate report somebody has to remember to check. A shipment trending toward a delay shows up hours before it happens, while there is still time to do something about it.
We tuned the confidence threshold with dispatch rather than picking one ourselves. Too sensitive and the team stops trusting the alerts. Too conservative and it misses the cases that matter. Getting that threshold right took a few rounds of adjustment against real shipments before it went into daily use.
What we built
A delay-prediction model trained on the operator's own route, weather and historical transit data, surfaced directly in the dispatch dashboard with a confidence score, so a delay gets flagged hours before it happens instead of after.
How we knew it was working
The number to move was customer service tickets about late shipments, agreed at the start because it is the number that reflects whether customers are actually experiencing fewer surprises, not just whether the model looks accurate on paper.
Delay-prediction accuracy was tracked alongside it, since a model that is accurate but arrives too late to act on has not actually helped operations even if the number looks good in a report.
False alarm rate mattered too. A model dispatch stops trusting because it cries wolf too often is a model that gets ignored, regardless of what its accuracy score says.
What changed
Dispatch now sees a likely delay about four hours ahead, late-shipment support tickets fell by close to a third, and dispatch could reroute around a likely delay instead of just reporting it.
Where it stands now
Dispatch now gets roughly four hours of warning before a shipment runs late. Support tickets about late deliveries fell by close to a third, and the ones that still come in now arrive with dispatch already aware and already communicating instead of the customer being the first to know.
Dispatch uses the lead time to reroute around a predicted delay where that is possible, which was not something the old process could do at all since there was no early signal to act on.
The model runs as part of the daily dispatch workflow now, not a separate system anyone has to remember to check.
If you are in the same position
If your operations team learns about problems from your customers, the fix is rarely a better customer service process. It is giving operations a signal early enough to act before the customer notices.
Match the prediction's specificity to the decision it needs to support. A general sense that a route is often delayed is not actionable. A specific shipment with a confidence score and enough lead time is.
And tune for trust, not just accuracy. A model your team stops believing in because of false alarms gets ignored regardless of its score, so the threshold that gets used in practice matters more than the one that looks best in a test set.

