Для страниц где нет редактора

20 октября 2015

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

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

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

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

Что касается использования нейронных сетей в Forecast NOW!, то для каждого товара система индивидуально рассчитывала спрос и необходимый для заказа объем товаров. При расчёте учитывалось влияние огромного пула параметров на спрос: от прогноза погоды для продаж мороженного до прогноза продаж автомобилей для реализации запасных частей. При этом на входе модель могла обработать любые данные, полученные от пользователей. Единственное условие — они должны быть оцифрованы и корректно подготовлены.

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

Проблема подготовки входных данных

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

 

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

Данные на входе должны быть определенного объема, «нарезаны» определенным образом, как примеры, на которых можно обучаться. Необходимо создать библиотеку обучающих и контрольных примеров. Проблема дизайна входных данных является одной из ключевых и напрямую влияет, будет ли обучаться нейронная сеть. Отдельно приходилось заниматься определением параметров, которые важны на входе. Какие признаки будут оптимальными для тех или иных товаров. Подробнее об этом можно прочесть в нашей публикации: elibrary.ru/Определение эффективной структуры входных данных для обучения нейронной сети решению задачи прогнозирования спроса

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

Тонкости обучения нейронных сетей

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

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

Бизнес не готов работать с тем, чего не понимает

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

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

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

Управление товарными запасам с использованием вероятностных алгоритмов

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

Теперь представим, что, заказывая вино на неделю, на выходе вы получаете распределение вероятностей спроса: с 88 процентной вероятностью купят не более чем 100 бутылок вина, с 89 процентной — не более чем 102 бутылки вина, с 90 процентной — не более чем 103 бутылки вина и т.д. У вас уже появляется выбор, какой процент спроса удовлетворить. И, главное, вы можете этим управлять. То есть, вы больше не зависите от прогноза в виде одного числа и стандартизированного нормального распределения, а можете оценить риски и выбрать наиболее прибыльный вариант в соотношении затраты/удовлетворение спроса. Так, если вы держите 100 бутылок вина, то с 1% вероятностью вы недопродадите 2 бутылку вина, с 2% вероятностью вы недопродадите 3 бутылки вина и т.д. Вы можете взвесить эти риски, оценить их влияние в деньгах, понять насколько оптимально удовлетворять 88% спроса. Взвесив риски для каждой вероятности, вы сможете найти оптимальную точку баланса, то есть сколько бутылок вина выгоднее всего хранить. Теперь прибавим такое же распределение вероятностей для еще 20 000 товаров из первого примера, и вы сможете управлять товарными запасами более эффективно. А при возникновении исключительных ситуаций, которые происходят постоянно на рынке, вы сможете максимизировать свою прибыль. Отметим, что если вы используете классический метод с нормальным распределением (стандартными отклонениями) для определения страхового запаса, то для каждого товара распределение этих рисков будет иметь одинаковую форму, что не соответствует реальности.

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

Forecast NOW! — это первая система на российском рынке, которая использует вероятностные алгоритмы для управления товарными запасами. В мировой практике вероятностные модели считаются одними из самых эффективных. (ссылка на научное обоснование) И если рассматривать западные страны, то там они применяются де-факто и давно вытеснили устаревшие модели. В России же все несколько иначе. Большинство компаний до сих пор применяет алгоритмы прогнозирования, устаревшие 10-15 лет назад. Однако в последние годы ситуациях стала меняется. Мы постоянно следим за развитием рынка и видим, что интерес к таким моделям возрастает.

При заказе тест-драйва стартовая версия в подарок

Пожалуйста, указывайте настоящие контактные данные, программа высылается после того как наш сотрудник пообщается с вами.

Оставляя заявку, вы даете согласие на обработку ваших персональных данных.