Просто стало интересно — что такое описательный анализ. Математический анализ, функциональный анализ знаю. А описательный?
Наверно такое определение подойдет: Описательный анализ — это последовательность шагов, которая превращает сырые данные в понимание процесса. Маркетологи наверно будут говорить, что это не анализ, а аналитика, ну это их проблемы.
Как теоретическую основу я использовал идеи из следующих источников:
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 вот отсюда.
Порядок действий, составленный на основе Process Mining:
Event log — журнал событий, сырые данные.
Descriptive statistics — смотрим, что в этих данных есть: длительность событий, какие события происходят чаще, аномалии, распределение по продуктам, кто что делает и тому подобное
Process discovery — строит модель. Отвечает на вопрос: как процесс выглядит в типичном случае?
Conformance checking — проверяет насколько логи соответствуют построенной модели.
Performance analysis — анализ производительности.
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