О себе
Привет всем, на связи Арсений Елисеев. В рамках рассмотрения консалтингового кейса одного из клиентов, крупного промышленного логистического оператора, возникла необходимость в интеграции машинного обучения.
В этой статье я хочу поделиться своими рассуждениями и описанием процесса разработки модели прогнозирования. Возможно, кому-то из вас данная информация может быть полезна. Также хочется отметить, что из-за NDA финансовые показатели и другая сенситивная информация будут скрыты.
Контекст проекта
Думаю, что сначала нужно ввести читателей в курс дела. В нашем случае обратившимся клиентом является 3PL-провайдер, который занимается организацией перевозок промышленных грузов. Большая часть заказов выполняется с помощью автомобильного транспорта. Важным моментом является то, что клиент обладает собственным автопарком, но иногда прибегает к практике аутсорсинга водителей и транспортных средств на время, предписанное контрактом, в периоды возрастающего спроса.
В рамках поиска проблемных бизнес-процессов компании были выявлены болевые точки, требующие доработки. Были найдены 4 основные проблемы, которые в разной степени прямо или косвенно влияли на качество логистического сервиса, а следовательно, и на объем реализуемой прибыли. Дисфункции, степень их опасности и их последствия удобно представить с помощью диаграммы Исикавы («рыбий скелет»), популярного инструмента анализа в менеджменте и консалтинге, представляющего собой причинно-следственную диаграмму (Siti Holifahtus Sakdiyah et al., 2022):
![Рисунок 1. Диаграммы Исикавы Рисунок 1. Диаграммы Исикавы](https://habrastorage.org/getpro/habr/upload_files/4a3/8f0/a6f/4a38f0a6f7bd38fb070c796250573631.png)
Я обратил внимание на проблему, которая обладает критическим влиянием и систематически занижает показатели качества предоставляемого логистического сервиса. Суть ее заключается в том, что компания часто сталкивается с упущенными продажами, так как в некоторых случаях не может принять заявку клиента по причине отсутствия ресурсов для ее выполнения. Таким образом, если сроки выполнения заявки позволяют реализовать привлечение транспортных средств и водителей с помощью аутсорсинга у партнеров или конкурентов за крайне ограниченный временной период, то компания осуществляет заказ. В противном случае происходят упущенные продажи, факт присутствия которых фиксируется в информационной системе.
Потенциальным решением этой проблемы будет совершенствование бизнес-процесса планирования, который, помимо обычного распределения рейсов на одну или две недели вперед функционалом информационной системы, вдобавок будет ориентирован на прогнозирование потребительского спроса для расчета необходимости в транспортных мощностях на определенные периоды времени.
Классификация методов прогнозирования потребительского спроса
Думаю, что следует немного обратить внимание на теорию. Неплохо бы было посмотреть на классификацию методов прогнозирования потребительского спроса с целью ознакомления с набором инструментов, которые могут быть потенциально применены. Отмечу, что существует множество систем типизаций для инструментов прогнозирования, но в этой статье я хочу поделиться своей личной, которая, на мой взгляд, способна полностью описать их природу. Ее можно представить следующим образом:
![Рисунок 2. Классификация методов прогнозирования потребительского спроса Рисунок 2. Классификация методов прогнозирования потребительского спроса](https://habrastorage.org/getpro/habr/upload_files/380/97d/fb9/38097dfb9b31edc5c39de9e4e557bf69.png)
Качественные методы прогнозирования, несмотря на свою понятность и простоту реализации, отличаются своей субъективностью и изменчивостью в том числе из-за того, что они строятся на личном восприятии ситуации индивидуумами. Обычно их используют при дефиците точных исторических данных. В данном случае выгрузки из ИС клиента позволяют нам построить временной ряд, поэтому особый интерес представляют инструменты количественного класса. Тем не менее, по уже озвученной причине возможности формирования датасета методы, лежащие в области имитационного моделирования, представляются излишними в связи с отсутствием необходимости в проведении экспериментов для сбора материала. Таким образом, мы можем прийти к выводу о том, что наш арсенал можно пополнить методами прогнозирования из прикладной статистики и машинного обучения.
Более того, модели прогнозирования потребительского спроса можно комбинировать. Даже те, которые относятся к разным типам. В международной практике разных сфер жизнедеятельности можно столкнуться с множеством успешных примеров сочетания нескольких прогнозных моделей для получения плана, обладающего большей точностью нежели той, какой обладают отдельные методы прогнозирования в конкретном случае (Bunga Kharissa Laras Kemala et al., 2024) (Heng Wang et al., 2024) (Carlos García-Aroca et al., 2024) (Jiyang Cheng et al., 2024) (Heba-Allah I. El-Azab, et al., 2023).
Кстати, подход, с помощью которого комбинируются прогнозные модели, называется «мета-моделью», которая также отбирается и в некоторых случаях отдельно обучается. По своему личному опыту могу сказать, что всегда следует предпринимать попытки совмещения нескольких методов прогнозирования, особенно тех, которые относятся к разным типам. На практике часто оказывается, что именно сочетания нескольких сильных сторон от каждого подхода становятся причиной появления той прогнозной модели, которая лучше всего адаптируется к условиям конкретной задачи. При комбинировании отдельных прогнозных планов, полученных разными методами, следует помнить только об одном простом условии, которое необходимо выполнять при назначении им их весов-коэффициентов:
![](https://habrastorage.org/getpro/habr/upload_files/f49/10d/c12/f4910dc128dccb6399cac9e76d0c62f9.png)
Специфики планирования размера транспортного парка
Все это время мы говорили о прогнозировании потребительского спроса, но не будем забывать о нашей конечной цели – получении плана потребности в транспортной инфраструктуре. На первый взгляд может показаться, что аутсорсинг большого числа грузовых автомобилей «поверх» собственного автопарка является ключом к решению всех проблем. Да, таким образом можно действительно поддерживать 100% уровень сервиса, но что насчет расходов? Доходы, полученные от выполнения всех предоставляемых заказов, могут просто-напросто «не перекрыть» всех расходов, связанных с поддержанием массивного объема транспортных мощностей. Клиенты довольны, но для нас выгоды нет…
Здесь можно провести параллель с известной в области УЦП дилеммой стоимости запасов и уровня сервиса (Shirell James, 2021), которая может быть выражена следующей зависимостью:
![Рисунок 3. Компромисс между стоимостью запасов и уровнем сервиса Рисунок 3. Компромисс между стоимостью запасов и уровнем сервиса](https://habrastorage.org/getpro/habr/upload_files/acf/106/c3f/acf106c3f34e74691a74606157b8a590.png)
Такая же зависимость справедлива и для объема транспортного парка: чем бóльший уровень сервиса поддерживается в данный момент времени, тем бóльший размер мощностей автопарка требуется для его дальнейшего увеличения.
В таком случае нам стоит ориентироваться на поддержание такого уровня сервиса, который обеспечит наибольшие показатели доходов. На практике в таких случаях часто обращаются к квантильному прогнозированию, с помощью которого пытаются предсказать не точное среднее ожидаемое значение, а значение, которое не будет превышено с определенной фиксированной вероятностью (с некоторыми условностями это и можно назвать «уровнем сервиса»). Также у такого подхода есть определенные преимущества:
1) Устойчивость к выбросам. Особенно это полезно в нашем случае, когда будет осуществляться агрегация данных на более длительные периоды времени, в течение которых возможна аренда дополнительных транспортных средств;
2) Агностицизм к распределению. Для применения некоторых методов прогнозирования требуется выполнение условия нормальности данных, но в случае их использования при прогнозировании квантилей данное условие не является обязательным.
Подход, основанный на прогнозировании квантилей, широко распространен на практике в различных сферах жизнедеятельности (Honglin Wen, 2024) (Dazhi Yang et al., 2023) (Sheng-Long Jiang et al., 2023). Также его применение встречается и в нашей целевой области управления транспортом (Evgenii Genov et al., 2024) (Heba-Allah I. El-Azab et al., 2024).
Разведочный анализ
*Все преобразования и расчеты введутся с помощью Python 3.10. Ссылка на репозиторий с Jupiter Notebook предоставлена в конце статьи.
Прежде чем приступать к построению пайплайнов для прогнозирования, стоит изучить данные, с которыми нам предстоит иметь дело. Посмотрим на первую строчку транспонированного датасета:
![Рисунок 4. Транспонированная строка датасета Рисунок 4. Транспонированная строка датасета](https://habrastorage.org/getpro/habr/upload_files/c60/1eb/eb2/c601ebeb25f9c373456580ffe9370a73.png)
Замечу, что есть много «лишних» столбцов, которые не совсем нужны для наших задач. Например, тот же статус заявки нас не интересует, так как мы будем рассматривать все потенциально возможные сделки. Оставим только дату отгрузки, агрегированную по ней массу заказов, а также новопостроенный столбец с удельной ценой перевозки 1 тонны для каждого отдельного дня, который понадобится в дальнейшем:
![Рисунок 5. Фрагмент датасета с необходимыми столбцами Рисунок 5. Фрагмент датасета с необходимыми столбцами](https://habrastorage.org/getpro/habr/upload_files/8ee/12e/3ed/8ee12e3ed5f6e6a0197f06c9a90eb88f.png)
В связи с тем, что в основном грузы принадлежат к категории малогабаритных, можно пропустить параметр грузовместимости транспортных средств и рассматривать только их грузоподъемность. По этой причине агрегация массы грузов в заказах является удобной и допустимой стратегией.
Также стоит обратить внимание на сами данные и заняться их проверкой на выбросы. В таком случае можно обратиться к традиционному инструменту визуализации, к боксплоту, часто именуемого «ящиком с усами»:
![Рисунок 6. Боксплот по столбцу массы Рисунок 6. Боксплот по столбцу массы](https://habrastorage.org/getpro/habr/upload_files/866/155/3c0/8661553c0c58339b69f1cba4444dbd15.png)
Отношение числа выбросов к общему числу наблюдений показывает, что выбросов всего-то около 1% от общего объема данных – их можно просто «удалить» без особых рисков. Приступим к «скальпеному» методу - IQR (межквартильный размах) (Ch. Sanjeev Kumar Dash et al., 2023), то есть просто уберем из датасета те наблюдения, агрегированная масса в которых в 1.5 раза больше разницы между нижним (25%) и верхним (75%) квартилем по этому же столбцу.
Теперь можно приступать к визуализации самого временного ряда. Если в рамках данной работы мы опираемся на квантили, то стоит, помимо динамики данных, построить динамику месячных квантилей (например, 90%) для проверки гипотезы о том, что по ним действительно можно найти какие-либо паттерны. Квантили рассчитаем на основе недельных агрегаций, так как практика показала, что такой подход приносит некоторую плавность и естественность динамике нового временного ряда. Также добавим к квантильному графику тренд с его уравнением для оценки общей тенденции:
![Рисунок 7. График динамики временного ряда Рисунок 7. График динамики временного ряда](https://habrastorage.org/getpro/habr/upload_files/454/982/ab2/454982ab2c995fce565254916a8cec3e.png)
Картина довольно интересная: рассчитанные месячные квантили действительно позволяют увидеть тренд и сезонность. Невооруженным глазом видно, что тренд нисходящий. Помимо его визуального представления, об этом также говорит и его аналитическое представление: его линейное уравнение, в котором отрицательный коэффициент перед X.
Чтобы удостовериться наверняка, обратимся к декомпозиции временного ряда, где каждый из упомянутых компонентов будет визуализирован по-отдельности. При решении дилеммы выбора аддитивной или мультипликативной модели для проведения декомпозиции будем опираться на меньшую автокорреляцию в остатках. Определить это нам поможет Критерий Дарбина – Уотсона:
![Рисунок 8. Декомпозиция временного ряда Рисунок 8. Декомпозиция временного ряда](https://habrastorage.org/getpro/habr/upload_files/471/21c/734/47121c73447792784023f64a914d9ce0.png)
Все-таки аналитика строится на аддитивной модели. Можно заметить резкое снижение тренда во второй половине 2021 года, продолжающиеся до конца истории наблюдений. Присутствует устойчивая сезонность: сентябрь и октябрь – самые пиковые периоды, в то время как декабрь и январь – самые простойные, что легко объясняется сначала подготовкой к выходным, а потом их непосредственным наступлением. В остатках действительно присутствует какой-то паттерн, а, значит, некоторая степень автокорреляции. Тем не менее, это довольно характерно для реальных данных, поэтому поводов для паники нет.
Построение моделей прогнозирования
Исходя из проведенного разведочного анализа можно сделать вывод том, что в нашей работе будут использоваться те методы, которые работают с нестационарными временными рядами и учитывают как тренд, так и сезонность. Без лишних слов выберем наиболее подходящие из них:
-
Простая скользящая средняя:
Простейший метод, который относится к алгоритмам прогнозирования 1-го поколения. Суть алгоритма заключается в усреднении значений за определенный период, называемый окном. Ширина окна определяет, сколько прошлых периодов будут учитываться при прогнозировании. Как правило, подходит только для гладких линейных динамик, тем не менее будет интересно понаблюдать, как он справится с данным временным рядом.
-
Метод Хольта-Уинтерса:
Модификация метода экспоненциального сглаживания для сезонных рядов. Отличается некоторой маленькой потребностью в вычислительных мощностях по сравнению с другими методами, учитывающими как тренд, так и сезонность.
-
SARIMA:
Данная модификация авторегрессионного скользящего среднего (ARIMA) учитывает сезонность, добавляя линейную комбинацию прошлых сезонных значений и/или прошлых ошибок прогноза.
-
LSTM:
Особая разновидность архитектуры рекуррентных нейронных сетей, способная к обучению долговременным зависимостям. Именно это свойство как раз таки и позволяет им прогнозировать временные ряды.
#build lstm scaler = MinMaxScaler(feature_range=(0,1))
lstm = Sequential()
lstm.add(LSTM(128, return_sequences=True,
input_shape=(df_qun.shape[0]-12, 1)))
lstm.add(LSTM(64, return_sequences=False))
lstm.add(Dense(32)) lstm.add(Dense(1))
lstm.compile(optimizer="adam", loss="mean_squared_error")
Теперь рассмотрим стратегии для комбинации прогнозных планов. В связи с тем, что наш временной ряд ограничивается всего лишь 5-ю годами, то обучение комбинационной модели будет ограничиваться работой только с последним годом, предшествующим году прогноза. Это объясняется тем, что для других подходов, требующих обучение моделей на исторических периодах, будет недостаточно наблюдений для качественного «разгона». В связи с этим можно предложить 2 метода:
-
Равномерная комбинация:
-
Комбинация по MSE:
Таким образом, у нас есть 6 отдельных методов прогнозирования: 4 отдельные модели и 2 комбинационных подхода. Прежде всего, стоит отметить, что значений квантилей у нас будет тоже несколько. Эмпирическим путем были выделены следующие уровни: 0.8, 0.85, 0.9, 0.9554, 0.9973. Последние 2 значения были взяты из правила шести сигм (The council for Six Sigma Certification, 2018), которое часто используется в области контроля качества и уровня сервиса.
Прогнозируемым годом будет 2022. Именно относительно фактических наблюдений будет оцениваться эффективность разработанных прогнозных планов. Однако, есть гипотеза о том, что для каждого квантильного уровня будет свой наиболее подходящий метод прогнозирования из числа ранее перечисленных. Значит, соотношение тех самых моделей с квантилями будет происходить в предшествующем 2021 году на основе минимального значения среднеквадратической ошибки (MSE) после их обучения на периоде с 2018 по 2020 года. Результаты:
![Рисунок 9. Результаты отбора оптимальных методов на тестовом годе Рисунок 9. Результаты отбора оптимальных методов на тестовом годе](https://habrastorage.org/getpro/habr/upload_files/675/46c/eb0/67546ceb0fc9c84d1752fa5689709687.png)
Можно заметить, что чаще всего наиболее подходящим решением для прогнозирования оказываются нейронные сети, в частности, LSTM. Хотя ряд «избранных» пополняют как традиционная SARIMA, так и одна из ранее предложенных комбинационных стратегий.
Результаты прогнозирования
Теперь нам предстоит использовать ранее отобранные методы для каждого квантильного уровня для целевого года. Собственно, обучение моделей происходит на полном историческом периоде, предшествующем 2022 году. Помимо попыток сравнить эффективность прогнозных планов, построенных на квантилях, также просчитаем «идеальный» сценарий, при котором привлекаются все возможные ресурсы для выполнения полного объема всех потенциальных заказов. Таким образом, при моделировании будут использоваться следующие параметры:
SELF_TRUCKS_COUNT = 5 #Величина собственного автопарка
TRUCK_CAPACITY_TONE_COUNT = 14 #Грузоподъемность т/с (КамАзы)
TRIP_DAYS_COUNT = 4 #Длительность кругового маршрута (рассматривается 1 экономическая зона)
RENT_TRUCK_PRICE = 250000 #Ежемесячная стоимость аутсорса услуг водителя с т/с
Результаты:
![Рисунок 10. Результаты квантильного прогнозирования Рисунок 10. Результаты квантильного прогнозирования](https://habrastorage.org/getpro/habr/upload_files/21a/5a1/48b/21a5a148b3dc7bbd65f4d52b0021afaa.png)
Можно заметить, что «идеальный» сценарий, когда мы пытаемся сдержать 100%-ый уровень сервиса, оказывается самым невыгодным вариантом из представленных, так как он предполагает наименьший объем прибыли. Самый выгодный путь – это прогнозирование с помощью LSTM 0.85-ным месячным квантилем. На его протяжении число дополнительно привлеченных транспортных средств не превышает 15 единиц, в то время как данный показатель у «идеального» варианта иногда превышает 80 единиц. Теперь с некоторой степенью уверенности можно предположить, что представленная схема прогнозирования вполне может быть использована в будущем для рассматриваемого случая. Тем не менее, стоит быть осторожным и регулярно проводить ревизию такого подхода, так как модели и квантильные уровни могут быть более эффективны для последующих периодов.
Выводы
В данной работе мы проверили гипотезу о том, что прогнозирование квантилями может быть применимо к транспортной сфере. Думаю, что удалось получить четкий и убеждающий результат. Эта тематика будет получать свое развитие в будущем.
Надеюсь, что проведенная работа будет полезна для вас. Что в целом думаете о таких экспериментальных подходах? Делитесь мнениями в комментариях!
*Исходный код в GitHub: https://github.com/yelis-alt/research/tree/prod/demand_planning_system