Process Mining c bupaR

от автора

В настоящее время тема Process Mining продолжает набирать популярность, и все больше применяется при поиске новых путей повышения эффективности бизнес-процессов, в оперативном анализе пилотных проектов и конечно же в задачах аудита. При выборе инструмента для разработки в рамках данной задачи важнейшими критериями становятся доступность, производительность, наличие сообщества.

В этой статье мы рассмотрим bupaR open-source пакет для анализа бизнес-процессов на языке R. В качестве IDE использовалась RStudio.

Допустим, у нас уже есть файл (csv) журнала (лога) событий активностей пользователей в интернет-магазине. Воспользуемся пакетом readr для загрузки лога событий из данного файла и методом  activities_to_eventlog из bupaR для преобразования:

library(readr) library(bupaR)  df <- readr::read_csv('./gift4iaia_log_file.csv',locale=locale(encoding = 'cp1251')) events <- bupaR::activities_to_eventlog(   df,   case_id = 'UserID',   activity_id = 'Activity',   resource_id = 'User_name',   timestamps = c('StartTime', 'CompleteTime') )

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

mapping(events) Case identifier:                UserID  Activity identifier:            Activity  Resource identifier:            User_name  Activity instance identifier:   activity_instance_id  Timestamp:                      timestamp  Lifecycle transition:           lifecycle_id 

Выведем количество действий из лога событий.

n_activities(events) [1] 4

Посмотрим сводные данные (метод summary):

events %>%       summary Number of events:  26 Number of cases:  4 Number of traces:  3 Number of distinct activities:  4 Average trace length:  6.5  Start eventlog: 2021-12-01 19:52:01 End eventlog:  2021-12-03 20:48:51  UserID                              Activity                                     User_name Length:26                         Авторизация             :8            Виннипух:8   Class :character                Оплата товара           :4            Кролик  :4   Mode  :character              Оформление заказа       :6       Пятачок :6                                            Поиск товаров в каталоге:8    Сова    :8                                                                                                                   activity_instance_id       lifecycle_id                 timestamp                                     .order      Length:26                       CompleteTime:13       Min.   :2021-12-01 19:52:01        Min.   : 1.00   Class :character              StartTime   :13            1st Qu.:2021-12-01 20:34:53       1st Qu.: 7.25   Mode  :character                                                 Median :2021-12-01 21:16:51     Median :13.50                                                                                 Mean   :2021-12-02 09:53:00      Mean   :13.50                                                                              3rd Qu.:2021-12-02 21:51:53      3rd Qu.:19.75                                                                                 Max.   :2021-12-03 20:48:51       Max.   :26.00 

Построим диаграмму частот действий на основе лога событий. Для этого воспользуемся функцией activity_frequency с параметром «activity», которая формирует свод по каждой активности (количество/частота) и на основе данного свода генерируем саму диаграмму (метод plot()).

library(ggplot2) events %>%    activity_frequency(level = "activity") %>%   plot() 

Теперь построим карту процесса. Для этого нам понадобится метод process_map. В данном примере в качестве значения type используется функция frequency с параметром «relative_case» для отображения частоты в процентах (по умолчанию без задания параметров для process_map будут отображаться абсолютные величины)

events %>%   process_map(type = frequency("relative_case")) 

По полученному графу видим, что 75%  поиска товаров в каталоге завершилось оформлением заказа и 50% — оплатой товара.

           Построим карту процесса в плане производительности. Здесь используем в process_map функцию performance, определяемую двумя аргументами — это статистическая функция, применимая ко времени обработки (среднее — mean, медиана — median и т.д.), а так же единица времени (дни — «days», часы —«hours» , минуты —«mins» и т.д.).

events %>%   process_map(performance(mean, "mins"))

В данном случае мы можем оценить этапы процесса по длительности. Например, этап поиска товаров занимает в среднем 22.82 минуты, а оформление 18.48 минут.

          Теперь воспользуемся функцией фильтра filter_trim, которая обрезает для анализа лог событий, таким образом, что последовательность действий начинается с активности (активностей) start_activities и заканчивается активностью (активностями) end_activities. Построим карту процесса для последовательностей действий начинающихся с поиска товаров в каталоге и завершающихся оплатой товара.

events %>%   filter_trim(start_activities = "Поиск товаров в каталоге", end_activities="Оплата товара")%>%   process_map(performance(mean, "mins")) 

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

          Так же в построении карты процесса существует возможность комбинировать вышеперечисленные подходы. Для этого в функции process_map необходимо задать параметры типов узлов и ребер графа процесса (type_nodes, type_edges).

events %>%   process_map(type_nodes=performance(mean, "mins"), type_edges = frequency("relative_case"))

BupaR даёт возможность рассмотреть бизнес-процесс под самыми разными углами. В сочетании с простотой освоения, кастомизацией (в частности, в построении карты процесса), широким набором полезных функций, и, конечно, огромными возможностями языка R, ориентированного на анализ данных и работу со статистикой, использование данного пакета видится отличным решением в проекте по анализу бизнес-процессов.


ссылка на оригинал статьи https://habr.com/ru/post/661651/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *