Surrika

Сезонность продаж по категориям: как найти пики по месяцам

Сезонность по категориям видна, когда выручку каждого месяца делите на средний месяц той же категории. Получается индекс: 1.30 значит месяц на 30 процентов выше среднего, 0.70 значит на 30 процентов ниже. Так диваны и освещение сравниваются на одном графике, хотя в рублях они различаются в разы.

Продажи и ассортимент

Как считать

  1. Берем продажи за последние 12 месяцев от последней даты в данных и считаем чистую выручку как выручку минус возвраты.
  2. Складываем чистую выручку по месяцам и категориям.
  3. Для каждой категории находим средний месяц: делим ее выручку за год на 12.
  4. Делим выручку каждого месяца на средний месяц этой же категории и получаем индекс сезонности.
  5. Выводим индексы по месяцам и категориям одной таблицей и строим линии на одном графике.

Расчет на выгрузках магазина

Пример посчитан на выгрузках вымышленного мебельного магазина: продажи сайта и трех маркетплейсов, реклама, сделки CRM и остатки за 2024-2025 годы.

В какие месяцы каждая категория мебели продается лучше своего среднего и как посчитать это по выгрузке продаж?

Индекс сезонности выручки по категориям мебели по месяцам

SQL, по которому посчитано

WITH monthly AS (
  SELECT
    date_trunc('month', date) AS month,
    category,
    sum(revenue - returned_revenue) AS net_revenue
  FROM sales
  WHERE date > (SELECT max(date) FROM sales) - INTERVAL 12 MONTH
  GROUP BY 1, 2
),
category_avg AS (
  SELECT
    category,
    avg(net_revenue) AS avg_revenue
  FROM monthly
  GROUP BY category
),
indexed AS (
  SELECT
    m.month,
    m.category,
    m.net_revenue / a.avg_revenue AS season_index
  FROM monthly m
  JOIN category_avg a ON a.category = m.category
)
SELECT
  month,
  round(max(CASE WHEN category = 'Диваны' THEN season_index END), 2) AS divany,
  round(max(CASE WHEN category = 'Кровати' THEN season_index END), 2) AS krovati,
  round(max(CASE WHEN category = 'Кухни' THEN season_index END), 2) AS kuhni,
  round(max(CASE WHEN category = 'Шкафы' THEN season_index END), 2) AS shkafy,
  round(max(CASE WHEN category = 'Освещение' THEN season_index END), 2) AS osveshchenie
FROM indexed
GROUP BY month
ORDER BY month

Откуда берутся цифры для сезонности

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

Как считается индекс сезонности по категориям

Чистая выручка складывается по месяцам и категориям за последние 12 месяцев данных, окно считается от последней даты в продажах. Для каждой категории находится средний месяц: вся годовая выручка категории делится на 12. Индекс сезонности это выручка конкретного месяца, поделенная на средний месяц этой категории. Средний месяц у диванов и у освещения свой, поэтому категории не мешают друг другу. Значение 1.0 означает ровный месяц без всплеска и без провала.

Как читать график по месяцам и категориям

На графике пять линий, по одной на категорию, и 12 точек по месяцам. Линия выше 1 показывает месяцы, когда категория продается лучше своего среднего. Пропуск в линии значит, что в этом месяце у категории не было продаж. Сравнивайте линии по высоте пика и по его месяцу: у диванов и кухонь пики часто приходятся на разные месяцы. Если у категории весь год держится около 1.0, спрос ровный и календарь на нее почти не влияет.

Что делать с выводом по сезонности

Пиковые месяцы категории переносите в план закупок и в остатки на складе: товар должен быть на складе к первому пиковому месяцу. Рекламный бюджет на категорию поднимайте за месяц до пика и снижайте в месяцы с индексом ниже 0.8. План продаж по месяцам и каналам сверяйте с индексом: ровный рост каждый месяц расходится с реальной кривой спроса. Для категорий с индексом около 1.0 держите рекламу и запас ровными весь год. Отдельно проверьте категории, где пик приходится на месяц с низким трафиком на сайте: там помогает сдвиг рекламы на маркетплейсы.

Частые ошибки

Сравнение категорий в рублях

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

Короткое окно расчета

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

Выручка без учета возвратов

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

Один канал вместо всех

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

Вопросы

За какой период считать сезонность продаж?

За 12 месяцев от последней даты в данных. В окно попадает по одному разу каждый месяц, и средний месяц не смещается в сторону крупного сезона.

Почему индекс сезонности выражают долей?

Доля удобна для сравнения: 1.30 это 30 процентов сверх среднего месяца, 0.70 это 30 процентов ниже. В расчете результат округляется до двух знаков после запятой.

Как найти пик продаж по категории?

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

Что делать с категорией, у которой индекс ровный весь год?

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

Можно ли считать сезонность по штукам?

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

Посчитайте это на своих выгрузках

Бросьте выгрузки на доску Surrika и задайте вопрос обычными словами. Ответ придет графиком, а под ним будет SQL, по которому он посчитан.

14 дней бесплатно, карта не нужна.

По теме

Все задачи