Call Volume Forecasting for Contact Centres
Last updated:
Why contact centre forecasts miss
Most contact centres forecast by taking the same week last year, adjusting for growth, and shaping it by an average intraday pattern. That works on ordinary weeks. It breaks the week your company sends a price rise letter, moves a billing date or has a website outage, which are exactly the weeks service levels collapse.
The cost is lopsided. Understaffing by a few agents at peak creates long queues, abandoned calls and repeat contacts that inflate the next day's volume too. Overstaffing a quiet afternoon is expensive but survivable. A forecast that is right on average and wrong at the peaks is not much use.
What drives contact volume
- Day of week and time of day, including the Monday morning surge
- Bank holidays, and the day after them, which is usually worse
- Billing and statement dates, direct debit collection days and renewal cycles
- Marketing emails, letters and campaigns, with a lag of hours to days
- Product launches, price changes and policy changes
- Service outages and delivery disruptions
- Weather, for utilities, insurance, travel and home services
- Customer base size, which changes the baseline slowly
Many of these are known in advance by some other team. The billing team knows when statements go out. Marketing knows when the campaign lands. A surprising amount of forecast error is simply that nobody told the planning team.
Where machine learning improves the forecast
| Method | Strengths | Weaknesses |
|---|---|---|
| Same week last year plus growth | Simple, explainable | Ignores moving events and campaigns |
| Classical time-series models | Handle trend and seasonality well | Awkward with many external drivers |
| Gradient-boosted models with calendar and event features | Learn effects of campaigns, billing, outages | Need a clean record of past events |
| Hierarchical forecasting | Keeps queue, channel and total forecasts consistent | More work to set up |
For most contact centres, a gradient-boosted model at daily level combined with learned intraday profiles is a practical sweet spot. It is accurate, retrains quickly and can explain which drivers pushed tomorrow's number up. For a general comparison of forecasting approaches, our post on realistic forecasting in Python is a useful companion.
Turning calls into agents
A forecast of 420 calls between 9:00 and 9:30 is not yet a staffing number. Three more inputs are needed.
- Average handling time, which also varies by time of day, queue and season, and is worth forecasting in its own right
- Service level target, such as 80% of calls answered within 20 seconds
- Shrinkage: breaks, training, meetings, sickness and absence
Erlang C, or Erlang A where abandonment matters, converts volume, handling time and target into agents needed per interval. Shrinkage then grosses that up to scheduled heads. Chat and email need different treatment because agents handle several at once and email can wait. From there a scheduler builds shifts, which we cover in staff scheduling optimisation.
Handling the spikes nobody predicted
No model predicts an unannounced outage. What you can do is react faster.
- Re-forecast intraday: compare the first hours of actuals with the forecast and scale the rest of the day
- Define trigger points for moving agents off email and back-office work onto phones
- Keep a record of every unplanned event, so the model learns what an outage day looks like
- Create a simple channel for other teams to log upcoming events that will generate contacts
That last point is organisational rather than technical and often gives the biggest single improvement.
Take a home insurer's claims line with around 150 agents. A storm warning is issued two days ahead. The model has seen previous storm days in the history, with their event flags, so the forecast for the day after the storm rises well above a normal Tuesday. Planning can cancel training sessions and offer overtime in advance rather than discovering the queue at 8:05 that morning. The storm itself was not predictable by the model; its effect on calls, given a warning, largely was.
When a custom model is not worth it
Most workforce management platforms include forecasting. If your volumes are steady, your drivers are mostly calendar-based and your WFM tool is configured properly, a custom model may add little.
Custom forecasting earns its place when you have many queues or channels, strong event-driven volume, a WFM tool whose forecasts planners routinely override by hand, or when you want forecasts built from data the WFM tool cannot see, such as billing runs or website traffic. Also, a contact centre with fifteen agents and one queue probably does not need this at all.
How we build it
SpiderHunts would first backtest: rebuild what your current method would have forecast for the past year and compare it with a model, interval by interval, with separate figures for peak periods. If the improvement at peaks is not meaningful, we will tell you.
If it is, the model runs daily, publishes forecasts into the WFM tool through an import or API, and produces a short explanation of unusual days. Contact reason data from calls and chats, classified automatically, adds another layer by showing what is driving volume. That classification side sits with our AI integration work, the forecasting with machine learning.
Frequently asked questions
How far ahead should call volume be forecast?
What is a good call forecast accuracy?
Does machine learning replace Erlang C?
Can we forecast chat and email the same way?
How much history do we need?
Service levels swinging from great to terrible each week?
Share a year of interval-level contact data. We will compare your current forecast with what a model would have predicted and show where the misses come from.