В предыдущих хабрапостах мы поделились open source инструментом для сравнительного анализа метагеномных данных и рассказали об открытых проектах, которыми занимается наша лаборатория мультиагентных систем.
На этот раз представляем вашему вниманию Process Flow Optimization Tool от Национального центра когнитивных разработок Университета ИТМО.
Зачем он нужен
Инструмент позволяет извлечь из лог-данных оптимальную модель процесса — визуализировать его в понятном виде [с отображением главных сценариев исполнения] и — с помощью нахождения мета-состояний — интерпретировать и упростить модель процесса. Целевой аудиторией фреймворка являются не только организации, заинтересованные в аналитике бизнес-процессов as is и улучшении существующих решений в этой нише, но и ученые, работающие в области Process Mining и в целом занимающиеся исследованиями в сфере data science.
Интеллектуальный анализ в целом — перспективный подход к работе с внутриорганизационными рабочими процессами, в частности там, где они нетривиальны, слабо структурированы и вариативны в силу особенностей рода деятельности. Например, присутствия человеческого фактора и отсутствия автоматизации. Допустим как зачастую и обстоят дела в здравоохранении, поэтому здесь есть место для интеллектуального анализа процессов.
Так, Process Flow Optimization Tool уже применили в проектах группы «Цифровое здравоохранение», использовали для формирования признакового пространства для кластеризации пациентов с артериальной гипертензией (АГ) и предсказания их состояния, предложив новые признаки для предсказательной модели, а результаты опубликовали в журнале Computational Science — ICCS 2021. Однако Process Flow Optimization Tool или ProFIT, как его называют разработчики, показал свою валидность не только в сфере здравоохранения, поэтому может быть распространен на все области, где в том или ином виде присутствуют бизнес-процессы.
Как устроен этот инструмент
Модели процесса в ProFIT представляют собой графы прямых зависимостей (directly-follows graphs), где вершины — события (events) или действия (activities), связанные ориентированными дугами. Зелёная вершина обозначает начало процесса и показывает общее число случаев (cases) реализации процесса. Например, один случай — кейс конкретного пациента или работа врача, если посмотреть с другой перспективы. Терминальное состояние процесса, куда идут рёбра от завершающих событий, представлено красной вершиной. Также внутренние вершины и рёбра показывают абсолютные частоты появления событий и переходов между ними в логе. Чем больше абсолютное значение, тем темнее или жирнее выделен элемент.
Process Flow Optimization Tool включает в себя идеи алгоритма Fuzzy Miner. Он подходит для неструктурированных процессов и позволяет строить модели на разных уровнях детализации. Граф прямых зависимостей — как выходные данные — допускает присутствие циклов. Они имеют ключевую роль в концепции мета-состояний, о чем мы расскажем далее. Другие особенности решения:
Построение процесса за счет обхода в глубину. Суть в том, что майнеры нечётких моделей процесса (fuzzy net) обладают определенным недостатком. С их помощью можно получить «висячие» вершины, тупиковые переходы (deadlocks) и даже несвязанный граф. Поэтому мы добавили в алгоритм двойную проверку: (1) все вершины должны быть потомками начальной (зелёной); (2) все вершины должны быть предками терминальной (красной). Так из начала процесса мы дойдем к любому событию, и из любой внутренней вершины — попадем в конец процесса. Если модель не удовлетворяет этим условиям, добавляем в неё переходы, пока не получим исполнимый процесс.
Автоматизация настройки модели процесса. Здесь мы предлагаем доверить алгоритму найти оптимальное решение задачи математической оптимизации, где точность и сложность модели представлены в виде комбинированной целевой функции. Если говорить простыми словами, программа позволяет найти те параметры модели (число вершин и рёбер), которые выводят понятную и точную визуализацию процесса, вместо их ручного подбора.
Поиск мета-состояний в процессе и агрегация элементов. Эта идея появилась во время работы над проектом из области здравоохранения, где пациенты были вовлечены в процесс. Рутинный комплекс процедур, который они повторяли несколько раз во время лечения, представляет собой мета-состояние (здоровья, этапа лечения и так далее). Поэтому мы ищем наиболее часто встречающиеся циклы в модели процесса и агрегируем их в одно событие. Таким образом — можем интерпретировать и упростить модель.
От теории к практике
Мы проверили функциональность ProFIT на двух логах:
Для дистанционного мониторинга пациентов с АГ — на данных от компании PMT Online. Они содержат события-триггеры на измерения давления пациентов, страдающими артериальной гипертензией. Здесь присутствуют несколько клинических и неклинических типов событий: красная зона (превышение критических уровней), жёлтая зона (превышение целевых уровней), уведомления об отсутствии измерения и так далее.
Для процесса возмещения командировочных расходов — данных в рамках BPI Challenge 2020. Они содержат данные по информационному процессу в Технологическом университете Эйндховена за 2017-2018 года.
Сейчас мы работаем с информационной системой центра Алмазова в Санкт-Петербурге. Это — один из крупнейших кардиологических и научных мед. центров в России. Мы используем данные из системы контроля управления, плюс — медицинской информационной системы, чтобы собрать журнал событий по перемещениям и действиям медицинского персонала. Процесс состоит из тысяч разнообразных активностей — например, проведения лабораторных анализов, процедур, перемещений по отделениям и так далее. Такая информация требует подготовки, и пока мы не используем ее в кейсах и демо-примерах.
Общее демо с описанием на русском языке можно посмотреть тут. Чтобы начать использовать ProFIT, достаточно объявить и присвоить переменной экземпляр класса ProcessMap, а затем передать путь к логу в формате CSV/TXT/XES (либо сами данные в виде pandas.DataFrame) через метод set_log. Выглядит это следующим образом:
declarations = "../ProFIT/demo/log_examples/DomesticDeclarations.xes"
pm = ProcessMap()
pm.set_log(FILE_PATH = declarations)
pm.update() # after series of settings
Что дальше
Разработчики фреймворка открыты для обратной связи. В перспективе они рассматривают и другие нотации моделирования, плюс — подготовку веб-интерфейса для этого инструмента. Они считают, что для его полноценной работы необходимо реализовать функционал во всех подклассах Process Mining: а это process discovery (извлечение модели из данных), conformance checking (проверка модели на соответствие логу) и enhancement (оптимизация и улучшение процесса).
Пока проект охватывает первый и частично второй блок. Для третьего — можно найти применение системам ИИ и МО по нахождению и предсказанию узких мест (bottle-necks), количества необходимых ресурсов и так далее. Помимо этого — посмотреть на задачи предсказания следующего события (Predictive process monitoring) и улучшения лог-данных, полученных из не process-aware информационных систем (например, мед. карт пациентов), посредством NLP, онтологий.
Что еще есть у нас в блоге на Хабре: