Авторы: Сучета Джавалкар, Джон Боуман

Перед командой SMART Forecasting в Walmart Labs стоит задача еженедельно составлять прогнозы спроса на более чем 70 миллионов комбинаций магазинов и товаров! Например, сколько имбиря каждого вида необходимо отправлять в каждый магазин Walmart в США каждую неделю в течение следующих 52 недель с целью улучшения запасов и сокращения пищевых отходов.

Наша стратегия алгоритма заключалась в создании набора моделей машинного обучения и их масштабном развертывании для создания индивидуальных решений для (о, как много!) Комбинаций магазин-товар-неделя. Случайные леса будут частью этого набора.

Мы прошли традиционный рабочий процесс разработки моделей: обнаружение данных, определение драйверов спроса, разработку функций, обучение, перекрестную проверку и тестирование.

Разработка функций и проверка концепции

Входные данные модели взяты из опыта предметной области и включают:

  • Характеристики уровня магазина, такие как географическое положение, размер магазина, количество дней с момента открытия магазина.
  • Функции даты, такие как месяц и день недели
  • Особенности событий, таких как Рождество, День Благодарения и т. Д.
  • Функции Uplift, разработанные в рамках Программы дополнительной диетической помощи (SNAP) для семей с низкими доходами
  • Характеристики отставания, такие как средние продажи за последние две недели.

Мы разработали доказательство концепции для бананов, которые являются одним из самых быстрых продуктов Walmart, и оценили симметричную среднюю абсолютную процентную ошибку в качестве показателя точности нашего прогноза. Мы обнаружили, что функции SNAP являются одними из самых важных для бананов.

Затем мы посмотрели на результаты для

  • яблоки
  • упакованные салаты
  • запасные ребра и задние ребра

Каждая из трех категорий имеет уникальные проблемы для прогнозирования спроса и, как правило, является хорошими тестами для любой модели, входящей в набор алгоритмов. Random Forests превзошел существующие Gradient Boosting Machine и модель пространства состояний для яблок, что указывает на жизнеспособное решение с крупномасштабным влиянием на бизнес.

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

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

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

Вопросы исследования (предупреждение о плохой игре слов!)

Мы оценили три варианта обхода блокиратора усыновления:

Первый заключался в том, чтобы посмотреть, можем ли мы сократить количество функций и броситься в кроличью нору настройки гиперпараметров. Оказывается, есть классная газета С. Бернар. L. Heutte и S. Adam , в котором содержится много ценных идей о настройке количества функций, выбранных на каждом узле. Мы выбрали последовательность Соболя по многомерным гиперпараметрам вместо поиска по сетке с многообещающими ранними результатами. Настройка гиперпараметров - медленный процесс. Настройка гиперпараметров в масштабе Walmart - это очень медленный процесс.

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

Третье решение - вариант высокопроизводительных вычислений. Python хранит всю потенциально полезную информацию в своем файле модели. Файл минимальной модели можно создать, проанализировав объект модели перед его записью, сохранив только соответствующие данные. Мы также можем хранить поля, используя представление минимального размера, например пороги, значения как числа с плавающей запятой (половина размера двойных), идентификаторы функций как короткие целые числа (половина размера целых чисел; идентификаторы узлов как целые числа. Мы использовали многопоточное сжатие zstd вместо gzip сжатие (везде!)

Мы протестировали решение HPC и обнаружили улучшение на порядок. Конкретно для манго размер модели увеличился с 12,58 ГБ в Python до 1,02 ГБ в C ++; а время подсчета очков увеличилось с 30 минут до 27 секунд.

Пауза для спокойного размышления.

Outlook

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

Спасибо Джону Боумену за техническое руководство, работу с HPC; Ритеш Агарвал за работу с HPC; Амиру Мотаи за техническую обратную связь; Антон Бубна-Литич за работу по проектированию функций; Абхишеку Кумару за техническую поддержку машинного обучения; и Abhinav Prateek за поддержку продукта.

Имею докторскую степень. по экспериментальной ядерной физике из Колледжа Уильяма и Мэри, был научным сотрудником в Университете Дьюка и Физическом факультете Университета Санта-Клары, где я смоделировал петабайты данных рассеяния, чтобы понять структуру крошечных строительных блоков известная вселенная. Я научный сотрудник Insight Data Science, ученый из Аспена, и мне нравится работать над масштабным машинным обучением!