Прогнозирование времени выполнения заказов

Прогнозирование времени выполнения заказов












Главная » Ресурсы » Здесь

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

Основной синтаксис

Система прогнозирования имеет особую функцию — функцию вызова (по терминологии Envision). Синтаксис данной функции выглядит так:

Leadtime = forecast.leadtime(
  category: C1, C2, C3, C4
  hierarchy: H1, H2, H3, H4
  supplier: Supplier
  offset: 0
  present: (max(Orders.Date) by 1) + 1
  leadtimeDate: PO.Date // "PO" stands for PurchaseOrders
  leadtimeValue: PO.ReceivedDate - PO.Date + 1
  leadtimeSupplier: PO.Supplier)

В отличие от обычных функций у функций вызова аргументы представляют собой имена, а не позиции. Именные аргументы лучше подходят для сложных функций, потому что благодаря им исходный код легче понять, пусть даже он становится немного длиннее. Такие аргументы работают точно так же, как и обычные, а значит, с ними можно использовать выражения Envision.

Функция возвращает вектор Leadtime, который представляет собой функцию распределения (см. раздел алгебра распределения). Функции распределения — это сложный тип данных, представляющий собой функции $p: \mathbb{Z} \to \mathbb{R}$. Если точнее, система прогнозирования возвращает случайные переменные, такие значения функций распределения, которые больше нуля и у которых масса равна 1. В текущем примере функция $p(k)$ представляет собой вероятность времени выполнения заказа длительностью в $k$ дней. Все элементы (с точки зрения Envision) привязаны к собственной функции распределения.

В полной формуле forecast.leadtime содержится много аргументов, однако лишь два из них являются обязательными.

  • present: скалярная дата
  • leadtimeDate: вектор дат с привязкой к элементам

Значение present — это дата, которая считается первым днем составления прогноза, причем предполагается, что данные будут полностью собраны вплоть до предыдущего дня. На практике некоторые компании не работают по воскресеньям, и если последняя дата в наборе данных — это суббота, то существует определенное затруднение относительно того, нужно ли начинать прогнозирование с воскресенья или с понедельника. В примере выше мы используем выражение max(Orders.Date) + 1, исходя из предположения, что заказы размещаются каждый день и что входящие данные за предыдущий день получены.

Значения leadtimeDate и leadtimeValue должны находиться в одной таблице с привязкой к элементам — то есть с колонкой (Id, *) в терминологии Envision. Даты представляют собой дни (включая первый) начала отслеживания времени выполнения заказов. Значения выражаются в днях. Разделение дней на части не поддерживается. В данной таблице содержится история времени выполнения заказов, спрогнозированного системой.

Когда оператор leadtimeValue опускается, в качестве значений времени выполнения заказов используются последовательные периоды времени между датами leadtimeDate. Данная функция необходима для прогноза времени выполнения заказов на продажу товаров; которое обычно рассчитывается отдельно от времени выполнения заказов на закупку товаров.

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

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

Категории и иерархия

Категории и иерархия очень похожи с точки зрения системы прогнозирования: они помогают работать с малым количеством фактических данных.

См. статью о прогнозировании с использованием категорий и иерархии.

Поставщик

Выбор поставщика часто играет важную роль при оценке времени выполнения заказов. Данные поставщика можно ввести в систему прогнозирования двумя взаимодополняющими способами.

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

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

Отклонения времени выполнения заказов

По умолчанию прогнозирование начинается с текущего дня (present). Тем не менее, иногда необходимо начать прогнозирование с более поздней даты. Если время выполнения заказов зависит от времени года, то дата начала отсчета времени выполнения заказов может значительно повлиять на распределение соответствующих значений. Такие случаи обрабатываются через свойства offset. Для этого дополнительного свойства требуется числовой вектор в таблице items. Значения данного вектора представляют собой отклонения (выраженные в днях), которые необходимо учитывать при составлении прогнозов времени выполнения заказов. Например, если значение отклонения для элемента равно 10, тогда первый день составления прогнозов времени выполнения заказа будет present + 10. Если свойство offset не указывать, то все отклонения будут равны нулю.