Просто стало интересно - что такое описательный анализ. Математический анализ, функциональный анализ знаю. А описательный?
Наверно такое определение подойдет: Описательный анализ - это последовательность шагов, которая превращает сырые данные в понимание процесса. Маркетологи наверно будут говорить, что это не анализ, а аналитика, ну это их проблемы.
Как теоретическую основу я использовал идеи из следующих источников:
Process Mining - Ван дер Аалст, «Process Mining: Data Science in Action (2016). Методология извлечения знаний о процессе из логов событий.
EDA (Exploratory Data Analysis) - Тьюки, 1977. Принцип: сначала смотреть на данные, потом строить модели.
Lean Six Sigma - DMAIC (Define, Measure, Analyze, Improve, Control). Стандартная методология улучшения процессов.
Я не применяю всех методов, описываемых в Process Mining: Data Science in Action. Для данного анализа достаточно понимать, что наука о данных - это, в частности, превращение данных в реальную ценность.
В этой статье ценность - понимание процесса. Мы не строим прогнозы, не используем машинное обучение. Мы делаем описательный анализ: превращаем сырые логи в картину того, как процесс работает на самом деле.
В статье неявно используется дискретная математика, теория графов, а математическая статистика не потребовалась. Еще: для меня реальные значения более информативны, чем картинки, но для любителей несколько диаграмм я все ж добавил. В тексте много цифр, я старался показать весь процесс, но для понимания результатов можно смотреть только выводы в конце каждого шага
В качестве данных для анализа я решил взять службу управления инцидентами. В российских компаниях такие данные в открытом доступе найти невозможно, поэтому посмотрел, что есть у западных компаний. Нашел Volvo IT BPI Challenge 2013, incidents вот отсюда: https://data.4tu.nl/datasets/0fc5c579-e544-4fab-9143-fab1f5192432/1
Порядок действий, составленный на основе Process Mining:
1. Event log - журнал событий, сырые данные.
2. Descriptive statistics - смотрим, что в этих данных есть: длительность событий, какие события происходят чаще, аномалии, распределение по продуктам, кто что делает и т.п.
3. Process discovery - строит модель. Отвечает на вопрос: как процесс выглядит в типичном случае?
4. Conformance checking - проверяет насколько логи соответствуют построенной модели.
5. Performance analysis - анализ производительности.
6. Enhancement - улучшение процесса на основе полученных знаний.
На основании предмета анализа сформировались приблизительные шаги:
1. Описание процесса
Фиксируем, что есть. Какие события происходят, кто их совершает, в каком порядке. Не как должно быть по регламенту, а как есть на самом деле.
2. Моделирование процесса
Переводим описание в формальный граф, где видно все пути. Из сырых данных строим карту: откуда заявка приходит, куда идёт, где разветвляется. На этом шаге становятся видны все реальные маршруты, а не только типовой.
3. Анализ процесса
Считаем метрики: сколько времени идёт процесс, где задержки, сколько возвратов, какие шаги дублируются. Сравниваем как должно быть и как есть. Ищем узкие места.
4. Оптимизация процесса
Улучшаем то, что есть. Убираем лишние шаги, автоматизируем рутину, сокращаем согласования. Процесс не ломаем - подтягиваем.
5. Реинжиниринг процесса
Меняем логику. Задаём вопрос: а почему этот процесс вообще так устроен? Если процесс неэффективен по своей сути - оптимизация не поможет. Нужно менять процесс.
6. Цикл замыкается: после реинжиниринга снова описываем процесс - уже новый.
В соответствии с предметом анализа определим следующие понятия:
Заявка - первичное обращение с проблемой, а также:
Заявка или Процесс - последовательность событий, возникающих по одной заявке.
Событие - одно действие в логе. Запись о том, что что-то произошло: заявку приняли, перевели в работу, отправили в ожидание, закрыли. У события есть время, автор, тип.
Метрики, которые будем смотреть:
Case duration (время одного процесса)
Activity frequency (частота событий каждого типа)
Variants (количество вариантов процесса, также смотрим на правило Парето (80/20) - оценка, насколько процесс сходится к типовым сценариям).
Waiting time( процесс не двигается)
Rework / ping-pong (неоднократный возврат заявки в очередь)
Anomalies( процессы с очень длинным временем)
Распределение по продуктам(число заявок по продуктам)
Сами расчеты я разбил на три шага:
ШАГ 1. ОПИСАНИЕ ПРОЦЕССА (step1.py)
Смотрим, что есть в логах - сколько заявок, сколько событий, за какой период, какие типы событий, продукты.
Получили:
Метрика | Значение | Комментарий |
Заявок | 7 554 | |
Событий | 65 533 | ~8.68 событий на заявку |
Период | март 2010 - > май 2012 | 2 года данных |
Тип события | 4 | Accepted, Completed, Queued, Unmatched |
Состояние | 13 | Assigned, In Progress, Wait - User, Wait - Vendor, ... |
Продуктов | 704 | PROD1 … OTHERS |
Ресурсов | 1 440 | Число исполнителей |
Событий на заявку | медиана 6, максимум 123 | Разброс 20x |
Что здесь видно:
1. Процесс - плоский по событиям, но глубокий по состояниям.
У нас всего 4 события, но 13 состояний. Это значит, что реальный процесс это комбинация concept: name (тип события) + lifecycle: transition (состояние в котором оказывается заявка). Например:
- Accepted + Assigned - заявка принята и назначена.
- Queued + Awaiting Assignment - в очереди, ждёт назначения.
- Accepted + Wait - Customer - ждём ответа клиента.
- Accepted + Wait - Vendor - ждём вендора.
Именно состояния будем моделировать на Шаге 2, иначе модель будет бессмысленной - из 4 событий ничего не построишь.
2. 704 продукта при 7 554 заявках.
В среднем ~10 заявок на продукт. Это очень мелкое дробление. Значит: либо продуктов реально много и они все редкие, либо классификация перегружена лишними категориями продуктов - OTHERS...
3. Медиана по числу событий - 6 событий, максимум 123.
Половина заявок обрабатывается за 6 событий или меньше - это нормальное количество действий. Но есть процессы - аномалии с 123 событиями - в 20 раз больше медианы. Скорее всего, это сложные инциденты с многократными эскалациями, пинг-понг между исполнителями, заявки, которые долго висели в Wait - User или Wait - Vendor.
На основании этих данных процесс выглядит так:
Заявка поступает - > Accepted + Assigned
Если не могут сразу - > Queued + Awaiting Assignment (в очередь)
Назначена исполнителю - > Accepted + In Progress
Может уйти в ожидание: Wait - User / Wait - Vendor / Wait - Customer / Wait - Implementation
Решена - > Completed + Resolved
Закрыта - > Completed + Closed
Либо Unmatched - если не смогли сопоставить с известной проблемой.
Выводы по Шагу 1:
Ожидания (Wait - *) - это время, когда заявка висит, и никто с ней ничего не делает;
Очередь (Queued + Awaiting Assignment) - это тоже ожидание;
Дробление (1 440 ресурсов, 704 продукта) - возможна потеря ответственности;
Аномалии (123 события) - где-то процесс ломается и заявка зависает.
ШАГ 2. МОДЕЛИРОВАНИЕ (step2.py)
Строим карту реального потока заявок. Для этого выявляем комбинацию типа событии и состояний. Затем считаем, сколько таких комбинаций, как часто они встречаются, сколько уникальных последовательностей событий в заявках и сколько вариантов нужно, чтобы покрыть 80% и 95% заявок.
Всего заявок: 7 554
Уникальных вариантов процесса: 2 278
Из 4 типов событий и 13 состояний получилось 13 реальных комбинаций.
Частота | События | Доля от 65 533(общее число событий) |
30 239 | Accepted + In Progress | 46.1% |
11 544 | Queued + Awaiting Assignment | 17.6% |
6 115 | Completed + Resolved | 9.3% |
5 716 | Completed + Closed | 8.7% |
4 217 | Accepted + Wait - User | 6.4% |
3 221 | Accepted + Assigned | 4.9% |
2 035 | Completed + In Call | 3.1% |
1 533 | Accepted + Wait | 2.3% |
493 | Accepted + Wait - Implementation | 0.8% |
313 | Accepted + Wait - Vendor | 0.5% |
101 | Accepted + Wait - Customer | 0.15% |
5 | Unmatched + Unmatched | 0.01% |
1 | Completed + Cancelled | 0.002% |
Что это значит:
Accepted + In Progress - это почти половина всех событий. Заявка «в работе - доминирующее состояние.
Queued + Awaiting Assignment - 17.6%. Это ожидание. Заявка просто лежит в очереди и ждёт, пока её кто-то возьмёт.
Wait - * (все виды) - 4 217 + 1 533 + 493 + 313 + 101 = 6 657 событий, или 10.2%. Это чистое ожидание - заявка ждёт пользователя, вендора, реализации и т.д.
Итого ожидания: Queued + Wait - * = 18 201 событий = 27.8% всех событий.
Вариативность: 2 278 уникальных вариантов процесса
Уникальных вариантов процесса | 2 278 |
Топ-1 вариант покрывает | 23.2% (1 749 заявок) |
Топ-10 вариантов покрывают | 48.1% |
Вариантов для 80% заявок | 768 |
Вариантов для 95% заявок | 1 901 |
Остальные 2 268 вариантов покрывают | 51.9% (3 918 заявок) |
Что это значит:
Процесс не стандартизирован. На 7 554 заявок - 2 278 вариантов процесса. Это спагетти-процесс: каждый случай уникален, предсказать нельзя.
Для 80% заявок нужно 768 разных вариантов процесса. Нельзя написать один регламент, который покроет большинство случаев.
Остальные 2 268 вариантов покрывают 51.9% заявок. Из них 1 901 вариант встречается 1–5 раз. Это уникальные случаи, которые почти не повторяются.

Рассмотрим 10 наиболее часто встречающихся вариантов процесса:
№ | % | Особенность |
1 | 23.2% | Без ожиданий, закрытие по звонку |
2 | 6.9% | Без ожиданий, закрытие через «Решена |
3 | 4.7% | Очередь после начала работы |
4 | 4.0% | Очередь до начала работы |
5 | 2.7% | Очередь + ожидание пользователя |
6 | 2.1% | Две очереди после начала работы, пинг-понг |
7 | 1.6% | Ожидание пользователя без очереди |
8 | 1.3% | Два процесса «очередь - > работа |
9 | 0.9% | Очередь + назначен исполнитель |
10 | 0.7% | Очередь + назначен исполнитель + ожидание пользователя |
Сначала простые процессы. Потом очереди. Потом ожидание пользователя. Потом комбинации. И чем дальше, тем меньше заявок.
Выводы по Шагу 2:
Проблема 1. Ожидание:
27.8% событий - это Queued и Wait - *. Заявка не обрабатывается, а просто ждёт. Это «мёртвое время процесса.
Проблема 2. Катастрофическая вариативность:
2 278 уникальных путей при 7 554 заявках. Каждая третья заявка идёт по уникальному пути. Это означает, что:
Процесс не предсказуем.
Нельзя обучить сотрудника «как правильно - правильных путей 768(в 80%).
Нельзя автоматизировать, нельзя измерить эффективность - нет стандартного сценария.
Проблема 3. «Пинг-понг между исполнителями:
Варианты 3, 5, 6, 8, 9 показывают: заявка возвращается в очередь после начала работы. Исполнитель взял заявку - > понял, что не может решить - > вернул в общую очередь. Другой взял - > та же история. И так до тех пор, пока кто-то не решит.
ШАГ 3. АНАЛИЗ (step3.py)
Считаем метрики процесса - время процесса, ожидания, возвраты в очередь, аномалии, распределение по продуктам. Чтобы понять, где процесс плохо работает.
Результаты:
Время процесса:
Метрика | Значение |
Медиана по времени процесса | 7.55 дней |
Среднее арифметическое | 12.08 дней |
75-й перцентиль | 12.41 дня |
95-й перцентиль | 35.69 дней |
Максимальная длительность процесса | 771.35 дней |
Ожидания:
Тип ожидания | События | Доля |
Queued + Awaiting Assignment | 11 544 | 17.62% |
Accepted + Wait - User | 4 217 | 6.43% |
Accepted + Wait | 1 533 | 2.34% |
Accepted + Wait - Implementation | 493 | 0.75% |
Accepted + Wait - Vendor | 313 | 0.48% |
Accepted + Wait - Customer | 101 | 0.15% |
Итого | 18 201 | 27.8% |
Метрика |
|
|
Заявок с хотя бы одним ожиданием | 5 096 | 67.5% |
Заявок без ожиданий | 2 458 | 32.5% |
Аномалии:
Порог | Заявок |
> 50 событий | 29 |
> 30 событий | 165 |
> 20 событий | 494 |
Заявка | События | Длительность |
1-687082195 | 123 | 82.3 дня |
1-660915327 | 116 | 92.9 дня |
1-627973205 | 90 | 139 дней |
1-692067345 | 76 | 74.2 дня |
1-722362086 | 75 | 20.8 дня |
Распределение по продуктам:
Топ-5 по числу заявок:
Продукт | Заявок |
PROD424 | 882 |
PROD660 | 484 |
PROD253 | 226 |
PROD383 | 205 |
PROD494 | 186 |
Топ-5 по средней длине цепочки событий:
Продукт | Средняя длина цепочки событий |
PROD788 | 62.00 |
PROD510 | 56.00 |
PROD303 | 49.00 |
PROD227 | 46.00 |
PROD396 | 44.00 |
Выводы по Шагу 3:
3.1. Время процесса - катастрофа
Метрика | Значение |
Медиана по времени процесса | 7.55 дней |
Среднее арифметическое | 12.08 дней |
75-й перцентиль | 12.41 дня |
95-й перцентиль | 35.69 дней |
Максимум | 771 день (2+ года!) |

Половина процессов длится больше недели.
5% - больше месяца.
Одна из заявок 771 день. Это брошенная заявка, которую кто-то «забыл закрыть. Она не попала в топ 5 по числу событий.
Среднее арифметическое время процесса (12 дней) больше медианы (7.5 дней) - значит, есть длинный хвост: несколько очень долгих заявок тянут среднее вверх.
3.2. Ожидания: 27.8% событий
Тип ожидания | События | Доля |
Queued + Awaiting Assignment | 11 544 | 17.62% |
Accepted + Wait - User | 4 217 | 6.43% |
Accepted + Wait | 1 533 | 2.34% |
Accepted + Wait - Implementation | 493 | 0.75% |
Accepted + Wait - Vendor | 313 | 0.48% |
Accepted + Wait - Customer | 101 | 0.15% |
Итого | 18 201 | 27.8% |
3.3 Пинг-понг

3.4. Аномалии
139 дней это самая длинная из топ-5. Это управленческий провал: заявка не решается и не закрывается.
3.5. Продукты
Доминирующий продукт PROD424. Надо разбираться - какой-то элемент постоянно ломается. PROD788, PROD510, PROD303 - сложные продукты, очень много событий.
ВЫЯВЛЕННЫЕ ПРОБЛЕМЫ
# | Проблема | Масштаб | Причина |
1 | Долгое время процесса | медиана 7.5 дней | Ожидания, пинг-понг |
2 | Пинг-понг | 52.5% заявок | Заявку берут те, кто не может решить |
3 | Ожидания | 27.8% событий, 67.5% заявок | Ждём пользователя, вендора, «реализации |
4 | Аномалии | 29 заявок >50 событий | Заброшенные заявки |
5 | Раздутая классификация | 704 продукта | Нет фокуса |
52.5% заявок возвращаются в очередь - > Каждый возврат = время на «взять-понять-вернуть
67.5% заявок имеют ожидания - > Ожидания = 27.8% событий = «мёртвое время
Медиана 7.5 дней, хвост 771 день
Разные исполнители, разные команды, разные пути обработки - > 2 278 уникальных вариантов процесса
Это все говорит о том, что процесс невозможно предсказать, обучить, автоматизировать.
ОПТИМИЗАЦИЯ
1. Снизить пинг-понг
Проблема: 52.5% заявок возвращаются в Queued + Awaiting Assignment - либо до начала работы, либо после.
Гипотеза: заявки берут исполнители, которые не могут их решить (не тот навык, не тот продукт, не та зона ответственности).
Решение:
Внедрить маршрутизацию по продукту: заявка сразу идёт к тому, кто знает этот продукт.
Ввести «правило одного касания: если взял заявку - либо реши, либо эскалируй с обоснованием, но не возвращай в общий пул.
Построить матрицу компетенций: кто какие продукты знает, и маршрутизировать по ней.
Ожидаемый эффект: снижение возвратов с 52.5% до 25-30%.
2. Сократить ожидание Wait - User
Проблема: 4 217 событий Wait - User (6.4% всех событий). Это заявки, которые ждут ответа от пользователя.
Решение:
Автоматические напоминания пользователю через 24/48 часов
Автозакрытие, если пользователь не отвечает 7 дней (с уведомлением)
Ожидаемый эффект: снижение Wait - User на 30-40%.
3. Разобраться с аномалиями
Проблема: 29 заявок с 50+ событиями.
Решение:
Ввести правило эскалации по времени: если заявка открыта > 30 дней - автоматически эскалируется руководителю. Это не изменит медиану, но уберёт аномалии.
Ввести отчёт по заявкам без событий > 14 дней.
Ожидаемый эффект: ликвидация аномалий, снижение максимума до ~ 60 дней.
4. Фокус на топ-продукты
Проблема: 704 продукта. Но PROD424 - 882 заявки, PROD660 - 484. Топ-5 продуктов покрывают ~26% заявок.
Решение: создать выделенные команды для топ-5 продуктов. Для остальных - команды по категориям продуктов, чтобы не создавать одну большую очередь.
Ожидаемый эффект: снижение времени процесса для топ-продуктов на 30–40%.
РЕИНЖИНИРИНГ
Текущая логика процесса:
Заявка попадает в общий пул (Queued + Awaiting Assignment)
Кто-то её берёт (Accepted + Assigned)
Начинает работу (Accepted + In Progress)
Если не может - возвращает в общий пул (пинг-понг)
Ждёт пользователя / вендора / «реализации (Wait - *)
В итоге кто-то решает и закрывает
Проблема логики:
Заявка не имеет владельца с самого начала. Она ничья, пока кто-то её не возьмёт. Исполнитель не обязан её решить. Он может вернуть. Нет ответственности за конечный результат.
Что может предложить реинжиниринг:
1. От общего пула к владельцу с момента поступления заявки
Вместо очереди - автоматическая маршрутизация по продукту и компетенции. Заявка сразу попадает к тому, кто знает продукт. Владелец - конкретный человек, а не очередь.
2. От многоуровневой поддержки к продуктовым командам
Сейчас заявка идёт по цепочке: первая линия - > вторая линия - > третья линия. Каждая передача - потеря времени и контекста.
Альтернатива: сквозные команды по продуктам. Один человек (или команда) владеет продуктом от начала до конца.
3. Автоматизация ожиданий
Wait - User - > чат-бот собирает информацию у пользователя до создания заявки
Wait - Vendor - > автоматический запрос в систему вендора
Wait - Implementation - > интеграция с системой изменений
4. Самообслуживание для типовых случаев
PROD424 - 882 заявки. Если это типовой продукт, многие проблемы могут решаться:
Через базу знаний (пользователь сам находит решение)
Через автоматическую диагностику (система сама определяет причину)
Через скрипты самовосстановления
Ожидаемый эффект реинжиниринга
Метрика | AS-IS | TO-BE (прогноз) |
Медиана времени процесса | 7.5 дней | 1–2 дня |
Пинг-понг | 52.5% | <10% |
Ожидания | 27.8% событий | <10% |
Уникальных вариантов | 2 278 | <100 |
Аномалии (50+ событий) | 29 | 0–2 |
Что можно сделать еще?
У нас есть полный набор данных:
Описание - 7 554 заявки, 4 типа событий, 13 состояний (Шаг 1)
Моделирование - 13 комбинаций, 2 278 вариантов (Шаг 2)
Анализ - медиана 7.5 дней, пинг-понг 52.5%, ожидания 27.8% (Шаг 3)
Оптимизация - 4 конкретных улучшения
Реинжиниринг - смена логики: от очереди к владельцу, от линий к продуктам
Дальше можно:
- Применить оптимизацию и реинжиниринг, через некоторое время проанализировать новые данные и посмотреть эффект.
- Продолжить анализ - разобрать аномалии (что в 123 событиях?), связь продукт - время.
- Построить новую модель TO-BE.
ЗАКЛЮЧЕНИЕ
Эта статья показывает, что описательный анализ работает и является эффективным инструментом, позволяющим анализировать работу сервисной службы. Он превращает сырые логи в понимание: как устроен процесс, где он ломается, что можно улучшить. Мы видим общую картину работы сервисной службы и можем предлагать решения по оптимизации.
P.S. Это, конечно, Вольво 2012 года, у них вероятно не было онлайн контроля клиентских устройств. Я думаю, что сейчас можно стремиться к тому, чтобы выявлять проблему раньше клиента, чтобы инженеры сразу начинали с ней работать, особенно если это внутренние проблемы системы. И когда позвонит клиент ему уже можно будет сказать что случилось и сколько потребуется времени на устранение неисправности. Именно это клиент и хочет услышать, а не "выясняем".
Ссылки на скрипты
step1.py - https://github.com/yar2-7/volvo-process-mining/blob/main/step1.py
step2.py - https://github.com/yar2-7/volvo-process-mining/blob/main/step2.py
step3.py - https://github.com/yar2-7/volvo-process-mining/blob/main/step3.py
diag1.py - https://github.com/yar2-7/volvo-process-mining/blob/main/diag1.py
diag2.py - https://github.com/yar2-7/volvo-process-mining/blob/main/diag2.py
diag3.py - https://github.com/yar2-7/volvo-process-mining/blob/main/diag3.py

