Call center staffing from a forecast: 6-week volume forecast and shift plan

Case study on a public dataset from San Francisco, United States · Updated

We forecast daily 311 requests for each of 3 intake channels 42 days ahead from a public dataset. In testing on past data, the selected method (the AI forecasting model) was off by 9.8% of actual volume on average, 27% less error than repeating the same weekday last week. On data the plan never saw, the recommended plan cost $9,091 (2.1%) less than staffing every day to the average workload plus 10%, using example costs.

Read this first

  • The costs and limits in the plan (wage per agent day, productive minutes, handle minutes, cost per unhandled case, service quantile, days on) are example values chosen to show the method. With your business, we use your numbers.

The request

"Forecast how many phone, web and app requests we'll get each day for the next 6 weeks so I can build the agent schedule and still answer 80% of calls within 60 seconds."

The request, written the way a business owner would ask it.

The forecast

We expect about 98,902 311 requests over the next 42 days across all 3 series, about 2,355 per day on average.

Line chart of daily 311 requests: the actual history, the forecast for the next 42 days with its 80% range, and what actually happened in those days.
The forecast for the next 42 days, with the range it expects 8 times out of 10. The dotted line is what really happened.
Small line charts of the largest series in the data with their forecasts and 80% ranges.
The largest series, each with its own forecast.

How accurate was it?

We hid the most recent stretch of history, forecast it using only what came before, and compared with what really happened. We did that 5 times, each time 42 days ahead, for every method below. The typical error is the share of actual volume the forecast missed by, added up across all 3 intake channels.

The selected method, an AI forecasting model that was not trained on this data, was off by 9.8% on average, against 13.4% for simply repeating the same weekday last week.

Typical error in testing, lower is better
MethodKindTypical errorActual inside 80% range
AI forecasting model SelectedAI9.8%85%
Exponential smoothingClassic10.1%95%
Theta methodClassic11.3%94%
Repeat last seasonSimple rule13.4%94%
Repeat the last valueSimple rule14.5%99%
Line chart comparing past forecasts with actual 311 requests over 5 test runs of 42 days each, made using only the data available at the time.
Back-testing: 5 times we hid the next 42 days, forecast them, and compared with what happened.
Bar chart of the typical error of each forecasting method in testing. The selected method had 9.8% error; repeating the same weekday last week had 13.4%.
Typical error of each method in testing, as a share of actual volume. Lower is better.

Reality check on data no model saw

Before running anything, we set aside the final 126 days of the data (from 2026-08-19). Nothing in the testing above or the method choice could see them. Here is how every method did on that stretch.

On this stretch a simpler method did better: exponential smoothing had 9.9% error against 10.3% for the method we selected. Single periods are noisy, which is why we select on repeated tests, but we show it.

Typical error on the held-back 126 days
MethodTypical error
Exponential smoothing9.9%
Repeat last season10.3%
AI forecasting model Selected10.3%
Theta method10.4%
Repeat the last value11.1%

The plan

Recommended: a schedule of up to 41 agents on 5-day shift patterns, 1,225 agent-days over the next 42 days. Expected cost $415,565, 3.6% less than staffing every day to the average workload plus 10%.

Why this schedule: workload is uneven across the week, so the plan puts about 31 agents on duty on weekdays and 26 at weekends instead of the same number every day. Staffing to the average (31 every day) leaves busy days short and quiet days idle.

Expected outcome: 98.3% of cases handled the same day (rule of thumb: 99.0%); labor $392,000 versus $416,640.

Service target: on every day there is enough capacity for the 60% forecast percentile of workload.

Reality check: this plan was made as of Aug 19, 2026 without seeing later data. Replayed on what actually happened, it cost $432,737 against $441,828 for the rule of thumb: a measured saving of $9,091 (2.1%).

Chart of the recommended plan compared with staffing every day to the average workload plus 10%, drawn against forecast demand and its range and actual demand.
Six-week agent schedule for the 311 contact center: the recommended plan next to staffing every day to the average workload plus 10%. Costs and limits are example values.

Plan against the rule of thumb

The rule of thumb here is staffing every day to the average workload plus 10%. We compare both ways: the expected cost over many possible futures from the forecast, and a replay of both plans on what actually happened.

Cost saved by the plan, compared with staffing every day to the average workload plus 10% (example costs)
ComparisonSaved by the planPercent
Expected, over forecast scenarios$15,3023.6%
Replayed on what actually happened$9,0912.1%
Bar chart of total cost for the recommended plan and the rule of thumb, both expected over the forecast scenarios and replayed on the actual data. On the actual data the plan was $9,091 cheaper.
Total cost of the plan against the rule of thumb. Lower is better. Example costs.
What the plan assumed
InputValueWhere it came from
Wage per agent day320 ($)Example value
Productive minutes390 (minutes)Example value
Handle minutesPhone 7, Mobile 4, Web 4 (minutes)Example value
Cost per unhandled case12 ($)Example value
Service quantile0.6 (fraction)Example value
Days on5 (days)Example value

What the engine noticed in the data

  • Forecast made as of Aug 19, 2026: 126 later rows were hidden from the models and used afterwards to check the forecast.
  • Skipped 1 series with no recent data: Mobile/Open311.

Technical details

Data
SF311 Cases (daily volume by intake channel) + SF311 Call Metrics by Month (DataSF), San Francisco, United States. 3 intake channels, daily, from 2023-08-21 to 2026-08-19.
How we prepared the data
A server-side daily count by intake channel, pinned to Jan 1, 2021 to Sep 30, 2026 so the case is reproducible. Keeps Phone, Web and the mobile app; the app channel was renamed from 'Mobile/Open311' to 'Mobile' in mid-2024, and the engine drops the discontinued name automatically. Uses the last 3 years of history. The last 6 weeks (Aug 20 to Sep 30, 2026) are hidden with as_of, so both the forecast and the staffing plan are replayed against what actually happened. The staffing plan works on daily workload (requests times handling minutes per channel) with example costs. It does not model arrivals within the day, so it does not promise the '80% within 60 seconds' target; that needs an hourly queueing model on call-level data.
Testing
5 rolling tests, each 42 days ahead. Selection metric: WAPE (weighted absolute percentage error, the "typical error" above). Also reported: MASE 0.84 for the selected method.
Methods
Chronos-2 (AI foundation model), Exponential smoothing (ETS), Theta, Seasonal naive, Naive (last value).
Plan
Six-week agent schedule for the 311 contact center. Optimization status: ok, solver: optimal.
Reproduce
The case folder, spec and outputs are in the 4castPlannr repository under cases/sf311-contact-center/.

Data source and license

Source: San Francisco 311 / DataSF (data.sf.gov), ODC PDDL.

License: ODC Public Domain Dedication and License (PDDL) 1.0. Source: original data. The forecasts and charts on this page are derived from that data and carry the same attribution.

Have a decision like this?

This case is an example of staffing plans for call centers and service businesses. Send us your own export and question, and we will run the same tests on your data.

Related case studies

  • Hotel room-nights

    A public dataset from two hotels: daily room-nights forecast 60 days ahead per hotel, with the accuracy we measured in testing.

    Portugal · 29.6% error · 37% better than repeating last season

  • Airport passengers by airline

    San Francisco International Airport's public statistics: monthly passengers for the 10 largest airlines forecast a year ahead.

    San Francisco, United States · 11.8% error · 38% better than repeating last season

  • Bike rentals with weather

    Capital Bikeshare data from the UCI repository: hourly rentals forecast a week ahead, with and without weather as an extra input.

    Washington, DC, United States · 28.6% error · 54% better than repeating last season