«Предсказываем ли мы наконец будущее? да!! но, возможно, не так точно.”
Содержание:
- Проблема бизнеса.
- Источник данных/извлечение данных.
- Метрики оценки.
- Сопоставление реальной проблемы с проблемой машинного обучения
- Исследовательский анализ данных (EDA).
- Инжиниринг данных.
- Существующие подходы.
- Модели машинного обучения.
- Модели глубокого обучения.
- Эксперименты, которые не увенчались успехом.
- Развертывание.
- Будущая работа и улучшения.
- Использованная литература.
1. Бизнес-проблема:
1.1 Что такое прогнозирование продаж?
Метод прогнозирования будущих продаж, краткосрочных или долгосрочных, с использованием данных о предыдущих продажах известен как прогнозирование продаж.
1.2 Постановка задачи.
Например, инвестирование в новые стратегии для повышения доходов от своих товаров, которые могут объяснить низкие продажи в будущем за счет рекламных акций / скидок и т. Д., Прогнозирование продаж имеет решающее значение для компаний. Таким образом, для существующих предприятий становится крайне важным сделать реалистичные прогнозы продаж на будущее.
1.3 История конкуренции.
Открытый центр прогнозирования Макридакиса (MOFC) в Университете Никосии проводит передовые исследования в области прогнозирования и предлагает корпоративное обучение прогнозированию. Он помогает предприятиям делать точные прогнозы, оценивать уровни неопределенности, предотвращать дорогостоящие ошибки и использовать оптимальные методы прогнозирования. Первые соревнования Макридакиса MOFC состоялись в 1980-х годах, и они хорошо известны.
Вы будете прогнозировать ежедневные продажи в течение предстоящих 28 дней в этом соревновании, пятой версии, используя иерархические данные о продажах от Walmart, крупнейшей компании в мире по выручке.
1.4 Цель.
Основная цель состоит в том, чтобы точно спрогнозировать точечные прогнозы продаж различных продуктов, которые Walmart продает в США, что позволит различным точкам Walmart увеличить свои доходы.
1.5 Бизнес-цели и ограничения.
- Высокая способность интерпретации, поскольку мы должны понимать решающий фактор, который способствовал хорошим прогнозам.
- Низкая задержка не требуется, потому что нам нужно прогнозировать продажи ежедневно, а не поминутно или час за часом.
2. Источник данных/извлечение данных.
Данные для этой задачи можно скачать по этой ссылке.
2.1 Обзор данных.
Он использует иерархические данные о продажах, любезно предоставленные Walmart. Данные были объединены по отделам, категориям продуктов и магазинам в трех разных штатах США: Калифорнии, Техасе и Висконсине. Помимо данных временных рядов, он также содержал поясняющие факторы, такие как цены, рекламные акции, дни недели и особые события.
Проще говоря, набор данных включает в себя объем продаж 3049 товаров, разделенных на 3 категории товаров (хобби, продукты питания и товары для дома) и 7 отделов товаров, а товары продаются в десяти магазинах, расположенных в трех штатах. (Калифорния, Техас и Висконсин).
Предоставленный набор данных содержал данные о продажах за 5 лет, начиная с 29 января 2011 года по 22 апреля 2016 года.
Набор данных состоит из 4 файлов.
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.csv
090 приходятся на отдел FOODS.
● второй по величине объем продаж – FOODS3. Sell_prices.csv
586, также из отдела FOODS.
б. Общий объем продаж 5 предметов из пуха.
Наблюдения.
● Самые низкие продажи «HOBBIES2. Sales_train_evaluation.csv
119» относятся к отделу HOBBIES.
Соотношение продаж категорий продуктов и товаров.
Наблюдения.
● Все три штата имеют одинаковую долю продаж для всех трех категорий продуктов.
● Доля продаж продуктовых категорий одинакова для штатов Техас и Висконсин.
Категория продукта по сравнению с пропорцией продаж
Наблюдения.
● На категорию продуктов питания приходится более высокий уровень продаж, а самые низкие показатели хобби во всех 3 штатах.
● В штатах Техас и Висконсин примерно одинаковая доля продаж категории продуктов «Хобби».
Цена против спроса.
Есть много EDA, которые вы можете проверить здесь.
6. Инжиниринг данных.
Стационарные данные. Стационарные временные ряды — это ряды, свойства которых не зависят от того, на каком этапе наблюдается ряд.
⭒ Временные ряды с трендами или сезонностью не являются стационарными. Тенденция и сезонность будут влиять на значение временных рядов в разное время.
Для устранения тренда данных временных рядов используются определенные методы преобразования, которые перечислены ниже.
- Для 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.
Важные особенности регрессорной модели дерева решений.
● Мы применяем модель для всех комбинаций.
- Магазин мудрой модели.
- Магазин, категория мудрая модель.
- Магазин, мудрая модель отдела.
Вариант (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://dipanshurana.medium.com/m5-forecasting-accuracy-1b5a10218fcf
● https://github.com/Mcompetitions/M5-methods
● https://medium.com/thecyphy/m5-forecasting-accuracy-af6c45fb7d58
Полный проект доступен на Github. По любым вопросам относительно проекта обращайтесь ко мне в Linkedin.