Data AnalyticsCareer switch by background

BPO voice agent to data analyst: AHT, CSAT and FCR as evidence

PK
Pankit Kumar
Sr. Data Scientist at Parexel (a Goldman Sachs–backed company) · 27 September 2026 · 5 min read
In this article (7 sections)

Related programme: the Data Analytics with Generative AI course (3–4 months; ₹90,000 (inclusive of GST) · EMI from ₹4,000/month).

The short answer

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:

AgentCallsAHT (sec)CSAT %QA scoreStatus
A1622858188Green
A2584129092Amber

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:

QuestionScorecard answerAnalyst answer
Is A1 better than A2?A1 is green, A2 amberA1 is faster, but check how many of A1's customers call back
What is AHT made of?One numberTalk + 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 downDepends 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.

python
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 what shift(-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.

PK
Pankit Kumar
Lead Instructor, NeuraPath Academy

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
Counselling is free · no obligation

Not sure which programme fits?

Tell us your background and we will map it to the right entry point — including saying so when a cheaper programme is the better fit. A counsellor replies within one working day.