Оптимизация доходов ритейлера с помощью ИИ для прогнозирования продаж
Опубликовано: 2022-03-11Прогнозирование — это метод, который использует исторические данные и события для построения оценок будущих тенденций, потенциальных бедствий и общего поведения любого субъекта. Прогнозирование можно использовать в качестве вероятностной поддержки для анализа решений, для оценки расходов, доходов и бюджетных планов.
Прогнозирование в бизнесе можно разделить на две отдельные категории: качественное прогнозирование и количественное прогнозирование .
- Качественное прогнозирование. Качественное прогнозирование связано с исследованием рынка и рыночными стратегиями, поэтому оно в большей степени управляется экспертами и зависит от человеческого фактора. Обычно он направлен на построение краткосрочной стратегии.
- Количественное прогнозирование. Количественное прогнозирование исключает любой человеческий фактор. Он зависит только от исторических данных, которыми располагает организация, и направлен на прогнозирование того, какими будут некоторые факторы, такие как продажи, цены и другие финансовые аспекты, в долгосрочной перспективе.
Для получения дополнительной информации вы можете взглянуть на пособие по финансовому прогнозированию Investopedia.
Оба типа прогнозирования показали многообещающие результаты и позволили улучшить бизнес для многих организаций.
Если вы хотите узнать больше о том, как прогнозирование может повлиять на рыночные решения, вам стоит начать с « Рынки прогнозов: основы, дизайн и приложения » Стефана Лукнера и др.
Одной из проблем, которую мы можем решить с помощью количественного прогнозирования, является прогнозирование спроса или прогнозирование продаж.
Подходы к прогнозированию спроса и прогнозированию продаж
Предположим, вы являетесь розничным продавцом, управляющим множеством магазинов, и в каждом магазине есть статическая система пополнения товарных запасов, основанная на человеческих решениях, основанных на определенных событиях, таких как сезоны и рыночные тенденции.
Время от времени вы сталкиваетесь с одной из этих проблем, которая может привести к двум основным проблемам:
- Продукты в избытке. Наличие значительного запаса продукта, который планируется продать в течение определенного периода времени, но не продать.
- Товары, которых нет в наличии. Иметь возможность продать товар, но не иметь возможности, потому что товара нет в наличии.
Согласно опросу 600 домохозяйств и розничных продавцов, проведенному IHL Group, розничные продавцы ежегодно теряют почти 1 триллион долларов из-за проблем с отсутствием товаров на складе.
«Согласно отчету, который был отправлен по электронной почте в Retail Dive, покупатели сталкиваются с отсутствием товаров в каждом третьем походе за покупками. В продовольственных, фармацевтических и массовых розничных магазинах они сталкиваются с отсутствующими товарами в каждой пятой поездке, в универмагах и специализированных магазинах — в каждой четвертой, а в магазинах электроники — в каждой третьей», — выяснила IHL Group.
Судя по всему, обе эти проблемы приводят к снижению выручки, потому что мы либо потеряли вероятность продажи, либо вложили больше денег в непроданные продукты, что означает наличие активов, которые не будут приносить доход в ближайшее время, чтобы компенсировать свои затраты.
Это явно наносит ущерб денежному потоку организации, и для устранения этого риска нам нужны две вещи:
- Дополнительная информация, которая поможет нам принять решение
- Команда прогнозистов, которая может осуществлять долгосрочное стратегическое планирование систем пополнения запасов.
Итак, вопрос: каковы признаки того, что вам нужно внедрить ИИ в вашей компании, чтобы помочь вам в процессе прогнозирования?
Чтобы принять это решение, вам нужны ответы экспертов на следующие вопросы:
- Сложно ли прогнозировать воронку продаж?
- Ваши прогнозы продаж неточны или недостаточно точны (даже если у вас есть исторические данные)?
- Вы страдаете от проблем с отсутствием на складе или избыточным запасом?
- Вы не можете извлекать описательные и логические выводы из имеющихся у вас данных, чтобы принимать решения и планировать?
Ответы на эти вопросы должны быть четким сигналом, который поможет вам решить, стоит ли начинать использовать ИИ в своих стратегиях прогнозирования или нет.
Как ИИ может помочь процессу прогнозирования продаж?
Во многих компаниях искусственный интеллект показал отличные результаты, превзойдя человеческие прогнозы, что позволяет быстрее принимать решения и планировать, а также разрабатывать более надежные стратегии управления рисками. Вот почему ведущие компании внедряют ИИ в свое планирование.
При решении задачи прогнозирования спроса можно использовать метод прогнозирования временных рядов для прогнозирования продаж каждого продукта, что позволяет компаниям оптимизировать пополнение запасов и минимизировать возникновение вышеупомянутых проблем. Однако во многих моделях возникают проблемы с прогнозированием на уровне отдельного продукта или категории продукта из-за отсутствия необходимых функций. Итак, вопрос: как мы можем заставить его работать и максимально использовать наши данные?
Для реальных розничных продавцов эти проблемы далеко не тривиальны. У вас либо есть более 1000 продуктов, которые вносят большую нелинейность в набор данных и многомерные зависимости, либо вам нужно заранее предупредить о количестве прогнозируемого пополнения запасов, чтобы иметь возможность производить или покупать его, или делайте все, что вам нужно, чтобы приобрести его к тому времени, когда материализуется спрос.
В этом случае классические модели, такие как ARIMA и ETS, не будут работать, и нам понадобится более надежный метод, такой как RNN и XGBoost, и поэтому нам нужно создать много функций для решения этой проблемы.
Чтобы это работало, нам нужно:
- Приобретите необходимые входные характеристики, необходимые для объяснения разнообразия и разнообразия продуктов.
- Классифицируйте наши данные, чтобы каждая категория имела одинаковое поведение временного ряда, и каждая категория рассматривалась с использованием отдельной модели.
- Обучите наши модели полученным классифицированным входным функциям.
Ради этой статьи мы возьмем XGBoost в качестве примера такой модели.
Необходимые функции в моделях прогнозирования продаж
Набор функций, необходимых для решения этой задачи, можно разделить на четыре основные группы:
- Функции, связанные со временем
- Функции, связанные с продажами
- Особенности, связанные с ценой
- Функции, связанные с акциями
Функции, связанные со временем
В отличие от глубокого обучения (рекуррентная нейронная сеть), модели машинного обучения не могут получить долгосрочные или краткосрочные зависимости во временном ряду без создания слоя ручного извлечения признаков для признака даты и времени.
Многие функции могут быть извлечены из даты, например:
- Год
- День
- Час
- Выходной или будний день (будь то будний день или выходной)
- День недели
Многие подходы просто извлекают эти временные характеристики и используют их в качестве входных данных и обучают модели, но возможны дальнейшие разработки. Как мы видим, функции (день, час, день недели) являются периодическими, что означает, что они имеют диапазон повторяющихся значений. Как модель может справиться с этим?
Короткий ответ: не может, потому что модель видит, что 00:00 находится в 23 часах от 23:00, но на самом деле это один час. Один из способов решить эту проблему — преобразовать эти функции в циклическое преобразование.
Используя концепцию синуса и косинуса или векторного представления, можно преобразовать каждый час (24 часа) в угол, а использование их синуса и косинуса значительно облегчит для модели обнаружение реальных пропорций между часами, независимо от того, периодичности.
Это устранит разрыв, возникающий в периодических временных функциях или любых периодических функциях.
В нашей статье мы будем использовать общедоступный набор данных Sample Superstore и попытаемся спрогнозировать целевые ежемесячные продажи для определенной категории продуктов.
Также мы будем использовать среду Python 3.7 со следующими библиотеками:
- NumPy
- Панды
- XGBoost
- Склеарн
Теперь я покажу вам, как создать функцию преобразования периода и проверить, была ли она полезной или нет.

def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))
После этого мы готовы проверить, улучшит ли добавленная функция производительность или нет.
X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)
Как мы видим, мы выполнили логарифмическое преобразование 1p для нашей целевой функции продаж, потому что это искаженная функция (не распределенная нормально).
Теперь мы применим регрессор XGBoost к данным.
y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837
Далее мы попробуем с нашей созданной функцией.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826
Как мы видим, потери улучшились с 0,43 RMSE до 0,33 RMSE.
Некоторые другие функции, связанные со временем, о которых вы можете подумать, в зависимости от вашей проблемы:
- Количество месяцев с момента нахождения товара в магазине
- Количество дней с момента последней продажи
Функции, связанные с продажами
Это основная основная входная функция, необходимая для прогнозирования наших продаж, так как же получить максимальную отдачу от данных о продажах? Мы можем добиться этого, используя концепцию запаздывания и автокорреляции.
Запаздывающие функции — это исторические записи о продажах продуктов. Например, если мы использовали 12-лаговую функцию для ежемесячных продаж в качестве входных данных для нашей модели для прогнозирования продаж на май 2020 года, это означает, что мы предоставим модели записи данных в период с мая 2019 года по апрель 2020 года. Это может быть очень полезно.
Кроме того, это можно интерпретировать с помощью графиков автокорреляции, чтобы проверить, насколько коррелирует целевая функция с ее запаздывающими функциями. Это также помогает выбирать только коррелированные функции среди отложенных функций, поэтому мы уменьшаем использование памяти и избыточность функций.
Вот как мы можем добавить функции задержки в наш фрейм данных:
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
Здесь я выбрал значение функции с тремя задержками для включения в наш обучающий набор. Эта функция является гиперпараметром — вы можете выбрать ее на основе графика автокорреляции или перепробовав множество значений и просто выбрав лучшее на этапе настройки.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188
Теперь среднеквадратичное отклонение улучшилось до 0,28 благодаря использованию функций задержки и циклических преобразований.
Некоторые дополнительные функции, связанные с продажами, которые вы можете добавить:
- Доля проданных товаров (доля проданных товаров в общем объеме продаж в магазине)
- Частота распродаж для категории товара
- Добавление концепции старшинства
Старшинство — это понятие, введенное для присвоения уровня старшинства новым товарам в магазине:
- Старшинство 0: товары новые для компании
- Старшинство 1: товары, которые никогда не продавались в этом магазине, но продаются в других магазинах компании.
- Старшинство 2: предметы, которые ранее продавались в этом магазине.
Особенности, связанные с ценой
Простой аргумент заключается в том, что одной из непосредственных причин роста и снижения продаж являются цены и рекламные акции. Цена — один из лучших способов различить разные категории, подкатегории и суперкатегории товаров.
Например, предполагая, что каждому продукту назначена категория и подкатегория, можно создать следующие характеристики цены:
- (Среднее, Максимальное, Минимальное, Медиана) цены по категориям
- (Среднее, Максимальное, Минимальное, Медиана) цены по подкатегории
- Сравнения между этими статистическими данными, такие как разница между каждой статистикой как в категории, так и в подкатегории.
Эту агрегацию можно выполнять несколько раз, используя множество группировок по темам (при условии, что мы стремимся прогнозировать ежемесячный спрос), например:
- Ежемесячно, Магазин, категория
- Ежемесячно, Магазин, подкатегория
- Ежемесячно, Магазин, Товар, категория
- Ежемесячно, Магазин, Товар, подкатегория
Кроме того, можно добавить больше функций, кроме ежемесячной группы, для изучения поведения цен в целом.
Особенности, связанные с акциями
Это не так распространено среди розничных продавцов и специалистов по прогнозированию продаж, но оно имеет большое значение в моделях прогнозирования продаж. Наборы данных о запасах в основном содержат данные о запасах каждого продукта, ежедневно в каждом магазине. Исходя из этого, мы можем объединить его с данными о продажах, чтобы получить месячный коэффициент оборота для каждого продукта. Этот коэффициент показывает, насколько быстро запас продукта полностью распродается, и у него есть два основных преимущества:
- Это может помочь модели прогнозировать продажи на основе текущего уровня запасов.
- Это может помочь нам использовать это значение для группировки продуктов в медленно-, средне- и быстроходные. Эта кластеризация поможет нам в принятии решений и моделировании.
Для этого вам нужны ежедневные данные о запасах для каждого продукта, а также данные о продажах, а затем вы можете рассчитать коэффициент оборачиваемости запасов следующим образом:
Подсказка: эти агрегации выполняются на основе временного диапазона. Например, если мы работаем над прогнозированием ежемесячных продаж, то ITO будет рассчитываться как общий объем продаж за последний месяц по сравнению со средней стоимостью запасов за тот же месяц.
Прогнозирование продаж может превратить данные в возможности
Таким образом, прогнозирование продаж может помочь фирмам увеличить доходы и получить прибыль при условии, что у них есть правильные конвейеры данных и используются правильные методы разработки функций. Эта статья была попыткой показать, что все виды данных могут быть полезны для решения этой проблемы.
Каждая компания должна выяснить, нужен ли ИИ для ее задач прогнозирования, и если это так, ей потребуются опытные инженеры по ИИ и советы инженеров по машинному обучению для создания собственной системы прогнозирования продаж.
Если вы являетесь компанией/продавцом, готовым применить этот метод прогнозирования продаж, начните со сбора всех возможных данных, особенно о ежедневных продажах, ежедневных запасах и ежедневных транзакциях.
Получив эти данные, вы можете использовать их для увеличения своих доходов и оптимизации стратегий пополнения запасов, что позволит вашему бизнесу получать максимально возможную прибыль с использованием доступных ресурсов, как показано в нескольких приведенных выше примерах, а также в методах прогнозирования продаж, используемых ведущими ритейлерами. .
Использованная литература:
Набор данных
Дополнительная литература по финансовому прогнозированию