BPO voice agent to data analyst: AHT, CSAT and FCR as evidence
In this article (7 sections)
- The scorecard you get versus the analysis behind it
- The project: does lower AHT come with more repeat calls?
- What the before-and-after says about you
- The gap from the floor to an analyst desk
- Contact-centre MIS, WFM or quality analyst first
- Answering "Why should we take someone from calling?"
- Try this next
Related programme: the Data Analytics with Generative AI course (3–4 months; ₹90,000 (inclusive of GST) · EMI from ₹4,000/month).
A BPO voice agent can move towards data analysis by switching sides of the scorecard: instead of receiving AHT, CSAT and FCR numbers, rebuild them from raw call logs and test a question the floor argues about, such as whether pushing handle time down causes more repeat calls. That one project, on synthetic data, shows metric definitions, joins and judgement together.
The scorecard you get versus the analysis behind it
Every agent has seen a daily or weekly scorecard. It usually looks something like this:
| Agent | Calls | AHT (sec) | CSAT % | QA score | Status |
|---|---|---|---|---|---|
| A1 | 62 | 285 | 81 | 88 | Green |
| A2 | 58 | 412 | 90 | 92 | Amber |
It tells you where you stand. It does not tell you why, and it hides the definitions. What counts as a call handled? Is hold time inside AHT? Is CSAT the share of 4s and 5s, or an average score? Does FCR mean no repeat call within 24 hours, 3 days or 7 days?
An analyst's version of the same information starts from the call log and answers different questions:
| Question | Scorecard answer | Analyst answer |
|---|---|---|
| Is A1 better than A2? | A1 is green, A2 amber | A1 is faster, but check how many of A1's customers call back |
| What is AHT made of? | One number | Talk + hold + after-call work, split out, so coaching can target the right part |
| Is CSAT reliable here? | 81% vs 90% | How many surveys were returned? Ten responses cannot separate two agents |
| What should the team lead do? | Push A2's AHT down | Depends on whether A2's longer calls prevent repeats |
The switch you are making is from the left column to the right column.
The project: does lower AHT come with more repeat calls?
This question is interesting because both answers are plausible and your floor experience tells you why. A rushed call can leave an issue half-solved; a long call can be a sign of a confused agent. Here is a synthetic call log and the analysis.
import pandas as pd
# Synthetic call log for practice. Durations in seconds.
calls = pd.DataFrame({
"call_id": range(1, 13),
"agent": ["A1","A1","A1","A1","A2","A2","A2","A2","A3","A3","A3","A3"],
"customer": ["C01","C02","C02","C01","C04","C05","C06","C07","C08","C09","C08","C10"],
"date": ["2026-09-01","2026-09-01","2026-09-02","2026-09-03",
"2026-09-01","2026-09-02","2026-09-02","2026-09-03",
"2026-09-01","2026-09-02","2026-09-06","2026-09-03"],
"talk": [180, 200, 170, 210, 320, 300, 340, 310, 240, 230, 260, 250],
"hold": [ 30, 20, 40, 25, 40, 30, 35, 45, 30, 25, 40, 20],
"acw": [ 40, 35, 45, 50, 60, 55, 50, 65, 45, 50, 40, 55],
"csat": [ 4, 3, None, 2, 5, 5, 4, None, 4, 5, 3, 4],
})
calls["date"] = pd.to_datetime(calls["date"])
calls["handle"] = calls["talk"] + calls["hold"] + calls["acw"]
# A call is "resolved first time" if the same customer does not call again within 7 days.
calls = calls.sort_values(["customer", "date"])
calls["next_call"] = calls.groupby("customer")["date"].shift(-1)
calls["repeat_7d"] = (calls["next_call"] - calls["date"]).dt.days.le(7)
per_agent = calls.groupby("agent").agg(
calls=("call_id", "count"),
aht=("handle", "mean"),
hold_share=("hold", "sum"),
repeat_rate=("repeat_7d", "mean"),
csat_top2=("csat", lambda s: (s.dropna() >= 4).mean()),
surveys=("csat", "count"),
)
per_agent["hold_share"] = per_agent["hold_share"] / calls.groupby("agent")["handle"].sum()
print(per_agent.round(2))On this invented log, A1 has the lowest AHT and the highest repeat rate: two of A1's four calls were followed by the same customer calling back within two days, and A1's returned surveys score lowest. A2 is slowest with no repeats. A3 sits in the middle, with one repeat. With only a few calls per agent, this proves nothing about real agents. It shows you know how to test the question.
What the before-and-after says about you
When an interviewer compares the two versions, they see specific skills:
- You define metrics before computing them. The code states that AHT includes hold and after-call work, and that FCR here means no repeat within 7 days. Different processes use different windows; naming yours is the professional habit.
- You know where the data lies. CSAT has missing surveys. Using
dropna()and reporting the survey count stops a two-response average from looking like a verdict. - You join events over time. Finding the next call by the same customer is a small version of what analysts do constantly with orders, tickets and sessions.
The gap from the floor to an analyst desk
Floor experience gives you metric vocabulary and a feel for how numbers get gamed, for example agents avoiding transfers or closing calls early. What it does not give you:
- SQL. Real call data sits in a dialler or CRM database. Learn joins and window functions such as
LEAD(), which does in SQL whatshift(-1)does above. - Excel beyond lookups. Pivot tables,
COUNTIFS, and building a clean template other people can reuse. - A BI tool. Workforce and quality teams increasingly expect dashboards rather than emailed sheets.
- Writing a recommendation. Two or three sentences a manager can act on, with a caveat about sample size.
Contact-centre MIS, WFM or quality analyst first
The closest step is usually inside the same world: MIS executive or reporting analyst for a contact centre, WFM analyst (workforce management: forecasting call volumes and building rosters), or quality analyst with a data focus. Your process knowledge is directly useful there, and those roles build the SQL and reporting base for a broader data analyst move later.
Answering "Why should we take someone from calling?"
"I have taken customer calls for two years, so I know how AHT, CSAT and FCR are measured and how agents react to them. I noticed our team was pushed on AHT while repeat calls were never shown on the same sheet. So I learned pandas and SQL and built an analysis on a synthetic call log that calculates AHT from talk, hold and after-call work and checks whether faster agents get more repeat calls within seven days. I report survey counts next to CSAT so small samples are not over-read. I want to be the person who builds the scorecard and explains what it can and cannot say."
Try this next
Rebuild the project with your own synthetic data, add a LEAD() version in SQL, and put both in a repository with a one-page write-up. Run your resume through the free skill check, and look at the Data Analyst programme if you want guided SQL and Power BI practice on operational data. A related route for back-office staff is the KPO non-voice guide.
Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.
This article is part of our Data Analytics with Generative AI programme — 3–4 months. The full analyst stack — Excel, SQL, Power BI and Python pipelines — then a generative-AI layer you can prove is right.
Explore Data Analytics with Generative AI