The Jerusalem PostIsrael, US elections demand accountability, not blind loyalty - opinionRTP DesportoFamalicão - AlvercaDaily MaverickAFTER THE BELL: Whether Boxer or the ANC, succession planning separates strong institutions from fragile onesESPNJets' 'Cleveland Brown' troll leads top NFL jabs of Week 5ESPN DeportesHurgando en la pelea del dueño de una terraza en Wrigleyville con los CubsVilaWebEl consum familiar empeny amb força l’economiaAnime News NetworkTexas' Kawacon Anime, Gaming Convention Ends After 5 YearsVarietyWhat Paramount-Warner Bros. Merger Reveals About Media’s Future (Guest Column)DeadlineCatherine Laga’aia & Deacon Phillippe To Lead Disney+ Pilot ‘Spaceship Earth’ZDF heuteEntdecken Sie das ZDF-NachrichtenstudioBillboardDistroKid Removes Songs in Response to UMG’s Streaming ‘Slop’ LawsuitNOS SportBaansprinter Richardson, rivaal van Lavreysen, vlak voor WK uit Britse selectie gezet
The Daily Newsstand · Free, Always
Monday, October 12, 2026

Описательный анализ и где он обитает

Translate

Просто стало интересно - что такое описательный анализ. Математический анализ, функциональный анализ знаю. А описательный?

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

Как теоретическую основу я использовал идеи из следующих источников:

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+ года!)

Diag1.py

Diag1.py

Половина процессов длится больше недели.

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 Пинг-понг

Diag3.py

Diag3.py

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

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.