Майнинг бизнес-процессов с помощью ИИ, Neo4j и Plotly

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

Контекст:

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

Осенью 2023 года в компании произошли организационные изменения в одном из ключевых отделов. Его руководитель покинул компанию и команда решила воспользоваться этим, чтобы устранить узкие места в процессе. Кроме того до этого была определенная непрозрачность и непоследовательность в этой функции, которую требовалось устранить. Генеральный директор предложил извлечь данные из информационных систем и проанализировать их, чтобы понять как была выстроена истинная система управления и взаимодействия между людьми (которая отличалась от официально принятого бизнес процесса).

Решение:

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

Извлечение и связывание данных

В каком-то смысле нам повезло и вот почему: а) В компании используют сквозные методологии управления проектами и гибкие канбан инструменты. Так, до 2022 года Фикус использовал Trello, потом компания переехала в Кайтен. б) Кайтен предоставляет API и довольно легко выдергивать информацию. Если система управления выстроена (а в компании она выстроена) , у нас может быть много полезных данных.

Сначала нам нужно было выдернуть два JSON файла:

  1. JSON по всем проектам за 2023 год;
  2. JSON со всеми комментариями за этот период.

Небольшой питон скрипт для извлечения данных:

def get_kaiten_cards(token, **params): url = 'URL' headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': f'Bearer {token}' } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: return response.json() else: response.raise_for_status() def get_all_kaiten_cards_for_period(token, start_date, end_date): offset = 0 limit = 100 all_cards = [] while True: response_cards = get_kaiten_cards(token, limit=limit, offset=offset, created_after=start_date, created_before=end_date) if not response_cards: break all_cards.extend(response_cards) if len(response_cards) < limit: break offset += limit return all_cards def save_to_json(data, filename): with open(filename, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=4) def load_from_json(filename): with open(filename, 'r', encoding='utf-8') as f: return json.load(f) def get_card_comments(token, card_id): url = f'.../api/latest/cards/{card_id}/comments' headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': f'Bearer {token}' } response = requests.get(url, headers=headers) try: response.raise_for_status() return response.json() except requests.exceptions.HTTPError as e: print(f"Ошибка при получении комментариев для карточки {card_id}: {e}") return [] if __name__ == "__main__": token = 'TOKEN' start_date = "2023-01-01T00:00:00Z" end_date = datetime.now().isoformat() + "Z" cards_filename = "kaiten_cards.json" comments_filename = "kaiten_comments.json" all_comments = [] if os.path.exists(cards_filename): cards = load_from_json(cards_filename) for card in cards: card_id = card.get("id") if card_id: comments = get_card_comments(token, card_id) all_comments.extend(comments) save_to_json(all_comments, comments_filename) else: print(f"Файл {cards_filename} не найден.")

Далее мы связали все комментарии, которые были оставлены в ИС, с проектами и сотрудниками, которые их оставляли.

Визуализация данных

Уже на этом этапе, когда мы еще не приступили к анализу сообщений, стало любопытно визуализировать связанные данные с помощью Neo4J. Получился такой граф:

Майнинг бизнес-процессов с помощью ИИ, Neo4j и Plotly

За 2023 год было оставлено порядка 18 000 комментариев – определенно есть с чем работать и очень интересно разглядывать. Но полезной информации здесь пока нет.

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

Майнинг бизнес-процессов с помощью ИИ, Neo4j и Plotly

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

Здесь мы взяли авторов сообщений и упоминания сотрудников в комментариях и связали их в новый граф. Чем больше упоминаний, тем больше диаметр вершина графа. Помимо этого применили формулу центральности по степени. Характеристика «центральность» позволяет определить степень важности вершины графа (сотрудник) , основываясь на ее расположении. Получилась такая визуализация:

Майнинг бизнес-процессов с помощью ИИ, Neo4j и Plotly

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

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

Майнинг бизнес-процессов с помощью LLM

Теперь перейдем к следующей задаче. Нам нужно выяснить на основе сообщений, какие бизнес-процессы присутствуют в компании, не так как мы их описали, а как они есть. Так же будет здорово выяснить ожидания коллег при обращении, решаемые проблемы и компоненты процессов. Для этого мы использовали модель генеративного ИИ (семейство gpt), через неё прогнали все сообщения и получилась такая табличка:

Майнинг бизнес-процессов с помощью ИИ, Neo4j и Plotly

Связка бизнес-процессов и коммуникационного графа

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

Получилась примерно такая такая визуализация:

Граф бизнес-процессов с привязкой к сотрудникам.
Граф бизнес-процессов с привязкой к сотрудникам.
Граф решаемых проблем с привязкой к сотрудникам.
Граф решаемых проблем с привязкой к сотрудникам.
Ожидания от выполненной работы с привязкой к сотрудникам.
Ожидания от выполненной работы с привязкой к сотрудникам.

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

Заключение

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

22
1 комментарий

Работа с данными, особенно в больших объемах, всегда представляет свои трудности, но кажется, ваш подход вроде выглядит эффективным

1