Surrika

Как посчитать корреляцию цены и продаж по артикулам

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

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

Как считать

  1. Соберите продажи по артикулам и переведите их в месячные точки.
  2. Для каждого артикула и месяца посчитайте выручку после скидок и возвратов и число проданных штук без возвратов.
  3. Среднюю цену получите делением чистой выручки на чистое число штук.
  4. Посчитайте линейную корреляцию между средней ценой и числом штук по месяцам одного артикула.
  5. Оставьте артикулы, где есть не меньше 6 месяцев с разными ценами и продажами, и сравните знак коэффициента.

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

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

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

Корреляция цены и продаж по артикулам

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

WITH bounds AS (
    SELECT
        date_trunc('month', max(date)) - INTERVAL '11 months' AS start_date,
        date_trunc('month', max(date)) + INTERVAL '1 month' AS end_date
    FROM sales
),
monthly AS (
    SELECT
        s.sku,
        s.product,
        date_trunc('month', s.date) AS month,
        sum(s.revenue - s.returned_revenue) AS net_revenue,
        sum(s.units - s.returned_units) AS net_units
    FROM sales s
    CROSS JOIN bounds b
    WHERE s.date >= b.start_date AND s.date < b.end_date
    GROUP BY s.sku, s.product, date_trunc('month', s.date)
    HAVING sum(s.units - s.returned_units) > 0
),
priced AS (
    SELECT
        sku,
        product,
        month,
        net_revenue / net_units AS avg_price,
        net_units
    FROM monthly
),
ranked AS (
    SELECT
        sku,
        product,
        count(*) AS months,
        corr(avg_price, net_units) AS corr_price_units
    FROM priced
    GROUP BY sku, product
    HAVING count(*) >= 6
       AND count(DISTINCT avg_price) > 1
       AND count(DISTINCT net_units) > 1
)
SELECT
    sku,
    product,
    months,
    round(corr_price_units, 3) AS corr_price_units
FROM ranked
WHERE corr_price_units IS NOT NULL
ORDER BY abs(corr_price_units) DESC, months DESC, sku
LIMIT 30

Где взять цену и продажи для корреляции цены и продаж

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

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

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

Как читать коэффициент корреляции цены и продаж

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

Что делать с корреляцией цены и продаж по артикулам

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

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

Считать корреляцию цены с выручкой

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

Смешивать каналы продаж

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

Принимать месяцы без продаж за нулевой спрос

Ноль продаж часто означает отсутствие остатка или выключенную карточку. Падением спроса его считать нельзя. Уберите такие месяцы из расчета или проверьте остатки.

Вопросы

Можно ли использовать корреляцию цены и продаж для прогноза?

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

Что делать, если у артикула мало продаж?

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

Нужно ли убирать выбросы перед расчетом корреляции цены и продаж?

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

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

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

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

По теме

Все задачи