Skip to content
Home/Portfolio/Support Ticket Routing Classifier

Support Ticket Routing Classifier

Machine learning that sends each support ticket to the right team, and leaves unsure ones for a person.

Applied Machine LearningCase study6 technologies
Quick summary

A routing model for support tickets that picks the right team and a confidence level. Two model types were compared before choosing, and low-confidence tickets stay in the shared queue.

Support Ticket Routing Classifier preview
Applies

Overview

What this is and why it matters, in plain English.

A routing model for support tickets that picks the right team and a confidence level. Two model types were compared before choosing, and low-confidence tickets stay in the shared queue.

Machine learning that sends each support ticket to the right team, and leaves unsure ones for a person.

The situation

What was going on before, and why it needed fixing.

Support tickets landed in one shared inbox and were sorted by whoever picked them up. Misrouted tickets bounced between teams before work started.

Tickets landed in one shared inbox and were sorted by whoever picked them up. Misrouted tickets bounced between teams before anyone started on them.

What it needed to do

The outcomes the project had to deliver.

  • Route each ticket to the right team automatically.
  • Compare model families fairly before choosing one.
  • Never route confidently when the model is unsure.

What I did

My part of the work and who I worked with.

I built and evaluated the TensorFlow neural network and the XGBoost model, ran the bias and variance diagnostics, and shipped the chosen model behind a Node.js REST endpoint with Redis caching.

How it works

The main building blocks, from the screen people use to the data underneath.

Trained a softmax neural network in TensorFlow on ticket text and an XGBoost model on structured fields, compared them on the same held-out set, and deployed the chosen model behind a Node.js endpoint that returns a team and a confidence. Low-confidence tickets stay in the shared queue.

  1. 01

    Text and structured features

    Ticket text is vectorized for the neural network; structured fields such as product area and channel feed the tree model.

  2. 02

    Neural network (TensorFlow)

    Dense layers with ReLU, L2 regularization and dropout, and a softmax output over teams.

  3. 03

    Gradient-boosted trees (XGBoost)

    A tree ensemble trained on the same split for a direct comparison.

  4. 04

    Node.js API

    Returns a team and a confidence; below the threshold the ticket stays in the shared queue. Recent results are cached in Redis.

Key choices and trade-offs

Every build involves trade-offs. These are the important ones and what each one cost.

DecisionTrade-off
Evaluate both model families on one held-out set.More training work, but the choice rests on evidence rather than habit.
Abstain below a confidence threshold.Some tickets still need manual sorting, but confident misroutes are avoided.
Class weights for small teams.Slightly lower overall fit, but low-volume teams are not ignored.

Under the hood

Implementation details for technical readers, with a code sample.

  • Applies neural networks, softmax multiclass output, and decision-tree ensembles from Advanced Learning Algorithms.
  • Uses bias and variance diagnostics and learning curves from the Machine Learning Specialization.
  • A clear abstain path to the shared queue.
model = tf.keras.Sequential([
    tf.keras.layers.Dense(128, activation="relu", kernel_regularizer=tf.keras.regularizers.l2(1e-4)),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(64, activation="relu"),
    tf.keras.layers.Dense(num_teams, activation="linear"),
])
model.compile(optimizer="adam",
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))
model.fit(X_train, y_train, validation_data=(X_cv, y_cv), class_weight=weights, epochs=40)

Problems solved

What got in the way, and how each problem was fixed.

  1. 01

    Some teams receive far fewer tickets, so class weights and per-class metrics kept the small teams from being ignored.

    Class weights during training and per-class precision and recall during evaluation.

  2. 02

    Training and validation curves were used to diagnose high bias versus high variance before adding data or capacity.

    Training and cross-validation curves read before each change, so more data or more capacity was added only when the diagnosis called for it.

  3. 03

    A wrong confident route is worse than no route, so the API abstains below a confidence threshold.

    A confidence threshold on the softmax output; tickets below it are not routed.

Security, speed and growth

How data is protected, and how the system stays fast as usage grows.

Security

Ticket text is processed in the service and not written to logs; only the route and confidence are stored.

Speed & growth

One model call per ticket behind a lightweight Node.js endpoint, with Redis caching repeat lookups.

Quality and releases

How changes were tested and shipped safely.

Held-out evaluation per team, threshold tuning on a validation split, and regression tests on a fixed ticket set before each model update.

Tech stack

The tools and technologies used, for recruiters and technical reviewers.

PythonTensorFlowXGBoostNode.jsRedisREST

Results

What the system is designed to achieve, and how.

MetricResult
Models compared2 NN vs trees
Low confidenceAbstain to shared queue
OutputSoftmax multiclass

These are design targets and approach choices for the system, not reported production figures.

Questions

Plain answers first, then the detail a technical reviewer would ask about.

Common questions

What happens when the system is not sure?
The ticket stays in the shared queue for a person to route, so uncertain tickets never go to the wrong team.
What does it save a support team?
Time spent reading and forwarding tickets by hand, so agents start on the actual problem sooner.

For your tech lead

Which certification does this apply?
Advanced Learning Algorithms, and the Machine Learning Specialization.
What happens when the model is unsure?
The ticket stays in the shared queue for a person to route.

Key takeaways

  • •Machine learning that sends each support ticket to the right team, and leaves unsure ones for a person.
  • •Built with Python, TensorFlow, XGBoost, Node.js, Redis, REST.
Send a brief
Engagement

Choose how we work together

01

Join your team

A senior engineer inside your team. I work in your codebase, standups and code reviews, and stay long enough to own a real part of the product. Under the hood: Laravel, Node.js, Python or AWS.

Full-time or long contract
02

Work solely for your company

A dedicated engineer for one company. I take the product from planning to the live version: backend, data, hosting and screens, with your product as my focus.

Dedicated contract
03

One project

A clearly defined build, then a clean handover: an MVP, taking an AI-built prototype (Lovable, Bolt, Cursor) to production, a migration, or an AI feature. Get in touch to discuss scope and pricing.

Fixed-scope project

Prefer to hire through a platform? I'm onUpworkand