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

Основываясь на отзывах последних конкурсов прогнозирования Макридакиса, модели машинного обучения могут уменьшить ошибку прогнозирования на 20–60% по сравнению с эталонными статистическими моделями. (Конкурс M5)

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

Например, продажи косметики в электронной коммерции зависят от специальных мероприятий (рекламных акций) и от того, как вы размещаете ссылку на веб-сайте (первая страница, вторая страница,…).

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

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

SUMMARY
I. Introduction
1. Data set
2. Initial Solution using LGBM
3. Features Analysis
II. Experiment
1. Additional features
2. Results
III. Conclusion and next steps

Введение

1. Набор данных

Этот анализ будет основан на наборе данных M5 Forecasting записей продаж магазинов Walmart (Ссылка).

  • 1 913 дней для обучающего набора и 28 дней для оценочного набора.
  • 10 магазинов в 3 штатах (США)
  • 3049 уникальных товаров в 10 магазинах
  • 3 основные категории и 7 отделов (подкатегория)

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

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

2. Первоначальное решение с использованием LGBM

В качестве базовой модели мы будем использовать очень четкую и лаконичную записную книжку, которую предоставил Аншул Шарма в Kaggle. ("Ссылка")

Идея состоит в том, чтобы понять, как мы можем повысить точность модели, только добавив дополнительные функции (не затрагивая гиперпараметры и не меняя алгоритм).

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

  1. Импорт и обработка необработанных данных
  2. Исследовательский анализ данных
  3. Технические характеристики
    i) Сезонность: номер недели, день, месяц, день недели
    ii) Ценообразование: еженедельная цена на товар в каждом магазине, специальные мероприятия
    iii) Тенденции: задержки продаж (np дней), средний объем на {товар, (товар + магазин)},…
    iv) Кодировка категориальных переменных: товар, магазин, отдел, категория, состояние
  4. Обучение модели: 1 модель LightGBM на магазин

3. Особенности разработки

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

Давайте разделим функции, используемые в этой записной книжке, на разные сегменты.

-
Группа 1: транзакционные данные

# Item id
'id', 'item_id', 
# Store, Category, Department
'dept_id', 'cat_id', 'store_id', 'state_id'
# Transaction time
'd', 'wm_yr_wk', 'weekday', 'wday', 'month', 'year'
# Sales Qty, price and promotional events
'sold', 'event_name_1', 'event_type_1', 'event_name_2', 'event_type_2', 'sell_price'

events и sell_price
Оцените влияние особого события на продажи товара с продажной ценой XXX.

Как может повлиять специальное мероприятие со снижением на 20% продаж детских смесей во вторую неделю месяца?

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

-
Группа 2: отставание в продажах и среднее значение

# Sales lag n = sales quantity of day - n
'sold_lag_1', 'sold_lag_2', 'sold_lag_3', 'sold_lag_7', 'sold_lag_14', 'sold_lag_28'
# Sales average by 
'item_sold_avg', 'state_sold_avg',
'store_sold_avg', 'cat_sold_avg', 'dept_sold_avg',
# Sales by XXX and YYYY
'cat_dept_sold_avg', 'store_item_sold_avg', 'cat_item_sold_avg',
'dept_item_sold_avg', 'state_store_sold_avg',
'state_store_cat_sold_avg', 'store_cat_dept_sold_avg'

лагы
. Измеряйте сходство между неделями и месяцами (7 дней, 28 дней), чтобы зафиксировать периодичность продаж из-за того, что люди совершают покупки с такой периодичностью.

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

II. Эксперимент

Вы можете найти полный код в моем репозитории на Github: Ссылка

1. Дополнительные возможности

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

-
Период 3: скользящее среднее и скользящее среднее, применяемые к задержке

# Rolling mean on actual sales
'rolling_sold_mean', 'rolling_sold_mean_3', 'rolling_sold_mean_7',
'rolling_sold_mean_14', 'rolling_sold_mean_21', 'rolling_sold_mean_28'
# Rolling mean on lag sales
'rolling_lag_7_win_7', 'rolling_lag_7_win_28', 'rolling_lag_28_win_7', 'rolling_lag_28_win_28'

Rolling_sold_mean_n
Измерьте средние продажи за последние n дней.

Скользящее среднее иногда используется отдельно в качестве эталонной модели для статистического прогнозирования.

Код (будет добавлен в блокнот Kaggle)

Rolling_lag_n_win_p
Измерьте средние продажи окон p дней, закончившихся n дней назад.

Код (будет добавлен в блокнот Kaggle)

ИНФОРМАЦИЯ О БИЗНЕСЕ
Сезонность солнцезащитных очков

Если скользящее среднее за последние 7 дней на 35% выше, чем средние продажи за неделю до этого, это означает, что вы начали летний сезон.

-
Группа 4: тренд продаж и скользящий максимум

# Selling Trend
'selling_trend', 'item_selling_trend', 
# Rolling max
'rolling_sold_max', 'rolling_sold_max_1', 'rolling_sold_max_2', 'rolling_sold_max_7', 'rolling_sold_max_14', 'rolling_sold_max_21',
'rolling_sold_max_28'

Тенденция продаж
Измерьте разрыв между дневными продажами и средним значением.

Код (будет добавлен в блокнот Kaggle)

Rolling max
Каков максимальный объем продаж за последние n дней?

Код (будет добавлен в блокнот Kaggle)

Спойлер: эта функция существенно повлияет на вашу точность.

-
Группа 5: дефицит и магазины закрыты

# Stock-out id
'stock_out_id'
# Store closed
'store_closed'

дефицит

Объясните, что у вас нет продаж из-за проблем с наличием запасов.

Код (будет добавлен в блокнот Kaggle)

Группа 6: Цена относительно того же товара в других магазинах или других товаров в подкатегории

# Relative delta price with the same item in other stores
'delta_price_all_rel'
# Relative delta price with the previous week
'delta_price_weekn-1'
# Relative delta price with the other items of the sub-category
 'delta_price_cat_rel'

delta_price_weekn-1
Отслеживайте динамику цен по неделям.

ИНФОРМАЦИЯ О БИЗНЕСЕ
Акции для медлительных людей

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

delta_price_all_rel: Каннибализация продаж на уровне магазина
Несколько магазинов конкурируют за продажу одного и того же товара из-за разницы в ценах.

delta_price_cat_rel: Каннибализация продаж на уровне подкатегории
Несколько товаров одной и той же подкатегории конкурируют за продажи.

Код (добавляется для изменения файла price.csv)

2. Результаты

После выполнения цикла тренировок с шестью разными бакетами (с использованием одного и того же гиперпараметра с записной книжкой kaggle) мы получили следующие результаты:

ШАГ 1–2: ошибка -29% RMSE

Задержки продаж положительно влияют на точность вашей модели :.

ИНФОРМАЦИЯ О БИЗНЕСЕ
На ваши сегодняшние продажи сильно влияют продажи в предыдущие дни.

ШАГ 2–3: ошибка -118% RMSE

ИНФОРМАЦИЯ О БИЗНЕСЕ
Все три основных функции связаны с продажами за последние три дня.

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

ШАГ 3–4: ошибка -12% RMSE

Функции Rolling Max занимают лидирующие позиции среди функций.

ШАГ 4–5: ошибка -0,1% RMSE

БАМ!
Я очень расстроен, увидев, что основная потенциальная добавленная стоимость этой статьи, показывающая влияние дефицита товаров или закрытия магазина, имеет ограниченное влияние от точности модели.

ШАГ 5–6: ошибка -1,75% RMSE

Точность модели немного лучше, но мы не видим никаких добавленных функций в топ-20.

III. Заключение и дальнейшие шаги

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

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

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

Если эти бизнес-идеи не улучшают ваши прогнозы, нам нужно понять, почему.

Не стесняйтесь обращаться ко мне, я готов делиться и обмениваться информацией по темам, связанным с наукой о данных и цепочкой поставок.
Мое портфолио: https://samirsaci.com

использованная литература

[1] Прогнозирование временных рядов - EDA, FE & Modelling📈, Аншул Шарма, Link