Overstaffing wastes money; understaffing destroys customer satisfaction. This project analyzes call volume data from ABC company’s customer support center to identify when calls arrive, how volumes shift across hours and days, and what seasonal patterns emerge over time. The findings feed directly into staffing recommendations that can reduce wait times during peak windows while avoiding unnecessary labor cost during quiet periods.Documentation Index
Fetch the complete documentation index at: https://github-52.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Dataset overview
The dataset contains timestamped records of individual inbound calls over a multi-month observation period. Each row represents one call event with the following fields:| Field | Description |
|---|---|
| Call ID | Unique identifier for each call |
| Timestamp | Date and time the call was received |
| Call Duration | Length of the call in seconds |
| Agent ID | Anonymized identifier for the handling agent |
| Queue | Department or support queue the call was routed to |
| Resolution Status | Resolved on first call, escalated, or abandoned |
| Wait Time | Seconds the caller waited before being connected |
| Day of Week | Derived from timestamp (Monday–Sunday) |
| Hour of Day | Derived from timestamp (0–23) |
Methodology
Data preparation
The raw call log was loaded and preprocessed before any time-series analysis:
- Parsed timestamps into proper datetime objects and converted from UTC to the local operating timezone
- Derived
hour_of_day,day_of_week,week_number, andmonthcolumns from each timestamp - Aggregated individual call records into hourly and daily volume counts for time-series modeling
- Identified and excluded data gaps (system downtime periods) that would distort trend estimates
- Checked for anomalous days (holidays, outages) and flagged them separately rather than removing them, since understanding holiday patterns is operationally useful
Time-series decomposition
The daily call volume series was decomposed into its structural components using classical additive decomposition and STL (Seasonal-Trend decomposition using LOESS):
- Trend component — the underlying long-term direction of call volume growth or decline
- Seasonal component — repeating weekly and intra-day patterns
- Residual component — unexplained variation after removing trend and seasonality
Pattern recognition
With the decomposed components in hand, specific patterns were characterized:
- Intra-day call arrival curves (average calls per hour across all days)
- Day-of-week volume profiles (which days are busiest and by how much)
- Week-over-week growth trends (is volume increasing over the observation period?)
- Holiday and event-driven spikes compared to the expected seasonal baseline
Peak hour analysis
Peak windows were defined as hours where call volume exceeds the 75th percentile of the daily distribution. For each such window:
- Average and maximum call volumes were computed
- Average wait times were compared to off-peak periods to quantify the customer impact
- Agent utilization rates during peaks were estimated from call duration and staffed agent counts
- A traffic intensity metric (calls per available agent per hour) was calculated to identify when the queue becomes genuinely overwhelmed versus merely busy
Staffing recommendations
Peak analysis findings were translated into concrete staffing schedule adjustments. The recommendations account for agent training time, scheduling constraints, and the distinction between predictable recurring peaks (every Monday morning) and unpredictable spikes (product launch days).
Key findings
The analysis revealed a consistent and exploitable structure in call volume patterns: Intra-day pattern: Call volume follows a bimodal distribution across the day. The first peak occurs between 10:00–12:00, driven by customers calling after morning routines. A second, larger peak occurs between 14:00–16:00. Volume drops sharply after 17:00 and is minimal from 20:00 onwards. Day-of-week pattern: Monday receives the highest average daily volume — approximately 35% above the weekly average — as customers report issues that accumulated over the weekend. Friday volume is the second highest. Midweek (Tuesday–Thursday) is the most stable and predictable scheduling window. Seasonal trend: A gradual upward trend in monthly call volume was observed across the study period, suggesting that the current staffing model — designed for earlier, lower-volume conditions — is becoming increasingly stretched at peak times. Abandoned calls: Abandoned call rates spike sharply during the Monday morning peak and during the first hour after any outward-facing service disruption, confirming that wait time directly drives abandonment and that these windows need disproportionate staffing coverage.Business recommendations
Review staffing levels quarterly. The upward trend in monthly volume means that a staffing model calibrated today will underperform in six months. A quarterly review comparing actual volume to the STL trend projection will catch drift before it becomes a customer satisfaction problem.
Technologies used
Python
Core language for all data processing, time-series analysis, and recommendation development.
Pandas
Timestamp parsing, aggregation to hourly/daily series, and day-of-week groupby operations.
Matplotlib
Time-series line charts, intra-day volume curves, and annotated peak window visualizations.
Statsmodels
STL decomposition, classical additive decomposition, and trend significance testing.
Jupyter Notebook
Interactive analysis environment with inline plots and narrative documentation of findings.