R, Звездочка И Платяной Шкаф

Является продолжением предыдущие публикации .

Основная цель публикаций — продемонстрировать возможности R для решения различных «рутинных» задач обработки данных, возникающих в бизнесе.

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

Схематический прототип и изделие, сошедшее с конвейера, имеют больше различий, чем сходства.

По тонкой механике R существует огромное количество специализированных блогов, книг, а также github. Но к ним обычно обращаются только после того, как увидят, что решение задачи с помощью R возможно и очень элегантно.

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

Имеется АТС (в нашем случае несколько территориально разнесенных экземпляров Asterisk версии 13LTS).

Есть информационная система\системы, в которую операторы заносят то, что слышат от пользователей.

И есть куча автоматизированных бизнес-процессов обработки запросов пользователей.

Также существует вертикаль лидерства от руководителя колл-центра до топ-менеджмента, а также смежных отделов, например, маркетинга, которым для стратегического управления требуется резюме того, «как живут люди», как ведут себя KPI и «где бизнес».

двигается.

" И здесь желания и возможности друг друга обнаруживают себя очень слабо.

Если в службе поддержки уже был какой-то генератор отчетов, то в Asterisk изначально не было ничего, кроме логов и cdr. Шаг 1 Мы попытались пойти стандартным путем и рассмотрели существующие инструменты для Asterisk. В первом приближении мы остановились на бесплатных версиях программ:

Стало немного лучше.

Ответственные сотрудники наконец смогли подготовить необходимое аналитическое заключение.

Однако качество этой отчетности было очень низким по нескольким причинам:

  1. Скрипты обработки в asterisk были очень сложными и писались с помощью макросов.

    По умолчанию файлы CDR генерируются с упором на минимизацию количества записей.

    Поэтому в полученных CDR при «схлопывании» внутренних трансферов и объединении вооружений был потерян ряд важных данных.

    И числа А (из-за макросов), и числа В (при объединении вооружений, инициируемых оператором).

  2. Очереди также не содержат полной информации.

    Никаких записей IVR, никакой информации о переводах наружу нет. И еще много чего не хватает.

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

  4. Бесплатные версии ограничены в функционале + пришлось вручную «допиливать» php, чтобы хотя бы не крашился.

    Я пренебрегаю неправильными расчетами длительности ввиду их незначительности (~10%).

    Для простоты я связываю это с нашими конкретными настройками звездочки.

  5. Данные из внешних каталогов и систем прикрепить невозможно.

    Все делается вручную в Excel. Например, подавать отчет не по номерам, а по ФИО оператора с учетом графика смен.

  6. Графического представления нет, а те, что предлагаются в платных версиях, далеки от того, что требуется.

  7. Различные системы почти всегда давали разные числовые результаты.

    Иногда разница достигала сотен процентов.

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

Шаг 2 Мы взялись за самостоятельный анализ cdr и log-файлов.

Мы использовали R в качестве инструмента анализа.

По самой своей природе данных не так уж и много.

Несколько тысяч обращений в CHNN дают 1-2 ГБ упакованных записей за год работы.

Для современных ноутбуков это полная ерунда, не говоря уже о серверном оборудовании.

И тут начались интересные вещи.

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

  • Почему макросы не предоставляют информацию, необходимую для определенных типов разговоров?
  • Почему иногда теряются идентификаторы, позволяющие связать трехсторонние сессии, в которых посредником является оператор?
  • Почему временные метрики в cdr не всегда соответствуют событиям в реальном времени? Время в IVR не всегда нужно считать полностью (зависит от логики), да и IVR бывают разные.

  • Почему очереди не содержат ряд обязательных параметров?
Но это только техническая сторона вопроса.

После тщательного изучения данных было решено отказаться от использования cdr (там данные были записаны слишком неполными и недостоверными, а радикального улучшения логики генерации cdr в продакшне никто не надеялся.

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

  1. реконструировать все события в потоке вызовов, используя идентификаторы основного сеанса и связанных сеансов;
  2. Прореживаем события, исходя из бизнес-логики расчета kpi (множественный ЗВОНОК НЕТ ОТВЕТА; множественный ВХОД в ОЧЕРЕДЬ в ту же очередь или в другую; ПЕРЕВОД ОТВЕТСТВЕННОГО\СЛЕПОГО ПЕРЕДАЧИ на внешние номера и т.д.);
  3. На основе сформированных очищенных потоков звонков мы пересчитываем реальную длительность всех событий на основе их временных меток;
  4. обогащаем обзвон данными из внешних источников, в частности, из графика дежурств операторов, чтобы по номеру оператора получить ФИО;
  5. Мы получаем «чистый» набор «сырых» данных, из которых уже строим всю необходимую отчетность.



R, Звездочка и платяной шкаф

В общем, далее следует автоматическая генерация стандартного набора бизнес-артефактов: дашбордов, отчетов, загрузок (xls, pdf, csv, doc, ppt,.

) Само рабочее место руководителя колл-центра построено на Shiny.

R, Звездочка и платяной шкаф

Важно, чтобы после такой «чистки» данных можно было сесть за стол с бизнесом и обсудить метрики (KPI) и методику их расчета.

Следует ли засчитывать время пребывания абонента во внутреннем IVR как продолжительность разговора или нет? Следует ли рассматривать CONNECT как последующий немедленный возврат в очередь в качестве ответа оператора или нет? Как разложить присутствие абонента в нескольких очередях на основе KPI операторов и очередей? Как соотнести среднее время ожидания в очереди со временем суток и количеством операторов в смене? Каковы типичные сценарии «оптимизации» для операторов? И много других вопросов.

Самое приятное то, что на все вопросы можно дать четкий и однозначный ответ. Дополнительным преимуществом перехода на анализ событий потока вызовов является возможность изучения сценариев работы колл-центра (process Mining).

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

Обнаруживаются любопытные вещи!

R, Звездочка и платяной шкаф

Шаг 3 Переход к анализу событий ОИМ.

В целом это самый универсальный метод, но требует немного большей вычислительной мощности.

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

Также работа с AMI обеспечивает независимость от приватных настроек отдельного астериска, что будет актуально при подключении последующих.

Чтобы обеспечить скорость работы с AMI, мы «сбрасываем» в ClickHouse все 151 тип событий с 619 возможными полями.

Послесловие Как многие могут заметить, задача очень специфическая, объемы данных небольшие.

Но это не умаляет важности данной задачи для бизнеса.

Использование R позволило быстро и элегантно решить ее, создав при этом удобные рабочие места для обычных бизнес-пользователей.

И с точки зрения промышленного программирования тоже все ок: упаковка, документирование функций с помощью roxygen, автотесты, логирование, все, что можно покрыть онлайн-проверками и утверждениями.

Теперь, имея прочный фундамент, можно смело переходить к прогнозированию и оперативной аналитике.

Ответ на вопрос «при чем тут гардеробЭ», увы, весьма прозаичен.

Потому что из него вывалились скелеты, которые тщательно прятали операторы колл-центра.

И R+Shiny послужил ключом к его открытию.

Предыдущий пост: Вы уже используете R в бизнесе? Теги: #наука о данных #Интеллектуальный анализ данных #asterisk #Большие данные #r

Вместе с данным постом часто просматривают: