Predictive routing: the trained agent-match model
Predictive routing ranks the agents eligible for an inbound work item and picks the one with the best predicted outcome. The marginal signal — each agent’s own recent CSAT, handle time, and load headroom — scores an agent in isolation. Two agents with identical CSAT histories look interchangeable to it, even if one consistently delights enterprise billing callers while the other shines with first-time SMB users. The match model closes that gap: a per-tenant trained model over the interaction between who is calling, why they are calling, and which agent handles them. This page explains what the model learns, which features it sees, how the trained artifact moves from the offline trainer to the live router, how the match score blends into the final pick, and how to enable and verify it.Model overview — three levels of learned means
A trained match model is a compact JSON artifact holding learned outcome means at three levels of a hierarchy:- The tenant mean — the average outcome across every labelled interaction in the training window (the global prior).
- The agent mean — each agent’s own average outcome.
- The agent-by-feature mean — each agent’s average outcome on
interactions carrying a specific context feature, such as
segment:enterprise,intent:billing, orvalue:high.
(score − 1) / 4, so 0 is the worst outcome and 1 the best. Training is
target encoding with hierarchical shrinkage: the predicted outcome for
an agent on a given interaction is the agent-by-feature means shrunk toward
the agent mean, which is itself shrunk toward the tenant mean, each in
proportion to how much history backs it:
n is the labelled sample count for that level and k is a shrinkage
pseudo-count (default 10) — a cell reaches roughly half trust at n = k.
This is partial pooling: thin evidence leans on the level above it, strong
evidence speaks for itself. The prediction for one interaction is the mean
of the feature estimates the agent has cells for, or the agent estimate when
no feature cell exists.
Feature vocabulary — what the model sees
Context features come from two sources, combined into one normalised, de-duplicated set per interaction:- CDP context tags. The contact’s attribute tags (
segment:enterprise,intent:billing,value:high,style:analytical, and any other tag your CDP writes) each become one feature key. - The routing queue as an intent proxy. The queue the interaction routed
through becomes one
queue:<id>feature, so the model learns per-queue affinities even before contacts carry rich tags.
Segment:Enterprise and segment:enterprise are the same feature. The
queue feature is placed first so it survives the per-sample cap, and its
queue: prefix keeps it from colliding with a raw tag of the same text.
The same extraction runs at training time and at serve time, so the two
always agree on feature keys.
Train/serve parity — one module, one artifact
The training maths and the scoring maths live in a single pure, no-I/O module shared by two consumers:- The offline trainer, a scheduled job that reads your tenant’s recent completed calls joined to CSAT survey responses and the caller’s contact tags, trains the model, and writes the artifact.
- The runtime scorer, the predictive arm of the work-item router, which reads the artifact and scores each candidate agent for the inbound interaction’s context.
acd_predictive_routing.match_model), with no schema migration; the same
settings pattern the other predictive-routing knobs use. Scheduled training
runs weekly; each run replaces the artifact atomically.
Tuning knobs
The serving blend — match score meets aggregate ranking
At dispatch time, the predictive arm first computes the marginal score — the weighted blend of normalised CSAT, handle time, and headroom (csat_weight,
handle_weight, headroom_weight, renormalised to sum to 1). The trained
match score then interpolates in only when a model exists and you give
it a positive match_weight:
match_weight at 0, the predictive arm is
exactly the pre-model marginal predictor — the knob is inert until you
train. Setting match_weight decides how much of the final pick the
customer-context signal owns.
Cold-start fallbacks
The model never punishes thin evidence:- Unseen agent → scores the tenant mean, not zero.
- Agent with no cell for the interaction’s features → falls back to that agent’s own mean.
- No labelled samples at all → no model is trained, and routing stays on the marginal predictor.
Pairing with attribute and affinity scorers
Orbit evaluates routing rules at two different moments, and the match model occupies the second one:- Pre-queue (attribute and affinity rules). Skill requirements, attribute rules, and behavioral-affinity profiles decide which agents are eligible when a conversation enters or re-enters a queue. Affinity pairing scores the Jaccard overlap between contact tags and each agent’s affinity profile, blended with headroom, on its own opt-in arm.
- At dispatch (the predictive arm). Within the eligible pool, the predictive arm ranks candidates by expected outcome — marginal signals by default, plus the trained match score once you train a model. The match model adjusts the ranking among eligible agents; it never widens or narrows eligibility.
Operator posture — enable, train, verify
The feature is tenant-owned throughout:- Opt-in by two explicit switches. Training runs only when
acd_predictive_routingis enabled andtraining_enabledis set. The platform never trains or applies a model without both; enabling predictive routing alone keeps the marginal predictor unchanged. - Config lives in your organization’s settings (
acd_predictive_routingknobs), so no migration applies and no platform default changes your routing. - Model quality is observable in your own data. The model trains on your CSAT-answered calls, so its predicted outcomes are checkable against your CSAT analytics; scheduled training refreshes the artifact weekly.
- No A/A vendor claims. The match model is a deterministic, interpretable target-encoding model over your own historical outcomes — not a black-box vendor classifier. Every score decomposes to means you can audit.
match_weight above 0 and compare the
predictive arm against the baseline using treatment_percent as an A/B
dial.
See also
- ACD queue model — the queue machinery the predictive arm dispatches within
- Omnichannel queue routing — the operator loop for queues, attribute rules, and affinity policies across digital channels
- CDP event model — where the contact’s context tags come from
- Recommendations — adjacent analytics surfaces for queue performance
- Tenant isolation — why each tenant’s model trains and serves in isolation