Точно прогнозируйте потребность в топливе с помощью прогнозирования временных рядов.

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

Контекст

Компания Slalom недавно помогла гиганту ресурсной отрасли создать инструмент планирования для своего среднего бизнеса, который позволяет планировщикам эффективно согласовывать предложение со спросом и максимизировать эффективность затрат. В топливной промышленности промежуточные операции включают передачу данных от точки производства (вверх по течению) до точки потребления (вниз по течению), часто через обширные территории, чтобы обеспечить соответствие спроса и предложения. Инструмент оптимизировал планирование, чтобы гарантировать, что терминалы будут снабжены нужным количеством топлива, в нужное время и в нужном месте. Это позволяет планировщикам принимать решения на основе данных, которые значительно спасут компанию и помогут ее цепочке поставок работать более эффективно.

Клиент рассчитал прогноз потребности в топливе, усреднив фактические отгрузки топлива за месяц с учетом типа топлива и расположения терминала. Затем они были разделены на дни. Поскольку прогнозирование спроса является очень важным элементом инструмента планирования поставок, мы проанализировали, как клиент прогнозировал свои потребности, и обнаружили разрыв между прогнозируемой тенденцией и фактической отгрузкой топлива.

Это побудило нас выполнить первоначальный исследовательский анализ данных, чтобы понять это несоответствие и улучшить модель прогнозирования. Slalom создал доказательство концепции, где мы проанализировали данные, выявили пробелы и, в конечном итоге, улучшили модель прогнозирования клиента.

Анализ данных

Первоначальный анализ показал неполные или отсутствующие фактические данные о разгрузке для различных терминалов и типов топлива. Итак, для уточнения нашей модели мы выбрали терминал с наибольшим количеством зарегистрированных фактических разгрузок. Для этого терминала мы графически изобразили разрыв между фактическими и прогнозируемыми данными по разгрузке. Поскольку прогнозируемое значение одинаково для каждого дня месяца, чтобы лучше увидеть сравнение, мы выполнили скользящую сумму по фактической разгрузке с окном в 5 дней, что помогло сгладить линию и дало лучшее представление о разрыве. На графике ниже показано сравнение:

Затем это сравнение позволило нам лучше понять фактические данные о спросе и определить готовность обучающих данных для алгоритма прогнозирования. Наша первоначальная цель состояла в том, чтобы сократить разрыв между синей и оранжевой линиями, как показано на рисунке выше, и дать обоснованные прогнозы для снижения накладных расходов, рисков и излишков.

Система регистрации заработала в 2021 году. С тех пор приблизительные данные о том, сколько и какого вида топлива продается, каждый день вручную заносились в систему на каждом терминале. Однако иногда недостающие данные заполняются случайным числом на основе памяти и опыта регистратора.

Таким образом, у нас были данные почти за год с подробным описанием объема спроса на топливо для каждой даты, типа топлива и терминала, на котором можно было выполнить наше моделирование. Однако данные содержали человеческую ошибку, поэтому наш анализ должен был включать проверку качества данных, прежде чем выявлять закономерности в данных временного ряда и прогнозировать спрос на определенное топливо в следующем порядке.

Проверка качества данных

Качество данных важно для обеспечения точного алгоритма прогнозирования. Сначала мы визуализировали, затем предварительно обработали данные, прежде чем передать их в модель.

Давайте внимательно посмотрим на данные.

Как показано на рисунке 2 ниже, в целом спрос на каждый тип топлива (item_id) не распределяется равномерно по каждому терминалу. Разрыв в спросе очень большой, в зависимости от того, какой терминал и вид топлива.

Как показано на рис. 3, для терминалов 2050 и 2068 наиболее доступные данные по типу топлива xxx476 и xxx188 следует использовать для дальнейшего анализа.

Как показано на рисунке 4, мы взяли терминал 2068 и тип топлива 100000188 в качестве примера данных. Мы видим, что данные сильно колеблются изо дня в день. Небольшие сезонные закономерности можно наблюдать, но не очень четко.

Выявление закономерностей в данных

Чтобы уменьшить влияние ошибок в данных, вместо использования ежедневного спроса для анализа использование суммы спроса за N дней делает данные более точными и лучше подходит для бизнес-модели. Как показано на рисунке 5, при увеличении N в сумме можно наблюдать сглаживание данных. Мы выбрали 5-дневную скользящую сумму для дальнейшего анализа и прогнозирования.

Важно определить, можно ли анализировать данные. Например, данные могут быть стационарными или нестационарными, автокорреляция может быть высокой или низкой, или сами данные могут представлять собой белый шум. [2] На рис. 6 показан этот анализ, который помог нам определить лучшую модель для данных. Разница 1-го и 2-го порядка на рисунке ниже показывает некоторый уровень стационарности и корреляции между данными.

Прогнозирование спроса: выбор модели

ARIMA и SARIMA являются общими алгоритмами для прогнозирования временных рядов [1]. Как показано на рис. 7, SARIMA показывает лучшие результаты при наличии всплеска. Средняя абсолютная процентная ошибка (MAPE) ARIMA и SARIMA составляет 0,1201 и 0,1279 соответственно. SARIMA лучше, чем ARIMA, уловила сезонную закономерность, как было показано ранее. Тем не менее, в будущем его все еще необходимо улучшить.

Существует еще один сценарий, основанный на реальном бизнес-варианте использования. Например, в пятницу операторы заказывают топливо на всю следующую неделю, и им нужно знать только прогнозируемый спрос на эту неделю. В таком случае более точным будет обращение к прогнозируемому спросу на N+1 день на основе данных за N дней. Мы сделали это с помощью SARIMA, как показано на рис. 8. Результат показывает, что модель может улавливать большинство всплесков, что более полезно, когда речь идет о реальном бизнес-потоке. Данные должны обновляться каждый день, и модель следует обучать каждый раз при обновлении данных, чтобы получать лучшие результаты.

Сравнение с текущим прогнозом клиента

Если мы нанесем линию для прогнозов SARIMA на рисунке 7 (2 недели) и прогнозов SARIMA (1 день) с рисунка 8 на график на рисунке 1, мы увидим, что построение модели на основе существующих данных о спросе уменьшает разрыв между устаревшими прогнозами. решение и фактический спрос, как показано на рисунке 9. На этом графике показана более близкая картина месяцев с июля по сентябрь, когда мы предсказали примерно 2 недели спроса.

Подведение итогов

Это доказательство концепции сразу же стало демонстрировать ценность для клиента благодаря значительным улучшениям в том, как они прогнозируют потребность в топливе: в течение первых 3 недель потребность в топливе, прогнозируемая этим алгоритмом, была примерно на 70% точнее. Дальнейшее совершенствование методов, обсуждаемых в этой статье, с использованием больших доступных наборов данных еще больше повысит точность прогнозов — работа, которая в настоящее время продолжается с командой Slalom!

Подтверждение

Огромное спасибо Лин Фэн за ее работу над этим PoC и Райцинруйвангу за его руководство, Вэй Цюй за поддержку написания этой статьи и его обратная связь. Я благодарен Яснин Ашрофф, Роберту Сибо, Ламу Труонгу и Нику Джеймисону за их поддержку и отзывы.

Рекомендации

1. Нежное введение в SARIMA для прогнозирования временных рядов в Python

https://machinelearningmastery.com/sarima-for-time-series-forecasting-in-python

2. Обзор автокорреляции, сезонности и стационарности в данных временных рядов.



3. Прогнозирование временных рядов — полное руководство