Business

Ticket Signals That Predict a First-Pass Failure

Antonio Evans10 min read

A flat two-dimensional diagram on a light background.
Key points

Key points

  1. 1A pre-router signal only earns its place if the failure rate for tickets carrying it is measurably higher than the queue's base failure rate, not just higher in a small sample.
  2. 2Split tickets one signal at a time, compute the failure rate in each bucket, and keep the signal only if the gap between the two proportions survives a confidence interval.
  3. 3A signal must be populated before routing happens, otherwise you are training a classifier on information the router will never see at decision time.
  4. 4Counting and text-based features both work, but the ones that survive testing tend to be structural (attachments, tier, channel, prior contacts) rather than subtle wording cues.

Start with the base failure rate, because it is the only fair comparison

A first-pass failure is any ticket that the agent, bot or human, could not close correctly on the first attempt: it bounced back, was reopened, was reassigned to a second team, or the customer replied saying the answer did not solve the problem. Whatever definition you pick, fix it before you start and write it down.

The base failure rate is the share of all tickets in the queue that fail by that definition over a fixed window. If 1,000 tickets entered a queue in a quarter and 180 failed first pass, the base rate is 18 percent. That number becomes the yardstick for every signal you test.

Why be strict about this? Because human intuition about which tickets go wrong is unreliable, and every signal looks predictive when you eyeball a handful of tickets. A signal is only useful to a pre-routing classifier if it moves the failure rate enough that the router's decision changes for a meaningful number of tickets. That is a statistical claim, not a narrative one.

There is a second reason to anchor on the base rate: it tells you whether the problem is worth solving. Ticket resolution benchmarks published by MetricHQ put a strong overall resolution rate around 70 to 80 percent and first contact resolution around 70 to 79 percent, with lower bands for telecom and SaaS (60 to 70 percent) and for insurance and healthcare (55 to 65 percent). If your own base failure rate sits inside those bands, a router that identifies and reroutes even a slice of failing tickets is worth building. If your base rate is already in the low single digits, the ceiling on any router's value is low and you should spend the effort elsewhere.

Compute lift, then a confidence interval, then decide

Lift is the difference between the failure rate in a signal bucket and the base rate, expressed either as an absolute percentage point gap or as a ratio. Both are useful; absolute points tell you how much a routed cohort improves, the ratio tells you how much more likely a failure is inside the bucket.

Here is the decision rule in one sentence: keep the signal only if the lower bound of the confidence interval around the bucket's failure rate is still above the base rate, and the field is populated before routing happens.

The confidence interval for a proportion uses the binomial standard error. Jason Brownlee's walkthrough of reporting classifier performance gives the formula and the constants: 1.64 for 90 percent, 1.96 for 95 percent, 2.58 for 99 percent, applied to the error, or in our case the failure rate, rather than the accuracy. The same page notes the assumptions: independent observations and at least 30 observations in the evaluated group.

Worked example. A queue takes 4,000 tickets per quarter. Base failure rate is 18 percent, so 720 failures. Now split by a candidate signal, body length under 120 characters:

GroupTicketsFirst-pass failuresFailure rate
Short body (under 120 chars)40011228.0 percent
Everything else3,60060816.9 percent
All tickets (base)4,00072018.0 percent

The short-body group fails at 28.0 percent against a base of 18.0 percent, a 10 point lift. The standard error for that group is the square root of (0.28 times 0.72) divided by 400, which is 0.0225. Multiplying by 1.96 gives a half-width of 0.044, so the 95 percent interval runs from 23.6 to 32.4 percent. The lower bound is well above 18 percent. The signal survives.

Now the same test on a signal that looks similar but is not: body length under 60 characters.

GroupTicketsFirst-pass failuresFailure rate
Very short body (under 60 chars)901921.1 percent
All tickets (base)4,00072018.0 percent

Lift looks like 3.1 points, but the standard error is 0.043, and the 95 percent interval runs from 12.7 to 29.5 percent. The base rate sits inside the interval. You cannot tell this bucket apart from the queue. Do not ship the rule; collect more tickets in that bucket or merge it into the wider short-body rule until the sample is big enough.

A quick way to run the same calculation in a script:

from math import sqrt

def lift(n, failures, base_rate, z=1.96):
    p = failures / n
    se = sqrt(p * (1 - p) / n)
    lo, hi = p - z * se, p + z * se
    return {
        "rate": round(p, 4),
        "lift_pts": round((p - base_rate) * 100, 2),
        "ci_low": round(lo, 4),
        "ci_high": round(hi, 4),
        "clears_base": lo > base_rate,
    }

print(lift(400, 112, 0.18))  # short body: clears_base True
print(lift(90, 19, 0.18))    # very short: clears_base False

Three practical cautions. First, run the base rate for the same window as the bucket split, otherwise you are comparing cohorts from different traffic mixes. Second, if you test twenty signals at 95 percent you should expect roughly one false positive by chance alone; either lower the threshold or validate surviving signals on a fresh holdout window. Third, treat the interval as a sanity check, not a proof. It assumes a stable queue, and queues shift with product launches and outages.

Which signal families actually carry lift

The table below ranks the signal families by how often they tend to survive the interval test, based on what practitioners report about escalation and routing signals. The "populated before routing" column is the one that disqualifies more candidates than any statistical test.

Signal familyTypical bucketsPopulated before routingTypical lift sourceWatch out for
Ticket lengthUnder 120 chars, 120 to 600, over 600YesVery short bodies often lack diagnosis detailSkewed by boilerplate signatures and auto-forwarded mail
Intent phrasingExplicit question, imperative, complaint-only, no askPartly, needs a classifierComplaint-only tickets fail moreThe classifier is a model; you are measuring the model plus the signal
AttachmentsPresence, type (screenshot, log, CSV, video)YesScreenshot-only tickets are hard to reproduce without textAttachment type is often missing on API-created tickets
Customer tierFree, paid, enterprise, renewal windowYes, from CRM metadataHigher tiers have SLA pressure and more expected pathsUpdating tier mid-flight corrupts the split
ChannelEmail, chat, phone, in-app, APIYesChat produces shorter, less complete ticketsChannels differ in agents, so channel effects can be human effects
LanguageDetected language or localeYes, from detection or profileNon-primary-language tickets get longer turnaroundDetection itself costs a model call for short bodies
Prior contact historyPrior tickets in 30 days, prior escalations in 90Yes, from history tableRepeat contact is a strong proxy for unresolved issuesRequires identity resolution across channels

A few notes on the table. On prior history, Supportbench's summary of escalation prediction reports that accounts with four or more escalations in 90 days are flagged as higher risk, and that a response gap of more than two days or unresolved threads raise risk. Those thresholds are useful starting buckets, but the article does not say whether they were validated on independent data, so treat them as hypotheses to test on your own queue, not as fixed rules.

On attachments and structured features, SupportLogic's account of feature engineering for escalation prediction describes building features from ticket state over time and from the customer's prior history, then combining and selecting them with automated tools. The useful lesson is that static fields rarely carry the whole signal; ratios and histories (this ticket's age versus this customer's median resolution time, for example) do better. They are also populated before routing, which is why they clear the second gate in the table.

On intent phrasing, the TickIt paper from ByteDance analyzes over 20,000 tickets on Volcano Engine and argues that topic-aware, dynamic ticket state matters because routing to the right team depends on what the ticket is about, and that state changes over a ticket's life. If you build a phrasing classifier, remember you are measuring the classifier, not the underlying customer behavior, so report both its own accuracy and the lift of its output as a routing signal.

Check the field is populated before you train on it

The most common mistake in pre-router signal work is training on a field that only exists after a human has acted. Escalation flags, agent notes, resolution codes and final priority are all post-routing or post-resolution. A classifier using them will look excellent in offline evaluation and be useless in production, because at decision time the field is empty.

The practical test: take 200 tickets from your queue and, for each candidate field, answer a single question. Would this field have had the same value at the moment the ticket entered the queue? If no, drop it or replace it with a pre-routing proxy. Prior escalation count is fine because it references older tickets. The current ticket's escalation flag is not.

The same discipline applies to the label side. A first-pass failure is defined by outcome, which is fine, but you need the outcome recorded consistently. If reopened tickets are only logged when a customer replies, and some reopenings happen silently in the tool, your base rate is understated and every signal's lift is measured against a wrong yardstick.

There is a related question of cost. Every pre-router signal adds computation before routing, and routing decisions often stack a cheap model ahead of an expensive one. Bouchard's analysis of LLM cascades finds that while two-model cascades improve mean accuracy over single-model selection by 2.1 to 8.2 percentage points, adding more than two models did not improve accuracy in 118 of 135 comparisons and added at most 0.43 points. The same logic applies to signals: every added signal costs an evaluation, so a signal with a 2 point lift and an interval that barely clears the base is rarely worth the operational complexity of maintaining it.

If your signal set grows large and you want to test combinations rather than single signals, the AI Engineer topic page on model routing and gateways frames evaluation as a first-class responsibility: evaluate the complete policy, record why a route ran, and release policy changes with an audit trail. That framing applies directly. Your router's decisions should include a record of which signal fired and the observed failure rate for the bucket.

Turn signal selection into a standing review

The signal set is not static. Queues change when products ship, when channels get added, and when the customer mix shifts. Build a monthly review with a fixed structure:

  1. Recompute the base failure rate for the queue over the review window and compare it to the prior window.
  2. For each live signal, recompute the bucket failure rate and interval, and flag any signal whose interval now includes the base.
  3. For each flagged signal, either retune the bucket boundary, retire the rule, or mark it as needing a holdout.
  4. Run one or two candidate signals pulled from the last month's backlog of ideas through the same two-gate test.

Two guards keep this honest. Track both the false positive rate and the false negative rate of the router against the full queue, because a signal that catches failures but routes too much traffic to the specialist path costs you specialist hours. And review contained and escalated conversations together, as the Userflow breakdown of escalation criteria recommends, so that fixing a threshold on one side does not quietly damage the other.

It also helps to distinguish triggers by type when you review. Conduit's escalation framework separates confidence thresholds, sentiment detection, topic rules and VIP flagging, and assigns each a different role: sentiment is about relationship repair rather than correctness, and topic rules are hard-coded because the stakes are too high for a probability. If you mix sentiment, which is expensive to compute and noisy, with structural fields like attachment presence, the interval test will wash out both. Test sentiment as a signal family in its own right, on a holdout window, before it enters the router.

If you want an expert to build this signal review into your own queue, Quanta Intelligence experts read your context and return finished deliverables, including the signal test harness and the monthly review checklist. One free consulting call is also available if you would rather scope the definitions and the base rate first.

The most useful mental shift is to stop looking for signals that "feel predictive" and start treating each candidate signal as a hypothesis with a verdict. The verdict has two parts: the lift clears the confidence interval, and the field exists at decision time. A signal that passes one gate and fails the other is not a weak signal; it is not a signal.

The failure cost side matters too. An escalation path that triples the cost of resolution, as Supportbench reports, sets the bar for the router higher than a path that merely reassigns within a team. High-cost paths deserve a wider confidence interval, not a narrower one.

Finally, keep the evaluation loop closed. IBM's overview of human-in-the-loop is a useful reminder that the router is a system with a human on the other end, and the metric that matters is whether the human ends up doing the work the router intended to send them. Instrument the handoff: did the receiving agent confirm the routing decision was right, and did the customer reply within the first response? Those downstream signals are the best evidence available for whether a candidate rule deserves to stay.

FAQ

FAQ

What counts as a first-pass failure?

Any ticket that the queue could not close correctly on the first attempt: it was reopened, reassigned to another team, bounced back from the customer as unresolved, or the customer replied saying the answer did not help. Pick one definition, write it down, and apply it to the base rate and every bucket split. Inconsistent definitions make lift measurements incomparable across review cycles.

Should I use absolute lift or a ratio?

Report both but decide on the absolute percentage point gap, because it maps directly to how many tickets the router would reroute. A ratio is useful for communicating relative risk inside a cohort. The decision rule itself lives in the interval around the absolute rate, so the lower bound of that interval compared to the base rate is the number that settles the argument.

How large does a bucket need to be before I trust it?

At least 30 observations is the standard floor for approximate normality in a proportion interval. In practice, for a base rate in the high teens, you need closer to a few hundred tickets in the bucket before the half-width shrinks enough to clear the base by a comfortable margin. If a promising bucket is too small, merge nearby buckets until it is not, rather than relaxing the test.

What do I do when two signals overlap heavily?

Test them jointly by splitting on one signal and then checking the second within each slice. If the second signal adds no lift inside the slices, it is redundant and should be dropped, because every signal costs evaluation at routing time. A router with three independent signals usually beats one with ten correlated ones, and it is far easier to explain when someone asks why a ticket was routed.

Can a model output itself be the signal?

Yes, but measure it in two steps. First measure the model's own accuracy against the routing decision it recommends, then measure the lift of its output as a routing signal against the base failure rate with the same interval test. Treat any confidence number the model produces as a candidate signal, never as ground truth, since published summaries of confidence-threshold escalation note that verbalized self-confidence is the weakest signal class.

Sources

Sources

  1. Ticket Resolution Rate
  2. How to Report Classifier Performance with Confidence ...
  3. How AI Predicts Ticket Escalations
  4. Predicting Support Ticket Escalations with Machine Learning
  5. TickIt: Leveraging Large Language Models for Automated ...
  6. Is Escalation Worth It? On the Depth of LLM Cascades
  7. Model routing & gateways - AI Engineer
  8. AI Agent Human Escalation Criteria
  9. When Should AI Hand Off to a Human?
  10. What Is Human In The Loop (HITL)?
  11. Using Confidence Thresholds to Escalate Requests to a ...
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles