От нейронных сетей к вероятностным алгоритмам

Почему мы отказались от нейронных сетей и стали использовать вероятностные алгоритмы для прогнозирования товарных запасов

 

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

 

Разрабатывая систему «Forecast NOW!», мы закладывали в неё принципы самообучающихся нейронных сетей. И нужно заметить, для продукции регулярного спроса, то есть примерно для 4-6% товаров, представленных в стандартном супермаркете, они показывали отличные результаты.

 

Почему именно для 4-6%? Во-первых, прогноз на ближайший день или неделю получается в виде единственного числа. Значит, необходимо дополнительно учитывать и страховой запас. Он, как правило, рассчитывается через нормальное распределение или через распределение Пуассона. Но нормальное распределение свойственно только 4-6% товаров из всего ассортимента магазина, которые покупают регулярно и стабильно. И корректно рассчитать страховой запас можно только для них.  Во-вторых, для нейронных сетей на входе должно быть большое количество обучающих примеров по конкретному товару. Если товар имеет разреженные продажи, то получить достаточно обучающих примеров невозможно. Разреженные продажи, как это ни странно, имеют 94-96% ассортимента типового магазина. Сочетание этих двух факторов и дает те самые 4-6%.

Что касается использования нейронных сетей в «Forecast NOW!», то для каждого товара система индивидуально рассчитывала спрос и необходимый для заказа объём товаров. При расчёте учитывалось влияние огромного пула параметров на спрос: от прогноза погоды для продаж мороженного до прогноза продаж автомобилей для реализации запасных частей. При этом на входе модель могла обработать любые данные, полученные от пользователей. Единственное условие – они должны быть оцифрованы и корректно подготовлены.  По мере накопления данных нейронная сеть самостоятельно дообучалась, анализировала влияние различных показателей для того, чтобы улучшить прогнозы. Например, прогноз погоды являлся довольно важным фактором для продаж мороженого. В этом случае нейронные связи укреплялись. Факторы, которые практически не оказывали влияние – наоборот, ослаблялись. Здесь также стоит отметить про опасность данных, которые могут не отличаться высокой точностью.  В данном случае – это прогноз погоды. А его необходимо подавать на вход и в дальнейшем. И так как он имел достаточно большой вес, это было рискованно при работе с большим количеством магазинов и товаров.

 

Однако, даже такая, казалось бы, идеальная система, могла давать сбои. Дело в том, что нейронные сети очень требовательны к входным данным. Несмотря на возможность учёта большого количества параметров, это усложняет всю систему. А чем сложнее система, тем труднее её обучить, контролировать и соответственно, получить качественный результат. Чтобы контролировать усложнение модели вводился “штраф за сложность” для нейронной сети. В противном случае был риск, что сеть с большим количество нейронов, связей и степеней свободы будет использовать каждую связь для конкретного типа примеров. Другими словами она могла заучивать “правильные” ответы, как студент, который не понимает материал, и впоследствии их показывать на выходе.  Иногда, чтобы понять, есть ли корреляция между факторами, и какой из них необходимо учитывать, приходилось проводить предварительные анализы.  Таким образом, мы либо сильно усложняли модель, либо сами должны быть понимать, какие факторы важны, а какие нет. 

Вообще, вопрос входных данных это достаточно сложная тема и чтобы подробно её раскрыть потребуется отдельная статья. Здесь мы затронем только основные моменты. Входные данные должны быть хорошо подготовлены и тщательно обработаны. Для этих целей у нас были разработаны отдельные алгоритмы, которые их нормализовывали, выравнивали плотность. Данные на входе должны быть определенного объёма, “нарезаны” определённым образом, как примеры, на которых можно обучаться. Необходимо создать библиотеку обучающих и контрольных примеров. Проблема проектирования входных данных является одной из ключевых и напрямую влияет, будет ли обучаться нейронная сеть. Отдельно приходилось заниматься определением параметров, которые важны на входе. Какие признаки будут оптимальными для тех или иных товаров. Подробнее об этом можно прочесть в нашей публикации https://elibrary.ru/item.asp?id=22535216

 

Помимо проектирования входных данных вставал вопрос проекта самóй нейронной сети. Насколько сложной она должна быть? Сколько слоёв и нейронов должна содержать? Мы испробовали множество подходов: начиная от генетических алгоритмов, которые могут оптимизировать, то есть искать оптимальную, структуру нейронной сети, и заканчивая эвристическими алгоритмами, которые позволяли исходя из сложности входных данных понять адекватную сложность внутренности нейронной сети.

 

Стоит сказать и про проблемы с обучением нейронных сетей, которые нам приходилось решать. Первая из них – это переобучение. Был большой риск натренировать нейронную сеть именно на тех результатах, которые служили примером. В дальнейшем она, просто, начинала их повторять. Чем больше факторов мы добавляли, тем больше становилась сложность системы и повышался риск, что она могла “зазубрить ответы”. При изменении входных данных с другими параметрами на выходе могли получиться совершенно неопределенные значения. Для решения этой задачи исторические данные делились на две части, обучающая и контрольная, для проверки. Таким образом, у нас ещё больше сокращалось число обучающих примеров. Вторая большая проблема – застрять в локальном минимуме, недообучить нейронную сеть. Была вероятность, что алгоритм остановится на каком-то субоптимальном решении. Чтобы выйти из этого положения, приходилось подключать к решению другие нейронные сети, которые образовывали комитет и путем голосования определяли прогнозный спрос. Другим вариантом было применение генетических алгоритмов. Они воздействовали на веса нейронной сеть путём мутации и скрещивания, тем самым заставляя её измениться, что впоследствии помогало обучаться дальше и повышать точность прогноза.  Однако использование данных подходов в реальных условиях сильно осложняло применение системы.

 

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

 

Главной же сложностью применения такой системы стало то, что организации и конечные пользователи не понимали, как работают эти алгоритмы. И достоверность полученных данных во многих случаях была под вопросом. Фактически, мы получали «чёрный ящик». Понятно, что реальная компания не готова работать с тем, чего не понимает. Здесь мы пробовали применять различные технологии для получения объяснений от нейронной сети, такие как извлечение правил. Но эти извлечённые правила  были малопонятны для людей и зачастую содержали очень странные закономерности. При этом использование нейронных сетей и генетических алгоритмов хорошо зарекомендовало себя в таких областях, как распознавание образов, текста, окружающей среды, например, для беспилотных автомобилей, то есть там, где конечный результат можно легко проверить на правильность. Ситуации, когда данные на выходе нельзя сразу проверить, несли большие риски для организаций.

 

В конечном итоге, несмотря на то, что все описанные проблемы удалось решить, мы всё же поняли, что использование нейронных сетей и генетических алгоритмов для прогнозирования спроса – это не самый лучший метод. После долгих экспериментов, мы остановились на вероятностных моделях. Вероятностное прогнозирование позволяет получить на выходе не, просто, цифру, а набор чисел – вероятностей. Алгоритмы гораздо менее сложные по своей сути и от этого более эффективные и устойчивые к входным данным. А главное – понятны конечным пользователям, а значит и компании. 

 

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

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

 

Теперь представим, что, заказывая вино на неделю, на выходе вы получаете распределение вероятностей спроса:

·        с 88 процентной вероятностью купят не более чем 100 бутылок вина,

·        с 89 процентной – не более чем 102 бутылки вина,

·        с 90 процентной -  не более чем 103 бутылки вина,

·        и так далее…

У вас уже появляется выбор, какой процент спроса удовлетворить. И, главное, вы можете этим управлять. То есть вы больше не зависите от прогноза в виде одного числа и стандартизированного нормального распределения, а можете оценить риски и выбрать наиболее прибыльный вариант в соотношении: удовлетворение спроса / затраты. Так, если вы держите 100 бутылок вина, то:

·        с 1% вероятности вы недопродадите 2 бутылки вина,

·        с 2% вероятности вы недопродадите 3 бутылки вина,

·        и так далее…

Вы можете взвесить эти риски, оценить их влияние в деньгах, понять, насколько оптимально удовлетворять 88% спроса. Взвесив риски для каждой вероятности, вы сможете найти оптимальную точку баланса, то есть, сколько бутылок вина выгоднее всего хранить. Теперь прибавим такое же распределение вероятностей для еще 20 000 товаров из первого примера, и вы сможете управлять товарными запасами более эффективно. А при возникновении исключительных ситуаций, которые происходят постоянно на рынке, вы сможете максимизировать свою прибыль. Отметим, что если вы используете классический метод с нормальным распределением или стандартными отклонениями для определения страхового запаса, то для каждого товара распределение этих рисков будет иметь одинаковую форму, что не соответствует реальности.

Как показала наша практика, а это более 500 исследований на реальных данных предприятий различных отраслей розницы и дистрибуции, вероятностные модели зарекомендовали себя гораздо лучше, чем системы с использованием нейронных сетей и все ныне существующие математические алгоритмы. Вероятностные модели позволяют максимально точно рассчитывать оптимальную точку баланса запаса для каждого товара, то есть определяют такое количество товаров, которое нужно хранить на складе, чтобы минимизировать суммарные потери. При этом в нашей системе учитываются риски: затраты на хранение, возможный дефицит, списания испорченной продукции, стоимость замороженных денежных средств – вероятность которых может исчисляться в сотых долях процента!

 

«Forecast NOW!» – это русская система, которая использует вероятностные алгоритмы для управления товарными запасами. В мировой практике они считаются одними из самых эффективных. И Россия, благодаря высокому качеству и доступности отечественных решений, уверенно вытесняет ими алгоритмы прогнозирования, устаревшие 10-15 лет назад, одной из первых массово распространяя их на прогнозирование в большинстве торговых компаний.

 

Грицай Александр (http://fnow.ru/)

Перепечатка и перепостинг статьи вместе с этим текстом, указанием автора, и ссылки на первоисточник: http://upravlenie-zapasami.ru/ - приветствуются!

 

 

Если статья отображается не корректно, или вы хотите скачать её себе, то воспользуйтесь этими ссылками:

cкачать в формате PDF статью От нейронных сетей к вероятностным алгоритмам cкачать статью "От нейронных сетей к вероятностным алгоритмам" в формате PDF
cкачать в формате DOC статью От нейронных сетей к вероятностным алгоритмам cкачать статью "От нейронных сетей к вероятностным алгоритмам" в формате DOC