> ## Documentation Index
> Fetch the complete documentation index at: https://github-52.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ABC Call Volume Trend: Time-Series & Staffing Insights

> Time-series analysis of call center volume data for ABC company, revealing daily patterns, peak hours, and staffing optimization insights.

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.

## 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)                      |

The dataset required timezone normalization since call records were logged in UTC but operations run in a local timezone. All timestamps were converted before analysis.

## Methodology

<Steps>
  <Step title="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`, and `month` columns 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
  </Step>

  <Step title="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

    STL decomposition was preferred over classical decomposition because it handles irregular seasonality and is robust to outliers, which matter for a real-world call center dataset with occasional volume spikes.
  </Step>

  <Step title="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
  </Step>

  <Step title="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
  </Step>

  <Step title="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).
  </Step>
</Steps>

## 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

<Tip>
  **Schedule Monday morning as a mandatory high-staffing window.** The data consistently shows Monday 09:00–12:00 as the single highest-volume, highest-abandonment window of the week. Adding even two additional agents to this shift has a measurable impact on wait times and abandonment rates.
</Tip>

<Tip>
  **Use split-shift scheduling for the afternoon peak.** Rather than scheduling full-day shifts for peak coverage, a split shift starting at 13:00 and ending at 19:00 covers the 14:00–16:00 peak without paying for the quiet morning hours for those agents.
</Tip>

<Tip>
  **Build a lightweight alert system for volume spikes.** Since the trend component shows slow growth and residual spikes coincide with product events, a rolling 7-day average threshold alert (>1.5× the rolling mean) can give managers 30–60 minutes of lead time to pull in on-call staff before wait times degrade significantly.
</Tip>

<Note>
  **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.
</Note>

## Technologies used

<CardGroup cols={3}>
  <Card title="Python" icon="code">
    Core language for all data processing, time-series analysis, and recommendation development.
  </Card>

  <Card title="Pandas" icon="table">
    Timestamp parsing, aggregation to hourly/daily series, and day-of-week groupby operations.
  </Card>

  <Card title="Matplotlib" icon="chart-bar">
    Time-series line charts, intra-day volume curves, and annotated peak window visualizations.
  </Card>

  <Card title="Statsmodels" icon="activity">
    STL decomposition, classical additive decomposition, and trend significance testing.
  </Card>

  <Card title="Jupyter Notebook" icon="book-open">
    Interactive analysis environment with inline plots and narrative documentation of findings.
  </Card>
</CardGroup>
