Contact center queueing (Erlang C)
4 queues, 2,400 half-hour intervals over a full business month, where agents_staffed is what Erlang C (1917) says is actually required to clear each queue's own SLA target, not a plausible-looking number.
A call_volume column and an agents_staffed column with no relationship between them can't test a workforce-management pipeline, because the whole point of WFM is that staffing is derived, not chosen independently. Here, agents_staffed is reverse-solved from Erlang C (computed via the numerically stable Erlang B recursion) to be the smallest agent count that clears the queue's declared SLA target, plus a real 20% shrinkage buffer. Wait probability, average speed of answer, and service level are the exact deterministic Erlang C formulas, recomputable from the raw columns. Abandonment follows the same expected-vs-realized split as the credit-risk dataset's expected_loss/realized_loss: a deterministic rate from a competing-exponentials wait/patience model, and a real Binomial draw for what actually happened.
2,404 rows across 2 tables, 50 KB zipped. Public domain (CC0), no signup, no attribution required.
What is in it
queue_id, queue_name, sla_pct, sla_sec, patience_sec
Billing Support, Technical Support, Sales, Retention -- each with a different real SLA policy
interval_id, queue_id, interval_start, offered_calls, aht_sec, agents_staffed, traffic_intensity_erlangs, occupancy_pct, wait_probability_pct, asa_sec, service_level_pct, expected_abandon_rate_pct, calls_answered, calls_abandoned, realized_abandon_rate_pct
agents_staffed is reverse-solved from Erlang C, not assigned
What holds, and how it was checked
Each line was measured against these exact files rather than asserted. The same checks ship inside the zip as INTEGRITY.txt, so you can re-run them yourself.
- every queue clears its own declared SLA target (75-90%) on 100% of its 600 intervals
- service_level_pct matches an independent Erlang C recomputation on all 2,400 intervals
- calls_answered + calls_abandoned equals offered_calls exactly, on all 2,400 intervals
- occupancy_pct and service_level_pct correlate at -0.31 (higher load, worse service)
- aggregate abandonment stays under 4.0% for every queue over the full month
- 0 orphaned foreign keys joining intervals to queues
Questions it can answer
- Does higher occupancy actually correlate with worse service level, the real Erlang relationship?
- How much staffing buffer (shrinkage) does it take to keep abandonment in an industry-plausible range?
- Does a realistic intraday call-volume curve break a naive flat-staffing assumption?
- Which queue's SLA policy is hardest to hit given its volume and patience profile?
Generate a custom version
This dataset is fixed. Different borrower counts, a different rating mix, or a different seed all come from the same underlying schema, so start on the canvas and shape the loan and borrower tables to what you need.
This dataset reverse-solves staffing from Erlang C and models abandonment via a competing-exponentials wait/patience relationship, neither of which a per-column declared schema can express, so it ships as a runnable script rather than a schema.yaml a bare misata generate could regenerate honestly.
pip install misata curl -O https://raw.githubusercontent.com/rasinmuhammed/misata/main/examples/contact_center_queueing.py python -c "from contact_center_queueing import build, verify; t = build(n_business_days=30, seed=17); verify(t)"Read the docs
Other datasets
- Retail star schema
A dimensional model you can actually practise joins on: one fact table, four dimensions, 63,170 rows, and every join resolving.
- Machine degradation
100 machines monitored from commissioning to failure, with an exact remaining-useful-life label on every one of 23,118 readings.
- Ecommerce storefront
A year of orders across five joined tables, with a real Q4 peak and totals that reconcile to the cent.
- B2B SaaS subscription analytics
Accounts, seats, MRR, churn and support load, where company size actually drives the plan.
- Credit risk portfolio
3,000 borrowers and 4,200 commercial loans, where a credit rating actually predicts whether the loan defaults, at the rate S&P's own data says it should.
- Network intrusion / netflow
500 hosts and 20,000 labeled flows, where a port scan, a DDoS flood, and a brute-force attempt each carry the real statistical signature their MITRE ATT&CK technique actually leaves in traffic.
- Manufacturing SPC (Cpk / Xbar-R)
5 processes, 450 subgroups, 2,250 measurements, where process capability and out-of-control detection come from a real Xbar-R control chart -- including one process with an engineered tool-wear drift that actually trips Western Electric rules where it happens.

