Surrika

XYZ-анализ продаж по артикулам: как найти стабильные товары

XYZ-анализ по артикулам делит товары по стабильности спроса за 12 месяцев. В группу X попадают ровные продажи, в Y умеренные колебания, в Z сильные скачки. Так видно, какие артикулы держать в постоянном запасе, а какие проверять перед закупкой.

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

Как считать

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

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

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

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

Коэффициент вариации продаж по артикулам за 12 месяцев

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

WITH bounds AS (
    SELECT
        date_trunc('month', max(date)) AS last_month,
        date_trunc('month', max(date)) - INTERVAL '11 months' AS first_month
    FROM sales
),
months AS (
    SELECT unnest(generate_series(first_month, last_month, INTERVAL '1 month'))::DATE AS month
    FROM bounds
),
skus AS (
    SELECT sku, any_value(product) AS product
    FROM sales
    WHERE date >= (SELECT first_month FROM bounds)
    GROUP BY sku
),
monthly AS (
    SELECT
        s.sku,
        m.month,
        COALESCE(SUM(sales.units), 0) AS units
    FROM skus s
    CROSS JOIN months m
    LEFT JOIN sales ON sales.sku = s.sku
        AND date_trunc('month', sales.date) = m.month
    GROUP BY s.sku, m.month
),
stats AS (
    SELECT
        s.sku,
        s.product,
        AVG(m.units) AS avg_month_units,
        STDDEV_SAMP(m.units) AS stddev_units,
        CASE WHEN AVG(m.units) = 0 THEN NULL ELSE STDDEV_SAMP(m.units) / AVG(m.units) END AS cv
    FROM skus s
    JOIN monthly m ON m.sku = s.sku
    GROUP BY s.sku, s.product
)
SELECT
    sku,
    product,
    round(avg_month_units, 2) AS avg_month_units,
    round(cv, 3) AS cv,
    CASE WHEN cv <= 0.10 THEN 'X' WHEN cv <= 0.25 THEN 'Y' ELSE 'Z' END AS xyz_group
FROM stats
WHERE avg_month_units > 0
ORDER BY avg_month_units DESC
LIMIT 30

Где взять продажи по артикулам для XYZ-анализа

Берите штуки из выгрузки продаж учетной системы за последние 12 месяцев. Для сайта и маркетплейсов сверьте количество с кабинетами: на Wildberries, Ozon и Яндекс Маркете продажи видны по артикулам в отчетах о реализации. Если возвраты заметно меняют картину, вычитайте их из проданных штук одинаково для всех месяцев. Категории и названия товаров нужны только для подписи строк, расчет идет по артикулу.

Какие границы X, Y и Z использовать в XYZ-анализе по артикулам

Группы задают по коэффициенту вариации: X до 10%, Y от 10% до 25%, Z больше 25%. Границы 10 и 25 процентов условны, для разных категорий мебели их можно сдвинуть. В мебели у диванов и кухонь разная частота покупок, поэтому сравнивайте артикулы внутри одной категории. Если товар попал на границу, смотрите на сырой график продаж.

Почему сезонный артикул попадает в Z

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

Что делать с группами X, Y и Z в закупках

Артикулы X покупают ровно, поэтому держите по ним постоянный запас и не раздувайте страховой остаток. Для Y следите за остатками и сроками поставки: колебания умеренные, провал в наличии снижает выручку. Z проверяйте на сезонность, акции, новинки и разовые всплески. Если скачки случайные, сокращайте партию и заказывайте чаще.

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

Считать XYZ по выручке

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

Ставить новинки в один ряд со старыми

У товара с историей 3 месяца коэффициент нестабилен, и Z не говорит о плохом спросе. Смотрите новинки отдельно или ждите 6-12 месяцев.

Вопросы

Чем XYZ-анализ отличается от ABC-анализа?

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

Можно ли считать XYZ-анализ по категориям?

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

Почему коэффициент вариации больше 100%?

Так бывает при редком спросе, когда стандартное отклонение превышает средние продажи. Это группа Z, и причину скачков проверяют по истории продаж.

Метрики на этой странице

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

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

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

По теме

Все задачи