Данная публикация — это реальный кейс, в котором мы расскажем, как найти товары и категории с большими колебаниями продаж, и как колебания продаж влияют на поведение клиентов.
Производя анализ данных для торговой сети, мы столкнулись с проблемой: при почти равных количествах продаж в день в двух магазинах сети, оборот в одном магазине «Shop1» увеличивался, а в магазине «Shop2» — снижался.
Предположили, что в магазин «Shop2» не завозят достаточное количество ключевых категорий товаров (товаров, с высокой частотой вхождения в чеки). Наша задача заключалась в том, чтобы найти такие категории.
Потом посчитали коэффициенты вариации (V), для каждой товарной группы в обоих магазинах:
V=std/avg, где
std – среднее квадратичное отклонение по продажах за данный период;
avg – среднее арифметическое по количеству продаж за данный период.
Коэффициент показывает колебания продаж.
Чем меньше коэффициент — тем меньше разброс в количестве проданных товаров, тем плавнее (стабильнее) выглядит график продаж за период.
Чем выше значение коэффициента – тем нестабильнее продажи и на графике резко выделяются колебания и провалы в продажах.
Посчитали коэффициенты вариации по продажах товаров всех категорий для двух магазинов за год. Но такой способ сравнительного анализа оказался неэффективным, так как продажи сезонных категорий товаров, сильно зависят от сезона(получился классический XYZ анализ). Нас же интересуют продажи категорий товаров, спрос на которые влияет на оборот вне зависимости от сезона.
Затем мы провели сравнительный анализ колебания продаж в двух магазинах за последний месяц (в данном примере Сентябрь 2014г). И выявили для магазина “Shop2” наиболее проблемные категории товаров:
Наше предположение, что в магазин завозят недостаточное количество товаров их этих категорий, оказалось верным.
Как видно из таблицы, при примерно равных средних продажах за месяц, в магазине “Shop2” очень большое среднеквадратичное отклонение по продажах (std), а соответственно высокий показатель коэффициента колебания продаж.
Это значит, что в магазине были дни, когда товаров из ключевых категорий либо не было на полках, либо было недостаточное их количество.
Детальнее рассмотрим категорию «Молочные изделия», так как продажи этой категории составляют большой процент от общего оборота. На графиках ниже отображена динамика продаж категории “Молочные изделия” по количеству проданных единиц за каждый день периода.
Для магазина «Shop1» коэффициент вариации продаж этой категории за месяц составляет 0,09 или 9,0% Такие продажи можно назвать однородными, так как колебания небольшие. Обычно, в FCMG допустимый коэффициент колебания продаж составляет 0,2 (20%) для категорий товаров, которые формируют основу покупательской корзины.
Для магазина «Shop2» коэффициент вариации составляет 0,36 или 36,0%
Такие резкие колебания в продажах влияют не только на оборот, но и на поведение покупателя. Всякий раз, когда покупатель не находит нужный ему товар, это негативно сказывается на его лояльности, и как следствие может привести к потере постоянных покупателей. Поэтому каждый последующий провал в продажах будет глубже и выход из него будет длительнее, чем из предыдущего. Кроме того, каждый раз, когда покупатель не нашел в магазине ключевой товар, за которым он пришел в магазин, вероятность покупки других товаров, интересных для него, падает.
Для определения возможных потерь в продажах взаимосвязанных категорий товаров, рассмотрим ключевую категорию товаров “Молочные изделия” в магазине “Shop2”, используя ассоциативные правила. При помощи алгоритма APRIORI выявляем все парные взаимосвязи с этой категорией. В таблице отображены все сопутствующие категории товаров, которые покупаются с ключевой.
Показатель “Достоверность” в таблице означает, что потребители, покупающие товар из категории “Молочные изделия”
— в 34% случаев покупают товар из категории “Пром. товары”;
— в 41% случаев — покупают товар из категории “Кондитерские изделия” и т.д.
Например: покупатель 3-4 раза в неделю покупает молоко или кефир в ближайшем к его дому супермаркете. Зачастую при этом он покупает печенье и свежий хлеб, а также пакет на кассе. Первые несколько раз не найдя на полках нужных ему молочных продуктов, покупатель, возможно, будет продолжать покупать хлеб и кондитерские изделия в этом магазине. Но со временем предпочтет другой супермаркет, даже если он будет не так близко расположен.
Ритейлерам с большими колебаниями продаж весьма трудно удержать постоянных покупателей, и тем более привлекать новых. Таким образом, магазин теряет в обороте не только из-за отсутствия ключевых товаров, но и значительно снижается покупка сопутствующих категорий. Решить эту проблему можно так:
-ежедневный анализ данных;
-выявление ключевых товаров и отслеживание их коэффициента вариации;
-своевременное реагирование на изменения в динамике продаж;
-использование ассоциативных правил для выявления сопутствующих товаров для повышения доходности.
Это очень простой кейс, но с такой проблемой мы сталкиваемся в своей работе буквально каждый день. Даже большие ритейлеры не всегда своевременно реагируют на отсутствие товара в магазине.
Я хочу поделится реальным примером анализа данных на основе продуктового магазина. Эта статья о том, как выявить потери в продажах. Потери в продажах — это дни, когда товар не продавался, или было продано аномально низкое количество единиц товара.
Зачастую потери в продажах случаются из-за недостаточного количества заказанного товара. Также часто товар, имеющийся на складе, не выставляется на полки. Ежедневный анализ данных помогает своевременно обнаружить такой «провал» в продажах. Далее, устраняем проблему — контролируем работу отдела закупок, оптимизируем поставки, контролируем работу торгового персонала.
Как это работает?
Рассчитывать потери в продажах я буду для товаров, которые не подпадают под такие условия:
1. Если ежедневно продается меньше 5 единиц товара.
2. Если количество дней с нулевыми продажами составляет больше чем 30% за период.
ШАГ 1
1. Считаем среднеарифметическое количество проданных единиц для каждого товара avg:
2. Считаем среднее квадратичное отклонение (std) для каждого товара:
a — количество проданных единиц товара в каждый день периода
n — количество дней в периоде
Вероятность того, что продажи товара в истории продаж, при нормальном ходе событий, будут меньше чем средние продажи этого товара минус среднеквадратичное отклонение по продажах товара умноженные на 1,5, равнa 6,68%.
ШАГ 2
Для определения убыточного дня, используем два критерия:
— Количество проданного товара равно нулю.
ИЛИ
— Количество проданного товара аномально низкое qty < avg – (std * 1.5)
qty — количество проданных единиц товара;
avg — среднее арифметическое продаж для этого товара;
std — среднее квадратичное отклонение по продажах для этого товара.
ШАГ 3
Подсчитываем количество недопроданного товара для каждого дня с аномально низкими продажами: lost_qty = avg – qty
lost_qty – количество недопроданного товара за один убыточный день;
avg — среднее арифметическое продаж для этого товара;
qty — количество проданных единиц товара за один убыточный день.
ШАГ 4
Окончательная формула расчета потерь в продажах за выбранный период (месяц) выглядит так: lost_sales = sum(lost_qty) — сумма количественных потерь по всем дням с аномально низкими и нулевыми продажами за выбранный период.
Для подсчета потерь по обороту, полученное количество «недопроданных» (или потерянных) товаров умножаем на среднюю цену этого товара. Произведя анализ по каждому товару в отдельности, можно отследить, сколько магазин потерял в обороте за период.
Для магазина с 15 000 товаров (SKU) ущерб может составлять в среднем 40-80 тыс.грн. в месяц.
Анализ потерь в продажах на реальном примере.
Производим вычисления для товара «Хлеб Тостерный» за период с 01.01.2013г. по 31.01.2013г.:
Подставляем в формулу avg – (std * 1.5) полученные данные: 36 – (20,71,5)=~5. Это значит, что если продажи составляют меньше 5шт. в день (qty<5), то этот день «убыточный».
ШАГ 3
Произведя анализ данных за месяц, получаем 4 потерянных дня:
20.01 – день с продажей 1шт. (qty=1). Для подсчета потерь в этот день используем формулу lost_qty = avg – qty. lost_qty = 36-1=35шт.
11.01; 13.01; 19.01 – дни с нулевыми продажами (qty=0). lost_qty = avg – 0. lost_qty=36–0=36шт.
ШАГ 4
Подсчитаем суммарное количество потерь в продаже за период:
lost_sales = sum(lost_qty) lost_sales = 35 + (3 * 36) = 143шт.
Это и есть то количество товара, которое магазин мог продать, но по тем или иным причинам товара не было на полках. При средней цене на «Хлеб Тостерный» 3,83 получаем потери в обороте – 548,50 грн.
Такие несложные математические вычисления позволяют производить ежедневный анализ и своевременно реагировать на изменения в динамике продаж.
Это также удобный инструмент контроля работы персонала и увеличения доходности магазина без дополнительных вложений.
Мне, как автору этих публикаций, весьма льстит Ваш перепост с Хабра :) Но не будете ли Вы так любезны разместить вначале текста, ну или как Вам удобно, линк на наш сайт http://datawiz.io
Премного благодарна!
З.Ы. можете у нас в блоге полазить и перепостить, если что интересное для себя найдете:)
OlegON:
Поправил ссылку в этом сообщении, надеюсь, этого будет достаточно.
И - сама статья
==================
Если вы работаете в сфере торговли, то наверняка задача анализа корзины покупателя (Shopping Basket Analysis) будет вам интересна. Говоря простыми словами, данная задача сводится к тому, чтобы определить какие товары чаще всего покупаются вместе с другими товарами. Обладая этой информацией можно без труда увеличить объемы продаж, сделав выкладку товара в соответствии с результатами анализа, или реализовать систему рекомендаций покупателю при продаже товара.
Для решения задачи нам потребуется следующий инструментарий:
Microsoft Excel (в моем случае Microsoft Office 2013 Standard 2013).
Microsoft SQL Server (в моем случае Microsoft SQL Server 2014 Standard Edition).
Так же для проведения анализа нам потребуются данные о продажах. Предварительно я получил с помощью отчета в OLTP-системе следующую выборку (см. рис. 1).
Рис. 1.
В выборке присутствуют:
Ссылка на документ (поле Doc).
Код товара (поле Product).
Количество проданного товара (поле Quantity).
Сумма проданного товара (поле Amount).
Перед тем как приступить к анализу корзины, нам потребуется скачать бесплатный плагин для Excel, который называется Data Mining Add-ins for Excel. После установки плагина в главном меню Excel появится пункт DATA MINING (см. рис. 2).
Рис. 2.
Сам анализ выполняется на сервере службой SQL Server Analysis Services, поэтому необходимо нажать кнопку в панели инструментов в группе Connections (выделено на рис. 2 красной стрелочкой) и установить связь с сервером Analysis Services. Первоначально там будет написано «No connection», нажмите на эту кнопку и укажите параметры подключения. После этого нажмите кнопочку «Trace» и снимите флажок «Use session models» (см. рис. 3).
Рис. 3.
Теперь все готово для анализа. Переходим в Excel, нажимаем Ctrl+A чтобы выделить таблицу, переходим на вкладку «Вставка» и нажимаем на кнопку «Таблица» (см. рис. 4).
Рис. 4.
После этого увидим следующую картину (см. рис. 5).
Рис. 5.
Теперь нажимаем на кнопку «Shopping Basket Analysis». (Обратите внимание на соседние кнопки, которые позволяют проводить другого рода анализ данных, например, «Определение категорий» (Detecting Categories), «Прогноз» (Forecast) и другие, но это тема для отдельных статей.) В открывшемся окне заполняем параметры для анализа. В качестве транзакции (Transaction ID) выбираем поле Doc, Item — Product, Item Value — Quantity. Нажимаем кнопку «Run» (см. рис. 6).
Рис. 6.
Во время расчета программа будет показывать такое окошко (см. рис. 7).
Рис. 7.
После того, как расчет будет закончен, в книгу Excel будет автоматически добавлено два новых листа:
Shopping Basket Bundled Items (Товары которые покупаются вместе).
Shopping Basket Recommendations (Рекомендации для покупки).
Рассмотрим первую полученную табличку «Shopping Basket Bundled Items». В ней мы видим товары, которые покупают вместе, отсортированные по общему количеству продаж (см. рис. 8).
Рис. 8.
И вторая таблица «Shopping Basket Recommendations». В ней мы видим рекомендации следующего типа — купил товар «Selected Item», рекомендуем купить товар «Recommendation». Данные отсортированы по количеству совместных продаж (см. рис. 9).
Рис. 9.
На этом все. Как видите, анализ корзины покупателя делается довольно просто.
Теперь вернемся к вопросу как можно использовать полученные данные. Я лично предложил своему бизнесу следующее:
Проверить, соответствует ли выкладка товара в розничной сети данным анализа и, в случае необходимости, поменять выкладку.
Доработать автоматизированную систему сбора заказов покупателей в оптовых продажа таким образом, чтобы при создании предварительного заказа торговому представителю показывалась информация о рекомендуемом дополнении заказа.
Если в течение следующего квартала мои инновации принесут прирост продаж, будет повод попросить премию :)
Надеюсь данная статья будет полезной и вам. Спасибо за прочтение.
====================================
Исходные данные - магазин стройматериалов, "горизонт" просчёта - год по кварталам.
Взяты из коэффициенты X (отклонения до 10%), Y (отклонения от 10 до 25%), Z (отклонения свыше 25%).
Всего за год было продано чуть более 10'000 разных наименований товаров (кодов, артикулов).
Как результат - к X относится 0,48% проданных наименований, к Y - 3,55%, а к Z, соответственно - 95,97%
Что-то мне подсказывает, что эти цифры ... не совсем корректны.
Возможно - малый квант просчёта (надо брать полгода?), возможно - надо всё же смотреть на другие значения коэффициентов отклонений?
Да и при ABC-анализе прибыли за тот же период (при A - то, что даёт до 80% прибыли, B - ещё 15 и C - оставшиеся 5) тоже какое-то странное соотношение получается - A = 32% проданных наименований, B = 25%, C = 43%.
Изменил ABC c 80/15/5 на 70/20/10 - тоже не совсем результат - A = 23% проданных наименований, B = 23%, C = 54%.
В чём неправ? Или слишком "разношёрстный ассортимент"?
Есть мысли?
Основная товарная группа - лаки, краски, сыпучка.
Так же какое-то количество сопутки (шпатели, валики); электрика - лампочки, удлинители, выключатили и т.п.; клеёнки; ящики для инструментов; инструменты - молотки, отвёртки, пассатижи и т.п.; метизы; обои;
Три месяца назад, в связи с объединением отделов - добавилась сантехника.
Да, смотрел периоды - 2014 - 3-й квартал, 2014 - 4-й квартал; 2015 - 1-й квартал; 2015 - 2-й квартал (объединение пошло с 2015/06, думаю, большого влияния оказать не должно).
На самом деле вопрос был, скорее, такой - а какие коэффициенты для X,Y,Z применяют на практике? А какие периоды в "схожих областях" смотрят/считают для XYZ-анализа?
Да я хотел ровными кварталами пройтись....
Через недельку попробую сделать выборку "поглубже" - т.е. поиграюсь с продолжительностью "базового периода" (сейчас - квартал, надо будет попробовать 2 месяца, 4 месяца и 6 месяцев), и с количеством "базовых периодов" - от 2 до 8.
Я впервые занимаюсь просчётом XYZ, отсюда и все вопросы.
В "методичках" встречал информацию, что если берут маленькую (для данных типов товаров) продолжительность "базового периода" - то почти всё попадает в Z, и надо, мол, увеличивать.
Но в той же методичке был приведён пример, если не ошибаюсь, для стройматериалов, и там - да, при месяце - всё в Z, при квартале - нормальное распределение.
А вот что является "нормальным распределением" - не было сказано