NLP-based Customer Service Automation
Manual customer service can be a tedious task. Using automated preprocessing, natural language processing, sentiment analysis, and dynamic agent assignments, we helped the swiss utility provider ewb streamline their processes and modernize their customer support activities.
Each year, the Young Boys Bern football club hosts the YB Hackathon. Located in their VIP lounge with an impressive view of the stadium, teams are given 24 hours to design and build innovative software products which they then pitch to a jury. After we won the previous hackathon in 2019 with our Augmented Reality Beer Order System for Stadiums, we returned in 2020 to defend our title.
This time, our original team consisting of Jonathan Külz, my brother Jan Carius, and me, was completed by my former London flatmate Christopher Gudde. Unfortunately, due to the Covid-19 pandemic, Christopher wasn’t able to travel from the UK to Switzerland, and I was stuck in quarantine in Munich after a flight back from a high-risk area. Jonathan and Jan could attend though, so we went with a half-on-site and half-homeoffice approach which worked out really well and did not impact our team spirit at all. As you can see in the title image, I even made it onto the team photo on my brother’s phone.
This year’s challenge set by the utility provider ewb concerned their problems regarding the handling of customer support requests and questions. Previous to the hackathon, support tickets would be either assigned to agents randomly or a dedicated support agent would manually read the requests and forward them to another agent with expertise in the corresponding area. This inefficient process led to unacceptably long turnaround times because agents would loose time manually browsing through their own service’s FAQs to find answers, thus rendering the customer service of ewb an expensive undertaking that the company challenged us to re-think and improve in the 24 hours we were given.
Here is an overview of what we build:
Our fully dockerized pipeline runs on the Azure cloud and receives incoming customer support requests. The messages are automatically analyzed using Natural Language Processing to categorize them by business units such as water, power, or waste management. In addition, sentiment analysis determines whether the customer is particularly angry or discontent to provide additional information to the support agents and allow for dedicated strategies for dealing with unhappy customers. The machine learning models for this step run on Google cloud services.
After the incoming message is categorized and analyzed, our system aims to automatically find information that is relevant to the request. To this end, we trained a Neural Network on the FAQ database provided to us by ewb. This allows our pipeline to match incoming requests with FAQs that are likely to answer the question or contain relevant information.
At this point, the service requests are assigned to customer support agents. Our system dynamically adapts to the work shift schedule provided by ewb and assigns messages to customer support agents based on their availability, their knowledge in the detected business units affected by the message, and their current amount of service tickets. Along with the raw message sent by the customers, our system provides the service agents with information about the detected business units and sentiment of the customer as well as suggested answers to the request based on the FAQ matching.
Our system radically simplifies and streamlines customer support processes for ewb: The support agents log into our web-app and are provided with a queue of tickets that have been assigned to them by our pipeline. Once they select a request, they are provided with the message, our sentiment evaluation, and our suggested answer, and can directly reply to the request within our web-app by either accepting the suggested answer, or modifying it manually before sending.
Due to our lack in frontend development expertise at the time of the hackathon and the limited time we had, our python flask-based web-app frontend ended up looking rather basic:
The system, however, is fully functional, and its looks could easily be improved by a frontend developer putting in a few hours of work.
As a bonus, we also created a Telegram bot that allows customers to send support requests to ewb via Telegram. For the support agents, the process stays exactly the same, our web-app simply takes their response and sends it back to the customer withing the existing chat conversation.
After the 24 hours of hacking, we were able to demonstrate the system live on stage. Members of the audience sent in service requests by E-mail and Telegram which were automatically analyzed and displayed in the service portal in real-time. Even though our web-app wasn’t the prettiest, the functionality of our approach convinced the jury and we were awarded the second prize:
Der zweite Platz hat sich das Team "Halbes Hähnchen" geschnappt! Wir gratulieren euch ganz herzlich zu dem verdienten zweiten Platz und dem Preisgeld von CHF 1'500. Danke, dass ihr dabei gewesen seid und für euren Einsatz! | @BSC_YB | @isolutionsag | https://t.co/UeZLfUo34s pic.twitter.com/OGYs4T7Ris
— YB Hackathon (@ybhackathon) October 10, 2020