«Предсказываем ли мы наконец будущее? да!! но, возможно, не так точно.”

Содержание:

  1. Проблема бизнеса.
  2. Источник данных/извлечение данных.
  3. Метрики оценки.
  4. Сопоставление реальной проблемы с проблемой машинного обучения
  5. Исследовательский анализ данных (EDA).
  6. Инжиниринг данных.
  7. Существующие подходы.
  8. Модели машинного обучения.
  9. Модели глубокого обучения.
  10. Эксперименты, которые не увенчались успехом.
  11. Развертывание.
  12. Будущая работа и улучшения.
  13. Использованная литература.

1. Бизнес-проблема:

1.1 Что такое прогнозирование продаж?

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

1.2 Постановка задачи.

Например, инвестирование в новые стратегии для повышения доходов от своих товаров, которые могут объяснить низкие продажи в будущем за счет рекламных акций / скидок и т. Д., Прогнозирование продаж имеет решающее значение для компаний. Таким образом, для существующих предприятий становится крайне важным сделать реалистичные прогнозы продаж на будущее.

1.3 История конкуренции.

Открытый центр прогнозирования Макридакиса (MOFC) в Университете Никосии проводит передовые исследования в области прогнозирования и предлагает корпоративное обучение прогнозированию. Он помогает предприятиям делать точные прогнозы, оценивать уровни неопределенности, предотвращать дорогостоящие ошибки и использовать оптимальные методы прогнозирования. Первые соревнования Макридакиса MOFC состоялись в 1980-х годах, и они хорошо известны.

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

1.4 Цель.

Основная цель состоит в том, чтобы точно спрогнозировать точечные прогнозы продаж различных продуктов, которые Walmart продает в США, что позволит различным точкам Walmart увеличить свои доходы.

1.5 Бизнес-цели и ограничения.

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

2. Источник данных/извлечение данных.

Данные для этой задачи можно скачать по этой ссылке.

2.1 Обзор данных.

Он использует иерархические данные о продажах, любезно предоставленные Walmart. Данные были объединены по отделам, категориям продуктов и магазинам в трех разных штатах США: Калифорнии, Техасе и Висконсине. Помимо данных временных рядов, он также содержал поясняющие факторы, такие как цены, рекламные акции, дни недели и особые события.

Проще говоря, набор данных включает в себя объем продаж 3049 товаров, разделенных на 3 категории товаров (хобби, продукты питания и товары для дома) и 7 отделов товаров, а товары продаются в десяти магазинах, расположенных в трех штатах. (Калифорния, Техас и Висконсин).

Предоставленный набор данных содержал данные о продажах за 5 лет, начиная с 29 января 2011 года по 22 апреля 2016 года.

Набор данных состоит из 4 файлов.

  1. Calendar.csv: содержит информацию о датах продажи товаров.
  • date: Дата в формате «гггг-мм-дд».
  • wm_yr_wk: идентификатор недели, к которой относится дата.
  • день недели: тип дня (суббота, воскресенье, …, пятница).
  • wday: идентификатор дня недели, начиная с субботы.
  • месяц: месяц даты.
  • год: год даты.
  • event_name_1: если дата включает событие, название этого события.
  • event_type_1: если дата включает событие, тип этого события.
  • event_name_2: если дата включает второе событие, название этого события.
  • event_type_2: если дата включает второе событие, тип этого события.
  • snap_CA, snap_TX и snap_WI: двоичная переменная (0 или 1), указывающая, разрешают ли магазины CA, TX или WI совершать покупки SNAP на исследуемую дату. 1 означает, что покупки по программе SNAP разрешены.

2. Sales_train_evaluation.csv: содержит исторические данные о ежедневных продажах по продуктам и магазинам.

  • store_id: идентификатор магазина, в котором продается товар.
  • item_id: идентификатор товара.
  • wm_yr_wk: идентификатор недели.
  • sell_price: Цена товара за данную неделю/магазин. Цена указана за неделю (средняя за семь дней). Если нет в наличии, это означает, что товар не продавался в течение исследуемой недели. Обратите внимание, что, несмотря на то, что цены постоянны на еженедельной основе, они могут меняться со временем (как на обучающем, так и на тестовом наборе).

3. Sell_prices.csv: Содержит информацию о цене товаров, проданных в магазине и на дату.

  • item_id: идентификатор товара.
  • dept_id: идентификатор отдела, которому принадлежит продукт.
  • cat_id: идентификатор категории, к которой относится товар.
  • store_id: идентификатор магазина, в котором продается товар.
  • state_id: штат, в котором находится магазин.
  • d_1, d_2, …, d_i, … d_1941: количество единиц, проданных в день i, начиная с 2011–01–29.

4. Sample_submission.csv: правильный формат отправки.

кредиты: M5-Рекомендации

3. Метрики оценки.

Конкурс M5 предоставил метрику среднеквадратичной масштабированной ошибки, но мы берем RMSE для обучения и тестирования модели.

● RMSE не обрабатывает каждую ошибку одинаково. Наиболее важным ошибкам придается больший вес.

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

4. Сопоставление реальной проблемы с проблемой машинного обучения.

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

5. Исследовательский анализ данных (EDA).

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

Итак, сначала начнем с файлов данных (.CVS), содержащих значения Nan.

Как видите, в столбцах event_name_1, event_name_2, event_type_1 и event_type_2 содержится много нулевых значений.

Какова структура общих продаж (количества) во всех штатах и ​​магазинах на ежедневной основе?

Наблюдения

● Общий объем продаж (количество проданных единиц) имел тенденцию к небольшому росту с 2011 по 2016 год.

● Каждый год картина продаж одинакова, а 1 января мы не видим продаж (может быть магазины закрыты на Новый год)

Какова структура общих продаж (дохода) во всех штатах и ​​магазинах на ежедневной основе?

Наблюдения

● Общий объем продаж (выручка) имеет тенденцию к росту с каждым годом.

● Доход и общий объем продаж (количество) по дням практически следуют тренду.

Какова структура общего объема продаж (количества) за каждый год отдельно?

Наблюдения

● Существует схожая структура общих продаж по годам и годовая сезонность.

● С 2012 по 2015 год мы наблюдаем, что продажи каждые 2 месяца имеют одинаковую картину, а также каждый год временные ряды 2012–2015 годов являются стационарными временными рядами.

Насколько изменилось процентное соотношение общего объема продаж (количества) и дохода за каждый год отдельно?

Наблюдения

● Увеличение доходов от 1% до 2% каждый год.

● Продажи (количество) увеличиваются каждый год, кроме 2014 года.

Какова месячная сезонность общего объема продаж (количества) за все годы во всех магазинах?

Наблюдения

● Март и ноябрь — месяцы с самыми высокими и самыми низкими продажами соответственно.

● Продажи упали в середине года, восстановились, а затем снова упали в конце года.

Какова месячная сезонность общего объема продаж (дохода) за все годы во всех магазинах?

Наблюдения

● Март и июнь — месяцы с наибольшим и наименьшим доходом соответственно.

● Доход и общий объем продаж (количество) по месяцам практически следуют тренду.

Насколько изменилось процентное соотношение общего объема продаж (количества) и дохода за каждый месяц отдельно?

Наблюдения

● Ежемесячные объемы продаж выше в марте и апреле.

Какова еженедельная сезонность общего объема продаж (количества) во всех магазинах?

Наблюдения

● Продажи выше по выходным и падают в течение недели, но снова увеличиваются по пятницам в начале выходных.

● Мы заметили, что потребители, как правило, делают больше покупок в выходные дни, чем в будние дни, и что общие продажи в воскресенье ниже, чем в субботу.

Какова еженедельная сезонность общего объема продаж (дохода) во всех магазинах?

Наблюдения

● Выручка выше в выходные и другие дни, это постоянно.

● Доход и общий объем продаж (количество) в зависимости от дня недели почти следуют тренду.

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

4.1 Анализ разделения штатов:

а. Общий объем продаж (количество) в каждом штате.

Наблюдения.

● Из трех штатов на Калифорнию приходится высокий процент от общего объема продаж в количественном выражении.

● Общий объем продаж (количество) в Техасе и Висконсине почти одинаков.

б. Общий объем продаж (выручка) в каждом штате.

Наблюдения.

● Из трех штатов на Калифорнию приходится высокий процент доходов.

● Доходы Техаса и Висконсина почти равны.

в. Насколько изменилось процентное соотношение общего объема продаж (количества) и дохода для каждого штата в отдельности?

Наблюдения.

● Количество продаж в Калифорнии выше, чем выручка. Но в Висконсине все наоборот.

д. Ежедневные продажи в каждом штате.

Наблюдения.

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

● Продажи почти одинаковы для штатов Техас и Висконсин.

4.2 Анализ отдела магазина:

а. Общий объем продаж (количество) в каждом магазине.

Наблюдения

● Интересно, что, несмотря на то, что на штат Калифорния приходится 43,6% от общего объема продаж, два из его магазинов по общему объему продаж находятся в четверке худших.

● В магазине CA_3 самые высокие продажи, а в магазине CA_4 самые низкие.

б. Общий объем продаж (выручка) в каждом магазине.

в. Насколько изменилось процентное соотношение общего объема продаж (количества) и выручки для каждого магазина в отдельности?

Наблюдения.

● На штат Калифорния приходится 43,6% от общего объема продаж.

д. Ежедневные продажи в каждом магазине.

Наблюдения.

● Наибольшие продажи приходятся на отдел "ЕДА_3", а самые низкие - на отдел "ХОББИ_2". Только на отдел «FOOD_3» приходится 50% продаж, а на остальные 6 отделов приходится 50%.

● Несмотря на то, что общий объем продаж в категории «УВЛЕЧЕНИЯ» намного меньше (9,3%), интересно, что в этом отделе «HOBBIES_1» количество продаж выше, чем в отделе FOODS категории FOODS_1.

4.3 Анализ разделения по категориям:

а. Общий объем продаж (количество) в каждой категории.

Наблюдения

● Наибольший процент продаж приходится на продукты питания, а наименьший – на хобби.

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

б. Общий объем продаж (доход) в каждой категории.

Наблюдения.

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

в. Насколько изменилось процентное соотношение общего объема продаж (количества) и выручки по каждой категории отдельно?

Наблюдения.

д. Ежедневные продажи в каждой категории.

Наблюдения.

● Ежедневный общий объем продаж категории продуктов питания является самым высоким и имеет тенденцию к росту (продажи растут с годами).

● Суммарные ежедневные продажи категории «Хобби» являются наименьшими и остаются почти постоянными на протяжении многих лет.

● Ежедневный общий объем продаж категории «Домоводство» также имеет тенденцию к росту (с годами объем продаж увеличивается).

4.4 Анализ отдела отдела:

а. Общий объем продаж (количество) в каждом отделе.

Наблюдения.

● FOODS_3 и Hobbies_2 имеют большее и меньшее количество продаж соответственно.

б. Общий объем продаж (выручка) в каждом отделе.

Наблюдения.

● ЕДА_3 и Хобби_2 имеют больший и меньший доход соответственно.

в. Насколько изменилось процентное соотношение общего объема продаж (количества) и выручки для каждого отдела в отдельности?

б. Ежедневные продажи в каждом отделе.

Наблюдения.

● Наибольшие продажи приходятся на отдел "ЕДА_3", а самые низкие - на отдел "ХОББИ_2". Только на отдел «FOOD_3» приходится 50% продаж, а на остальные 6 отделов приходится 50% продаж.

● Несмотря на то, что общий объем продаж в категории «УВЛЕЧЕНИЯ» намного меньше (9,3%), интересно, что в этом отделе «HOBBIES_1» количество продаж выше, чем в отделе FOODS категории FOODS_1.

4.5 Анализ разделения элементов.

а. Общий объем продаж 5 товаров сверху.

Наблюдения.

● Самые высокие продажи FOODS3. Sell_prices.csv090 приходятся на отдел FOODS.

● второй по величине объем продаж – FOODS3. Sell_prices.csv586, также из отдела FOODS.

б. Общий объем продаж 5 предметов из пуха.

Наблюдения.

● Самые низкие продажи «HOBBIES2. Sales_train_evaluation.csv119» относятся к отделу HOBBIES.

Соотношение продаж категорий продуктов и товаров.

Наблюдения.

● Все три штата имеют одинаковую долю продаж для всех трех категорий продуктов.

● Доля продаж продуктовых категорий одинакова для штатов Техас и Висконсин.

Категория продукта по сравнению с пропорцией продаж

Наблюдения.

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

● В штатах Техас и Висконсин примерно одинаковая доля продаж категории продуктов «Хобби».

Цена против спроса.

Есть много EDA, которые вы можете проверить здесь.

6. Инжиниринг данных.

Стационарные данные. Стационарные временные ряды — это ряды, свойства которых не зависят от того, на каком этапе наблюдается ряд.

⭒ Временные ряды с трендами или сезонностью не являются стационарными. Тенденция и сезонность будут влиять на значение временных рядов в разное время.

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

  1. Для d_id, state_id, store_id, cat_id, dept_id и item_id будут напрямую обозначать кодировку.

2. Примените среднее значение всех возможных комбинаций. потому что товар, магазин, категории, состояние и т. д. взаимосвязаны.

3. В EDA я обнаружил, что хотя мы не можем найти периодичность в месяцах или годах, мы можем найти ее в неделях. В этом отношении одним из методов фиксации периодичности является «запаздывание» информации. где наше целевое значение - спрос (количество).

4. Скольжение: взятие скользящего среднего и скользящего стандартного отклонения со сдвигом в 28 дней.

5. Разберитесь с пропущенными значениями.

заполните пропущенное значение средним значением.

Блокнот Feature Engineering находится здесь.

7. Существующие подходы.

Решение 1:

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

б. В этом турнире он упоминает две задачи измерения, а именно:

  • Длительные промежутки времени без продаж подряд называются прерывистыми значениями.
  • Расширенный горизонт прогнозирования: Участники должны подготовить прогнозы на 4-недельный период в дополнение к предстоящей неделе.

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

● Сезонность

● Тенденции

● Цены

д. Потеря Tweedie для обработки прерывистых значений.

Решение 2:

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

б. Собрав данные из каждого магазина (10 моделей), каждой категории магазина (30 моделей) и каждого отдела магазина, обучите модель генерировать прогнозы для серии магазинов товаров (70 моделей).

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

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

8. Модели машинного обучения.

Вариант (i): - Одна модель для всех магазинов и недель.

  • Данные были получены через 1500 дней (1500 дней) для облегчения быстрой обработки.
  • Разделите данные на Train, Test, Validation.

ⓐ Линейная регрессия.

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

● СКО = 0,00264.

Важные особенности модели линейной регрессии.

Регрессор XGBoost.

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

  • После применения настройки гиперпараметра лучшая скорость обучения = 0,0451, max_leaves = 80 и min_child_weight = 36, что дает значение RMSE 0,1637.

● СКО = 0,1637.

Важные особенности регрессорной модели XGBoost.

ⓒ Регрессор LGBM.

Это облегченная версия модели повышения градиента. Это ансамблевая модель на основе дерева.

  • После применения настройки гиперпараметра лучшая скорость обучения = 0,0355, максимальная глубина = 135 и число листьев = 54, что дает значение RMSE 0,1637.

● СКО = 0,1080.

Важные особенности модели регрессора LGBM.

ⓓ Регрессор Cat Boost.

Повышение градиента — основа Cat Boost. Чтобы сократить время прогнозирования, что имеет решающее значение в ситуациях с малой задержкой, Cat Boost использует симметричные деревья.

  • После применения настройки гиперпараметра лучшая скорость обучения = 0,0291, глубина = 4 и число листьев = 199, что дает значение RMSE 0,0471.

● СКО = 0,0471.

Важные особенности модели регрессора Cat Boost.

ⓔ Регрессор дерева решений.

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

  • После применения настройки гиперпараметра лучше всего использовать max_depth=52, min_samples_split= 25 и min_samples_leaf = 293, что дает значение RMSE 0,0080.

● СКО = 0,0080.

Важные особенности регрессорной модели дерева решений.

● Мы применяем модель для всех комбинаций.

  1. Магазин мудрой модели.
  2. Магазин, категория мудрая модель.
  3. Магазин, мудрая модель отдела.

Вариант (ii): Одна модель для каждого магазина на все недели.

Самый очевидный выбор — первый. Это влечет за собой применение одной и той же модели для прогнозирования данных по всему горизонту прогнозирования.

ЛГБМ-регрессор.

● Средний балл RMSE по всем магазинам 0,292 и 0,22 для обучения и проверки соответственно.

Регрессор CatBoost

● Средний балл RMSE по всем магазинам 0,050 и 0,02907 для обучения и проверки соответственно.

XGBoost регрессор

● Средний балл RMSE по всем магазинам 0,1218 и 0,041 для обучения и проверки соответственно.

Лучшей моделью прогнозирования в магазине является LGBM Regressor.

Ежемесячная модель магазина по категориям: -

● Средний балл RMSE по всем магазинам по категориям 0,118 и 0,021 для обучения и проверки соответственно.

Магазин, мудрый отдел ежемесячной модели.

● Средний балл RMSE по всем магазинам по отделам 0,28 и 0,16 для обучения и проверки соответственно.

Вариант (iii): Одна модель на каждую неделю.

Магазин мудрой еженедельной модели.

● Средний балл RMSE по всем магазинам еженедельно: 0,028 и 0,056 для обучения и проверки соответственно.

Магазин, недельная модель по категориям: -

● Средний балл RMSE по всем магазинам, категории еженедельно 0,0592 и 0,064 для обучения и проверки соответственно.

Магазин, Еженедельная модель отдела: -

● Средний балл RMSE по всем магазинам, отделам еженедельно 0,042 и 0,026 для обучения и проверки соответственно.

Вариант (iv): Рекурсивное моделирование.

Храните мудрую рекурсивную модель.

● Средняя оценка RMSE по всем магазинам рекурсивно 0,0892 и 0,026 для обучения и проверки соответственно.

Магазин, рекурсивная модель по категориям: -

● Средний балл RMSE по всем магазинам, категориям и неделям рекурсивно 0,098 и 0,026 для обучения и проверки соответственно.

Магазин, рекурсивная модель отдела: -

● Средний балл RMSE по всем магазинам, отделам и неделям рекурсивно 0,052 и 0,026 для обучения и проверки соответственно.

9. Модели глубокого обучения.

«Жизнь действительно проста, но мы настаиваем на том, чтобы ее усложнить» — Конфуций.

После экспериментов с этим сложным машинным обучением я решил попробовать очень простую модель глубокого обучения с несколькими слоями LSTM, Dense, Dropout.

Одна модель для всех магазинов и недель.

Модель a: - 4 слоя LSTM и 1 плотный слой.

● Оценка RMSE 0,0935 и 0,0332 для обучения и проверки соответственно.

Модель b: - 2 LSTM, 2 Conv1D и 3 плотных слоя.

● Оценка RMSE 0,192 и 0,36 для обучения и проверки соответственно.

Модель c: - 3LSTM, 2 слоя Conv1D и 5Dense.

● Оценка RMSE 0,362 и 0,302 для обучения и проверки соответственно.

10. Неудачные эксперименты.

  • Комплексная модель глубокого обучения с LSTM для каждого магазина.
  • Модель глубокого обучения для каждого магазина, модель по категориям.
  • Модель глубокого обучения для каждого магазина, модель по категориям.
  • АРИМА и друзья.

11. Развертывание.

12. Дальнейшая работа и улучшения.

● Модель ансамбля со стеком (использует прогнозы из нескольких моделей для построения новой модели, которая в дальнейшем используется для прогнозирования набора тестов).

● Используйте более сложные модели и настройку гиперпараметров.

● Используйте GRU и двунаправленный LSTM вместо LSTM.

13. Ссылки.

https://www.artefact.com/blog/sales-forecasting-in-retail-what-we-learned-from-the-m5-competition-published-in-medium-tech-blog/

https://dipanshurana.medium.com/m5-forecasting-accuracy-1b5a10218fcf

https://github.com/Mcompetitions/M5-methods

https://medium.com/thecyphy/m5-forecasting-accuracy-af6c45fb7d58

Полный проект доступен на Github. По любым вопросам относительно проекта обращайтесь ко мне в Linkedin.