Обновление статьи от 05.07.2019г.
В статье описан подход, использующий нейронные сети и генетические алгоритмы, от которого мы отказались в пользу вероятностных алгоритмов. Их применение дает лучшие результаты. Подробнее об можно прочесть в статье "От нейронных сетей к вероятностным алгоритмам".
Для оценки качества прогноза в статье используется метрика sMAPE. На текущий момент мы не рекомендуем ее использовать, так как более объективной для бизнеса является оценка потерь в деньгах. Подробнее о нашем подходе читайте в статье "Почему мы не считаем MAPE, RMSE и другие математические ошибки при прогнозировании спроса".
Совместно с представителями одной из торговых сетевых компаний города были выбраны 362 продукта для оценки эффективности работы программы. Для тестирования была предоставлена база данных с историей продаж за 1 год и месяц. Продукты были выбраны таким образом, чтобы как можно более полно были представлены всевозможные случаи продаж разного рода:
- ярко выраженная недельная сезонность,
- наличие другой краткосрочной сезонности
- отсутствие краткосрочной сезонности
- наличие/отсутствие тренда,
- товары с высокой/низкой частотой продажи
- большие/низкие объемы среднесуточных продаж
- неслучайное отсутствие спроса,
- ограниченный спрос в условиях дефицита товара
- короткая история продаж (2-3 месяца)
- относительно длительная история продаж (более полугода)
Для каждого товара было построено 8 прогнозов, каждый на неделю. Таким образом, был смоделирован процесс работы пользователя с программой в течение 56 дней. Расписание приезда поставщиков было выбрано точно таким же, как на самом деле происходили поставки. Качество прогноза оценивалось по ошибке sMAPE, которая рассчитывалась исключительно на прогнозируемом промежутке, что позволяет говорить об объективности такой оценки в реальных условиях. Для расчета ошибки были получены реальные продажи на данном участке и вычислено абсолютное отклонение от прогноза в процентах.
Результаты по точности прогнозирования представлены в таблице ниже.
№ п/п |
Ошибка sMAPE |
Точность % |
11 |
0,0371627 |
96,28373 |
22 |
0,0389342 |
96,10658 |
33 |
0,0526248 |
94,73752 |
44 |
0,0587458 |
94,12542 |
55 |
0,0601749 |
93,98251 |
66 |
0,0606426 |
93,93574 |
77 |
0,0634405 |
93,65595 |
88 |
0,0690393 |
93,09607 |
99 |
0,0712231 |
92,87769 |
. |
…………….. |
………….. |
175 |
0,196098 |
80,3902 |
176 |
0,196202 |
80,3798 |
177 |
0,196631 |
80,3369 |
178 |
0,197859 |
80,2141 |
179 |
0,198162 |
80,1838 |
180 |
0,199609 |
80,0391 |
181 |
0,202048 |
79,7952 |
182 |
0,202186 |
79,7814 |
183 |
0,2024 |
79,76 |
. |
……….. |
…………. |
360 |
0,317184 |
68,2816 |
361 |
0,318487 |
68,1513 |
362 |
0,319976 |
68,0024 |
0,19666426 |
80,3335738 |
Максимальная точность, которая была достигнута, составила 96,3%. Минимальная точность 68%. Средняя – 80,3%. Среднеквадратичное отклонение ошибки 5%. Данная величина показывает, что основная масса товаров спрогнозирована с точностью от 75 до 85%. Точность выше 75% достигнута на 292 товарах из 362, что составляет 80% от общего числа товаров. Высокая ошибка получена преимущественно на тех товарах, у которых наблюдается неожиданная смена тренда. Однако даже в таких условиях система показывает крайне хорошую точность прогноза, составляющую порядка 70%. Точность прогнозирования может быть повышена за счет увеличения истории продаж. В таком случае, могут быть учтены праздники, имеющие годовую сезонность, такие как Новый Год, 8 марта и пр.
Рассмотрим первый этап – построение прогнозов. Здесь и далее, красным представлены реальные продажи. Синие – прогнозируемые. Вертикальные пунктирные линии показывают прогнозируемые участки, горизонт прогнозирования 7 дней. Обучение системы происходило на данных, которые предшествуют вертикальным отметкам. Как можно заметить из данного графика, система хорошо адаптируется к резко меняющемуся тренду, даже в том случае, если таких изменений не наблюдалось в истории продаж ранее.
На графике ниже представлен товар с крайне высокочастотными продажами. Сложная ситуация для прогнозирования. Система успешно справляется с прогнозированием товаров подобного рода. Достигнутая точность – 73%.
На графике ниже представлен товар с ярко выраженной недельной периодичностью. Можно видеть, что система прогнозирует такой товар очень хорошо и необходимый страховой запас очень мал.
На следующем графике представлены продажи товара, имеющие дефекты в виде неслучайного отсутствия спроса, что выражено в виде провала спроса. Именно в эти моменты товара на складе оказывалось недостаточно. Также товар имеет тренд и высокочастотные полу-хаотичные продажи. Это вызвано также проблемами со складом. Как можно заметить, система сглаживает подобные явления, восстанавливает спрос и успешно обучается. Точность прогноза – 88%.
На данном графике представлен товар из разряда скоропортящихся, для которого неправильно выбран уровень закупки. Спрос ограничен 20 ед. товара, видны частые провалы из-за отсутствия товара на складе. Легко заметить сильный дефицит. Точность прогноза 90%. Дефицит устраняется предложенным страховым запасом.
На графике ниже представлен товар с ярко выраженной длительной сезонностью, сильно изменяющимся трендом. Система успешно замечает смену тренда, хотя период прогнозирования начинается именно на этом участке. Достигнута высокая точность прогноза 85%. Если при прогнозировании такого товара использовать простые методы учета среднесуточной уходимости товара, то на складе возникнет большой избыток товара, ввиду резкого изменения величины среднесуточной уходимости.
Прогнозируемые продажи еще не являются оптимальным товарным запасом. Поэтому здесь очень важно не приблизиться ко всем выбросам продаж, которые существуют в истории, а сгладить их наиболее приемлемым образом. После получения прогноза, высчитывается страховой товарный запас с учетом степени отклонения модели прогнозирования от реальных продаж. Оптимальный товарный запас складывается из величины страхового товарного запаса, помноженного на степень учета риска (различную для скоропортящихся и долгохранящихся товаров) и прогнозируемого значения продаж. Таким образом,
Оптимальный товарный запас = страховой запас * коэффициент риска + прогнозируемые продажи + минимальный товарный остаток
Примеры прогнозирования оптимального товарного запаса
Переходя от прогноза к реальному товарному запасу, были получены следующие результаты. Во всех случаях, когда реальные складские остатки не ограничивали спроса, то есть не наблюдалось неслучайного отсутствия спроса или его ограничения, получены положительные результаты по сокращению числа занятых оборотных средств и избытка. В других же случаях видно, что при отсутствии страхового запаса в магазине время от времени случается дефицит. На графиках рекомендуемый товарный запас и его расход отмечены синим цветом.
Красным цветом – реальные остатки и их расход. Почти во всех случаях (за исключением дефицита, который в магазине характерен для скоропортящихся продуктов) товарный запас, предложенный системой, оказался ниже, чем реальный товарный запас. При этом спрос был полностью удовлетворен. В случаях скоропортящегося товара возможно различное, на усмотрение менеджера по закупкам, поведение программы, либо использование страхового запаса и гарантированное (95% вероятность) отсутствие дефицита, либо гарантированное отсутствие избытка.
На примере 6 можно видеть данный случай. Красный график показывает частое отсутствие товара. Прогноз выше, чем реальные остатки на страховой запас, что позволяет удовлетворить спрос в полной мере.
Пример 1
Пример 2
Пример 3
Пример 4
Пример 5
За счет добавления страхового запаса можно избежать дефицита, если это необходимо.
Заключение
В ходе проведенного испытания алгоритмов и программного продукта в целом на одном из магазинов торговой сети города можно сделать выводы о целесообразности и экономической эффективности применения данного решения. Достигнутая точность прогнозирования (в среднем 80%) позволяет определять оптимальный товарный запас с высокой точностью. За исключением скоропортящихся продуктов, для которых магазин имеет высокий реальный дефицит, все товарные остатки рекомендуемые системой оказались значительно ниже реальных. В случае скоропортящихся товаров необходимо определить, что является наиболее важным для магазина – отсутствие дефицита или избытка. Исходя из данного соображения, установить уровень страхового запаса для скоропортящихся товаров. Таким образом, применение программного средства позволит высвободить значительные оборотные средства и направить их в более эффективное русло. Разработанные алгоритмы показали свою эффективность в условиях нестабильного спроса, изменения рыночной ситуации, наличии неслучайного отсутствия спроса.
Автор: Александр Грицай