Машинное обучение, Python

Решение домашнего задания временных рядов: пример из Python

Улучшение поддержки клиентов с помощью аналитики call-центра

Добро пожаловать в часть 3 анализа временных рядов! Как и было обещано в моем последнем посте, мы проработаем тематическое исследование, в котором будут анализироваться данные временных рядов, сгенерированные центрами обработки вызовов. Это продолжение моих предыдущих сообщений о данных временных рядов.

В Части 1 мы рассмотрели множество основ, связанных с анализом временных рядов, включая введение в такие концепции, как сезонность, тренд, автокорреляция, повторная выборка, дифференцирование первого порядка. В Части 2 мы прошли через моделирование данных временных рядов, провели перекрестную проверку этих данных и, наконец, настроили гиперпараметры нашей модели. Обязательно ознакомьтесь с ними, поскольку здесь мы будем использовать множество концепций, представленных в этих статьях!

Постановка задачи

Колл-центр службы поддержки в Великобритании для медицинской компании испытывает проблемы с производительностью. Их эффективность значительно снизилась в период с февраля по апрель, о чем свидетельствует значительное снижение рейтингов в Google Reviews. Они подозревают, что изменение производительности связано с плохой работой агента.

Основная цель этого исследования - провести аналитику колл-центра.

Call Center Analytics (CCA) включает сбор и отслеживание важных данных о людях, которые звонят в центры обработки вызовов или которым звонят из центров. Это дает возможность отслеживать объемы звонков, удовлетворенность клиентов, производительность сотрудников и использовать их для улучшения отношений с клиентами.

В рамках CCA мы собираемся выявить некоторые гипотезы, которые могут способствовать этому изменению, а затем провести соответствующий анализ для их проверки. Кроме того, мы представим некоторые рекомендации в рамках предписывающей аналитики для работы региональной операционной группы.

Целевой KPI (ключевой показатель эффективности)

KPI - это важные конструкции, которые необходимо определять на раннем этапе решения любой бизнес-задачи. Он представляет собой метрику, которая важна для вашего бизнеса, и то, что вы пытаетесь оптимизировать для достижения своей бизнес-цели.

Существуют различные ключевые показатели эффективности колл-центра, на которых мы могли бы сосредоточиться - скорость передачи, время простоя, время ответа, время обработки вызовов и т. Д. В этом конкретном случае мы ограничим наш анализ до Abandonment Rate (AR) .

AR представляет собой процент вызовов, которые были потеряны до того, как на них можно было ответить.

Математически говоря,

AR = отклоненные вызовы / (отклоненные вызовы + принятые вызовы)

Давайте углубимся в наш набор данных.

Вот как выглядят пять (случайно выбранных) выборок из наших данных:

Столбцы данных:

  • Период: дата набора номера.
  • Тип: был ли тип контакта чат или звонок.
  • Время создания: отметка времени, когда был звонок.
  • Направление: был ли вызов входящим (набранным пациентами) или исходящим (набранным операторами центра обработки вызовов).
  • Время приема: отметка времени, когда вызов был принят агентом.
  • Общее время обработки транзакции: общее время, затраченное на вызов между пациентом и агентом.
  • Общее время постобработки: общее время «подведения итогов» (завершение любой работы администратора после звонка)
  • Время отказа: отметка времени, когда вызов был прерван.
  • Время обработки IVR: время, прошедшее для пациента на этапе IVR *.
  • Категория с тегами: классифицируйте, к какому типу звонков относится этот звонок, с помощью тега вызова.

* IVR - Interactive Voice Response - это автоматизированная система, которая направляет звонящих по меню: нажмите 1 для продаж, нажмите 2 для поддержки.

Установка правильных типов данных для столбцов

Невозможно переоценить важность правильного форматирования даты и времени (как вы, вероятно, знаете из Части 1). Поэтому мы будем фиксировать тип столбца для всех столбцов, содержащих дату и / или время.

Установка правильного типа данных для столбцов DateTime:

Установка правильного типа данных для столбцов Время:

Наконец, мы устанавливаем индекс как столбец Period:

df = df.set_index('Period')

Преобразование прошедшего времени в секунды

Мы будем преобразовывать три столбца, представляющие истекшее время, в секунды, используя dt.total_seconds().

Обоснование гипотез

Чтобы начать наше исследование низкой производительности агентов, мы сформулируем (и, в конечном итоге, проверим) шесть исходных гипотез:

  • H1: Уровень отказа увеличился (более 10%).
  • H2: время ожидания в очереди слишком велико.
  • H3: Уровень обслуживания 80/20 не поддерживается.
  • H4: Большое время обработки вызовов.
  • H5: Большое время постобработки.

Очистка данных

Прежде всего, при анализе записей центра обработки вызовов важно исключить из набора данных все вызовы, которые были прерваны в первые пять секунд (или какой-либо другой порог) попадания в систему. Причина в том, что это самоотказ звонков!

Предполагается, что эти (самоотклонение) звонки совершаются людьми, которые по ошибке набрали неправильный номер или, возможно, думали, что набрали неправильный номер, поэтому повесили трубку.

Мы также собираемся отфильтровать все звонки, которые не были приняты или отклонены.

Наконец, мы должны исключить любые перенаправленные вызовы (где Accept Time совпадает с Create Time) при вычислении AR. Это связано с тем, что мы не можем точно установить, был ли вызов перенаправлен или агент перехватил его, как только он вошел в систему.

Функциональная инженерия

Мы начинаем с создания нового столбца с именем Call_Status, который принимает значения - Abandoned или Accepted.

Мы также создадим столбецwait_time, то есть сколько времени вызывающий абонент должен ждать в очереди, прежде чем его вызов будет принят агентом.

Затем мы создаем два новых столбца time_of_day и day_of_week, чтобы проверить (позже), есть ли еженедельная или дневная сезонность в ставках AR.

Вспомогательные функции

Мы создадим три вспомогательные функции:

  • calculate_AR: для расчета AR по формуле, обсужденной ранее
  • print_AR: для печати результатов функции calculate_AR
  • calls_answered_under_sec: для расчета% всех входящих вызовов, выбранных за (определенное пользователем) количество секунд

Давайте приступим к проверке гипотез…

H1: Уровень отказа увеличился (более 10%).

Мы начинаем с проверки значения AR для месяцев с февраля по апрель, но только для входящих вызовов (это потому, что нас интересуют только случаи, когда вызывающий абонент отказывается от вызовов, а не агент). Отраслевые стандарты говорят, что AR от 5 до 10% является разумным.

Как видите, показатель AR намного превышает отраслевые стандарты, а это значит, что опасения компании не были напрасными.

Теперь, когда мы знаем, что доля прерванных вызовов увеличилась, простой способ визуализировать тенденции в AR - это rolling средних в ежемесячной шкале.

Глядя на 30-дневные скользящие средние временные ряды, мы можем увидеть, что долгосрочная тенденция коэффициента отказов в период с 13 февраля по 6 марта довольно плоская. Однако с 9 марта по апрель наблюдается период резкого увеличения показателя AR. 8, пост который снова начинает спускаться.

H2: время ожидания в очереди слишком велико.

Время ожидания в очереди или Время до отказа - это средняя продолжительность времени, в течение которого вызывающий абонент будет оставаться в очереди *, прежде чем он откажется от вызова (или положит трубку).

Примечание. Мы предполагаем, что как только сообщение IVR закончится, вызывающий абонент будет помещен в очередь.

Имея это в виду, давайте рассчитаем время до отказа по формуле:

Время до отказа = отметка времени при прекращении вызова - Отметка времени при создании вызова - время, проведенное в IVR

На гистограмме есть несколько наблюдений:

  • Очевидно, что доля брошенных вызовов более или менее одинакова для разных интервалов времени ожидания.
  • По крайней мере, 40% прерванных вызовов - это те, которые были прерваны в течение 2 минут ожидания в очереди.
  • Чуть меньшая часть вызовов прерывается из-за времени ожидания от 3 до 4 минут по сравнению с 2–3 минутами (хотя разница почти не значительна).

H3: Уровень обслуживания 80/20 не поддерживается.

В среднем по отрасли остается на уровне 80% вызовов, на которые отвечают в течение 20 секунд.

Похоже, мы далеко отстаем от отраслевых стандартов: только 6% входящих звонков отвечают в течение 20 секунд. Это может быть одной из основных причин, по которой производительность call-центра должна снижаться.

H4: Большое время обработки вызовов.

Хотя отраслевые стандарты различаются в зависимости от того, сколько времени следует тратить на решение проблем клиентов (~ 4–6 минут), мы все можем согласиться, что хотели бы сохранить это количество как можно меньшим.

Мы начнем с расчета и визуализации среднего ежедневного времени, затрачиваемого на обработку вызовов.

Среднее время, затрачиваемое на обслуживание клиентов по телефону, составляет примерно 4 минуты (240 секунд). Отраслевые стандарты практически одинаковы, поэтому мы можем быть уверены: низкая производительность не из-за проблем с обучением персонала.

Чтобы сравнить время обработки со средним по отрасли, давайте с помощью кумулятивной гистограммы визуализируем процент вызовов, которые могут быть обработаны менее чем за X секунд.

Примерно на 40% вызовов отвечает менее 3 минут, тогда как 80% вызовов можно выполнить менее чем за 6 минут. Несмотря на то, что эти цифры субъективны, мы можем установить базовый уровень (скажем, 4 минуты для 80% звонков) и попытаться превзойти базовый уровень.

H5: Большое время постобработки.

По отраслевому стандарту на завершение работы требуется 20–30 секунд. Однако в случае, если он намного выше, это может указывать на некоторые проблемы с эффективностью либо со стороны системы, либо со стороны персонала, тем самым ставя под угрозу производительность агента.

Как мы поняли из нашей сводки из 6 цифр, среднее время постобработки в большинстве дней составляет примерно 50 секунд. Интересно, что после 18 марта наблюдается сдвиг в сторону увеличения времени постобработки. Поскольку более длительное время постобработки занимает много времени оператора, это означает, что агент не может обслуживать большее количество вызовов, что приводит к увеличению времени ожидания и, в конечном итоге, увеличению AR.

Сводка результатов проверки гипотез

  • H1: Уровень отказа увеличился (более 10%). Верно
    AR% слишком высок по сравнению с отраслевыми стандартами.
  • H2: время ожидания в очереди слишком велико. Верно
    Долгое время ожидания вынуждает клиентов отказываться от звонка.
  • H3: Уровень обслуживания 80/20 не поддерживается. Верно
    Для обеспечения уровня обслуживания 80/20 необходимо задействовать больше агентов.
  • H4: Большое время обработки вызовов. Неверно
    Низкая производительность связана не с обучением персонала.
  • H5: Большое время постобработки. Верно
    Проблемы с эффективностью агента могут снизить производительность.

Рекомендации для практики

  • Создавайте интерактивные способы удержания абонентов во время ожидания.
  • Внедрите шпаргалки, чтобы упростить вызовы и сократить время обработки вызовов.
  • Приобретите программное обеспечение для автоматизации операций постобработки.
  • Решите любые проблемы с обучением операторов, чтобы сократить время обработки сообщений.
  • Рассмотрите возможность перераспределения ресурсов (агентов) в зависимости от времени суток и дня недели.

Основное время движения по время суток и день недели

Чтобы оценить время ключевого трафика (для успешного перераспределения ресурсов), мы будем строить коробчатые диаграммы относительно времени ожидания и времени для отказа.

Примечание. Рамочной диаграммы для времени ожидания поздней ночью нет, поскольку все звонки были прерваны в ночное время (это должно быть так, что колл-центр закрывается в полночь).

Из диаграмм выше видно, что:

  • Утро и ночь требуют большего количества агентов, так как время ожидания (немного) больше.
  • По выходным и понедельникам требуется больше агентов, так как время ожидания больше.
  • По четвергам также нужно больше агентов, так как в это время меньше всего времени на уход.

Конечная записка

Удержание клиентов играет важную роль в успехе фирмы, и поэтому неудивительно, что качество службы поддержки клиентов играет ключевую роль в поддержании отношений с клиентами.

Аналитика колл-центра определенно стоит вашего времени, потому что огромное количество полезной информации, которую можно извлечь из этой аналитики, бесценно. Если вы хотите получить подробные сведения о том, насколько хорошо вы обслуживаете своих клиентов, измерить эффективность работы агентов или узнать, почему вы теряете бизнес, попробуйте!

Мне было очень весело разобраться в этом тематическом исследовании, посвященном данным колл-центра. Не стесняйтесь использовать приведенные выше фрагменты кода для собственного анализа. Как всегда, я хотел бы услышать, есть ли лучшие способы сделать некоторые из вещей, о которых я упомянул.

До скорого :)