Время прочтения: 6 мин.

Любой бизнес-процесс представляет собой последовательность действий, направленных на получение результата, который может заключатся в изготовлении продукта, оказания услуги или получения какого-нибудь разрешения внутри организации. Для обеспечения максимальной эффективности бизнес-процесса необходимо обеспечить условия, при которых каждый этап процесса будет следовать за другим в правильной последовательности, а также ни на одном из этапов не будет происходить ситуаций, в которых несколько различных процессов одновременно оказались на одном и том же этапе. Циклом в процессе будем называть последовательность событий типа А->B->A. Петлей в процессе будем называть последовательность событий типа A->B->C->…->A. Схематичные примеры цикла и петли в процессе приведены на рисунках 1-2. Наличие циклов или петель в процессах может происходить не только из-за неправильной последовательности этапов в процессе, но из-за некачественной работы определенных сотрудников или департаментов на некоторых этапах. Для того, чтобы оптимизировать бизнес-процесс и, как следствие, добиться большей прибыли за счет увеличения объемов или же сокращения расходов необходимо выявлять такие дефекты внутри процесса. Анализ бизнес-процесса вручную является довольно сложной и трудоемкой работой, которая, кроме того, не лишена проблемы человеческого фактора.

Пример цикла в процессе:

Пример петли в процессе:

В силу этих причин на сегодняшний день существует ряд инструментов, позволяющих автоматически проводить анализ бизнес-процессов. Однако у этих инструментов есть ограничения: бизнес-процесс должен находиться в файле специального формата и специальной структуры с расширением «.xes» или «.csv». Инструменты, существующие на сегодняшний день, позволяют формировать граф процесса на основе входных файлов, а также имеют различные параметры для фильтрации логов и предоставляют базовый статистический анализ событий, представленных в логе. Однако данные инструменты не предоставляют возможность автоматической аналитики предоставленного лога – все выводы, которую можно сделать на основе записей бизнес-процесса. Это необходимо делать на основе самостоятельной аналитической работы.

Чтобы определить, существует ли какой-то функционал, позволяющий определить наличие циклов и петель в процессе необходимо проанализировать существующие инструменты для анализа бизнес-процессов, а именно их технических логов. Для анализа функционала было решено выбрать 5 наиболее популярных на сегодняшний день инструментов для анализа логов бизнес-процессов, а именно: Disco, ProM, Celonis, Minit и PowerBI. Все перечисленные инструменты находятся в открытом доступе и свободны для установки и использования. Главными параметрами для анализа перечисленных систем были наличие средств для поиска циклов и/или петель в процессах, а также ограничения, накладываемые на формат входных файлов.

ИнструментФормат входных файловСредства для поиска циклов
ProMMXML, XES
DiscoCSV, TXT, XLS(X), MXML, XESКомбинация сложных фильтров
CelonisCSV, XLSX, XES
MinitCSV, XES, MXML, XLS(X)(M)(B)
PowerBIЛюбой файл Excel, SQL Server/ Azure или текстовые файлыКомбинация сложных фильтров
Таблица 1 – ключевые характеристики существующих систем для анализа бизнес-процессов

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

Исходя из полученных результатов анализа существующих систем для исследования бизнес-процессов, было решено создать автоматизированную систему для выделения петель и циклов в процессе. Реализация данной системы представляет собой программный код на языке программирования python версии 3.9.1. Система представляет собой модуль, состоящий из двух классов, а также методов для поиска циклов и петель, и использующий библиотеки выбранного языка программирования. В модуле используются библиотеки: pm4py для анализа бизнес-процесса, а также для поддержки импорта файлов стандартных форматов, выявленных ранее; pandas для работы с табличными данными; NumPy для быстрой работы с массивами данных; graphviz для визуализации полученных по итогу анализа результатов. Система позволяет, подав на вход файл заданного формата с логом бизнес-процесса получить взвешенный орграф процесса.

Код методов для поиска циклов и петель представлен в листинге.

import numpy as np
def get_ping_pong(dataframe, thresh=30):
    ping_pong_edges = set(())
    ping_dict = {}
    df = dataframe
    index = list(dataframe.columns).index('concept:name')
    for i in range(df.shape[0] - 2):
        if df.iloc[i, index] == df.iloc[i + 2, index]:
            key = df.iloc[i, index] + df.iloc[i + 1, index]
            key_two = df.iloc[i + 1, index] + df.iloc[i, index]
            if key in ping_dict.keys():
                ping_dict[key][0] += 1
            elif key_two in ping_dict.keys():
                ping_dict[key_two][0] += 1
            else:
                ping_dict[key] = [1, (df.iloc[i, index], df.iloc[i + 1, index]), (df.iloc[i + 1, index], df.iloc[i, index])]
    for key in ping_dict.keys():
        if ping_dict[key][0] > thresh:
            ping_pong_edges.add(ping_dict[key][1])
            ping_pong_edges.add(ping_dict[key][2])
    return list(ping_pong_edges)


def find_cycles(dataframe, thresh=30):
    temp_cycle = {}
    cycle_edges = []
    cases = np.unique(dataframe[:]['case:concept:name'].tolist())
    index = list(dataframe.columns).index('concept:name')
    for i in range(len(cases)):
        df = dataframe[dataframe[:]['case:concept:name'] == cases[i]]
        j = 0
        while j < df.shape[0]:
            searching_name = df.iloc[j, index]
            temp_edges = []
            for k in range(0, df.shape[0] - 1 - j):
                temp_edges.append((df.iloc[j + k, index], df.iloc[j + k + 1, index]))
                if df.iloc[j + k + 1, index] == searching_name and k > 2:
                    if (df.iloc[j, index] + df.iloc[j + k, index]) not in temp_cycle.keys():
                        temp_cycle[df.iloc[j, index] + df.iloc[j + k, index]] = [1, temp_edges]
                    else:
                        temp_cycle[df.iloc[j, index] + df.iloc[j + k, index]][0] += 1
                    break
            j += 1
        for key in temp_cycle.keys():
            cycle_edges.append(temp_cycle[key][1])
    return list(cycle_edges)

Для тестирования системы были взяты реальные данные бизнес-процесса, предоставленные в рамках ежегодного соревнования по process mining BPIC 2017. Данные описывают процесс получения кредита одного из датских банков. Эти данные особенно хорошо показывают проблему зацикленности некоторых этапов бизнес-процесса. Чтобы иметь возможность визуально проанализировать те слабые места в процессе, которые были обнаружены при автоматизированном анализе, необходимо получить графическое представление орграфа. С этой целью было решено использовать представление процесса с помощью Directly-Follows Graph, который обладает возможностью показывать на своих ребрах либо частоту, с которой задействованы эти ребра во всех экземплярах процессов, либо длительность перехода по этим ребрам между этапами процесса. На следующих рисунках представлены примеры работы системы.

Рисунок 3 — пример работы автоматизированной системы по поиску циклов и петлей в процессах
Рисунок 4 — пример работы автоматизированной системы по поиску циклов и петлей в процессах

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

Еще больше информации о Process Mining можно найти и обсудить в канале #process_mining сообщества DS.AI в slack