Call center staffing from a forecast: 6-week volume forecast and shift plan
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 forecast
We expect about 98,902 311 requests over the next 42 days across all 3 series, about 2,355 per day on average.
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.
| Method | Kind | Typical error | Actual inside 80% range |
|---|---|---|---|
| AI forecasting model Selected | AI | 9.8% | 85% |
| Exponential smoothing | Classic | 10.1% | 95% |
| Theta method | Classic | 11.3% | 94% |
| Repeat last season | Simple rule | 13.4% | 94% |
| Repeat the last value | Simple rule | 14.5% | 99% |
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.
| Method | Typical error |
|---|---|
| Exponential smoothing | 9.9% |
| Repeat last season | 10.3% |
| AI forecasting model Selected | 10.3% |
| Theta method | 10.4% |
| Repeat the last value | 11.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%).
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.
| Comparison | Saved by the plan | Percent |
|---|---|---|
| Expected, over forecast scenarios | $15,302 | 3.6% |
| Replayed on what actually happened | $9,091 | 2.1% |
| Input | Value | Where it came from |
|---|---|---|
| Wage per agent day | 320 ($) | Example value |
| Productive minutes | 390 (minutes) | Example value |
| Handle minutes | Phone 7, Mobile 4, Web 4 (minutes) | Example value |
| Cost per unhandled case | 12 ($) | Example value |
| Service quantile | 0.6 (fraction) | Example value |
| Days on | 5 (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