XYZ-анализ в Excel: полное руководство по расчету с формулами и примерами

XYZ-анализ — это статистический метод классификации товаров по стабильности спроса, который помогает оптимизировать запасы, снизить издержки на хранение и улучшить логистику. В отличие от ABC-анализа (который ранжирует товары по доле в общем объеме продаж), XYZ фокусируется на вариативности потребления. Если вы работаете с большими массивами данных в Excel, умение автоматизировать этот анализ сэкономит часы ручной работы.

Многие ошибочно считают, что XYZ-анализ требует специализированного ПО типа 1C или SAP. На практике достаточно стандартных функций Excel — от СТАНДОТКЛОН до условного форматирования. В этой статье мы разберем три метода расчета (ручной, полуавтоматический и полностью автоматизированный), покажем, как интерпретировать результаты, и предостережем от типичных ошибок, которые искажают итоговую классификацию на 30-40%.

XYZ-анализ особенно востребован в сферах, где спрос подвержен сезонным колебаниям: розничная торговля, фармацевтика, производство. Например, в аптечных сетях лекарства от аллергии могут относиться к группе X (стабильный спрос круглый год), а противогриппозные препараты — к группе Z (резкие пики в осенне-зимний период). Без правильной классификации риски как перезаказа, так и дефицита вырастают в разы.

📊 Для какой сферы вам нужен XYZ-анализ?
Логистика и склад
Розничная торговля
Производство
Фармацевтика
Другое

Что такое XYZ-анализ и зачем он нужен

XYZ-анализ делит товары на три категории по коэффициенту вариации (отношение стандартного отклонения к среднему значению спроса):

  • 🔹 Группа X — стабильный спрос (коэффициент вариации < 10%). Примеры: хлеб в супермаркете, канцтовары для офиса.
  • 🔸 Группа Y — умеренные колебания (10-25%). Примеры: одежда среднего ценового сегмента, бытовая химия.
  • 🔶 Группа Z — высоковолатильный спрос (>25%). Примеры: новогодние товары, сезонная обувь.

Основная цель анализа — оптимизация запасов:

  1. Для группы X достаточно минимального страхового запаса (например, 5-7 дней продаж).
  2. Группа Y требует гибкой системы пополнения с учетом трендов.
  3. Группа Z часто нуждается в just-in-time поставках или контрактах с поставщиками на возврат нереализованного.

Без XYZ-анализа компании теряют до 15-20% прибыли на избыточных запасах группы Z или упущенных продажах группы X из-за дефицита. Например, сеть магазинов электроники, не классифицировавшая смартфоны по XYZ, ежеквартально списывала на утилизацию товары на 300+ тыс. рублей — именно столько стоил "залежавшийся" флагман прошлого года (группа Z), закупленный в избыточном количестве.

⚠️ Внимание: XYZ-анализ бесполезен без предварительной очистки данных. Если в вашей таблице есть нулевые продажи (например, товар временно отсутствовал на складе), коэффициент вариации будет завышен. Исключите такие периоды или замените нули на среднее значение.

Подготовка данных в Excel: шаг за шагом

Перед расчетом XYZ убедитесь, что ваша таблица соответствует требованиям:

  • 📌 Структура: каждая строка — товар, каждый столбец — период (месяц, неделя).
  • 📌 Формат: только числовые значения (нет текста, символов, пустых ячеек).
  • 📌 Периодичность: не менее 12 периодов (например, месяцев) для достоверности.

Пример корректной таблицы:

ТоварЯнвФевМарт...Дек
Ноутбук Model A151816...22
Смартфон Brand X302540...120
Наушники Wireless504555...60

Если ваши данные хранятся в другом формате (например, каждая строка — это чек с датой и товаром), используйте СВОДНАЯ ТАБЛИЦА для преобразования:

  1. Выделите исходный диапазон → Вставка → Сводная таблица.
  2. В строки перетащите поле "Товар", в значения — "Количество".
  3. В столбцы добавьте "Месяц" (предварительно создайте его через =МЕСЯЦ(дата)).

Удалить строки с нулевыми продажами|Заменить текстовые значения на числа|Проверить отсутствие пустых ячеек|Добавить столбец со средним значением по каждому товару-->

Формулы для расчета XYZ-анализа

Основная формула XYZ-анализа — коэффициент вариации (CV):

=СТАНДОТКЛОН.В(диапазон_продаж) / СРЗНАЧ(диапазон_продаж)

Где:

  • СТАНДОТКЛОН.В — стандартное отклонение по выборке (учитывает все данные как генеральную совокупность).
  • СРЗНАЧ — среднее арифметическое продаж за период.

Например, для товара в строке 2 (данные с B2:M2):

=СТАНДОТКЛОН.В(B2:M2)/СРЗНАЧ(B2:M2)

После расчета CV добавьте столбец с классификацией по правилам:

  • 🔹 X: =ЕСЛИ(CV<=0,1; "X"; ...)
  • 🔸 Y: =ЕСЛИ(И(CV>0,1; CV<=0,25); "Y"; ...)
  • 🔶 Z: =ЕСЛИ(CV>0,25; "Z")

Для удобства используйте условное форматирование:

  1. Выделите столбец с группами → Главная → Условное форматирование → Правила выделения ячеек.
  2. Для группы X установите зеленый фон, для Y — желтый, для Z — красный.
⚠️ Внимание: Если коэффициент вариации превышает 100%, это сигнализирует об аномальных выбросах в данных. Например, товар продавался только в одном месяце из 12. Такие позиции требуют ручной проверки — возможно, это ошибка ввода или разовая акция.

Автоматизация XYZ-анализа с помощью Power Query

Для больших таблиц (1000+ товаров) ручной расчет неэффективен. Power Query (встроенный в Excel 2016+) позволяет автоматизировать процесс:

  1. Перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте настраиваемый столбец с формулой коэффициента вариации:
    = List.StandardDeviation([Продажи]) / List.Average([Продажи])

    где [Продажи] — название столбца с данными.

  3. Добавьте еще один столбец для классификации:
    = if [CV] <= 0.1 then "X" else if [CV] <= 0.25 then "Y" else "Z"
  4. Нажмите Закрыть и загрузить — результаты появятся на новом листе.

Преимущества Power Query:

  • 🔄 Обновление данных в один клик (Данные → Обновить все).
  • 📊 Возможность объединения нескольких файлов (например, продажи из разных филиалов).
  • 🛠️ Гибкая фильтрация (например, исключить товары с продажами < 10 шт/месяц).

Пример кода для продвинутых пользователей (язык M):

let

Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],

ДобавленCV = Table.AddColumn(Источник, "CV", each List.StandardDeviation(Record.FieldValues(_)) / List.Average(Record.FieldValues(_))),

ДобавленаГруппа = Table.AddColumn(ДобавленCV, "XYZ", each if [CV] <= 0.1 then "X" else if [CV] <= 0.25 then "Y" else "Z")

in

ДобавленаГруппа

Как обработать данные с пропусками?

Если в ваших данных есть пропуски (например, товар не продавался в некоторые месяцы), замените их на ноль или среднее значение с помощью:

= Table.FillDown(Table.ReplaceValue(Источник, null, 0, Replacer.ReplaceValue))

Это предотвратит ошибки в расчете стандартного отклонения.

Комбинирование XYZ с ABC-анализом: матрица управления запасами

Максимальный эффект XYZ-анализ дает в паре с ABC-анализом (ранжирование по доле в выручке). Совместив оба метода, вы получите матрицу из 9 сегментов (AX, AY, AZ, BX, BY, ...), которая поможет:

  • 📦 AX: Приоритетные товары — максимальный контроль запасов (ежедневный мониторинг).
  • 📉 CZ: Низкоприбыльные и нестабильные — кандидаты на вывод из ассортимента.
  • 🔄 BY: Потенциал роста — требуют маркетинговой поддержки.

Алгоритм построения матрицы:

  1. Проведите ABC-анализ (ранжируйте товары по доле в общей выручке).
  2. Добавьте столбец с ABC-группой рядом с XYZ-классификацией.
  3. Создайте сводную таблицу с фильтрами по обоим столбцам.
  4. Постройте тепловую карту (условное форматирование → цветовые шкалы).

Пример матрицы:

ABC\XYZXYZ
AAX
(20% товаров)
AY
(15% товаров)
AZ
(5% товаров)
BBXBYBZ
CCXCYCZ
⚠️ Внимание: Товары группы AZ (высокая доля в выручке + нестабильный спрос) — самые рискованные. Для них критично:
  • Заключать контракты с поставщиками на консигнацию (оплата только за проданное).
  • Использовать дропшиппинг (отгрузка напрямую от производителя).
  • Внедрять систему динамического ценообразования (скидки на пиковые остатки).

Типичные ошибки и как их избежать

Даже опытные аналитики допускают ошибки, которые искажают результаты XYZ-анализа. Вот топ-5 проблем и их решения:

  1. Игнорирование сезонности.

    Если вы анализируете продажи игрушек в декабре, все товары попадут в группу Z. Решение: используйте данные за несколько лет или применяйте СКОЛЬЗЯЩЕЕ СРЕДНЕЕ для сглаживания пиков.

  2. Неправильный диапазон данных.

    Включение в анализ периодов с акциями или сбоями поставок (например, lockdown 2020 года) исказит стандартное отклонение. Решение: фильтруйте аномальные месяцы через ФИЛЬТР или УДАЛИТЬ ДУБЛИКАТЫ.

  3. Использование СТАНДОТКЛОН.Г вместо СТАНДОТКЛОН.В.

    СТАНДОТКЛОН.Г рассчитывает отклонение для выборки (делит на n-1), что завышает CV для небольших выборок. Решение: всегда используйте СТАНДОТКЛОН.В.

Проверьте себя: если в вашей таблице более 30% товаров попали в группу Z, скорее всего, вы допустили одну из этих ошибок. Пересчитайте CV с учетом рекомендаций выше.

Еще одна распространенная проблема — некорректная интерпретация группы Y. Многие считают, что "умеренные колебания" не требуют внимания, но на практике:

  • 📈 Товары с растущим трендом (например, новые модели смартфонов) могут быть ошибочно классифицированы как Y, хотя их спрос стабильно увеличивается. Решение: добавьте столбец с ТЕНДЕНЦИЯ и анализируйте динамику.
  • 📉 Товары в стадии выхода с рынка (например, устаревшие гаджеты) также попадают в Y, но требуют сокращения запасов.

Практические кейсы: как компании используют XYZ-анализ

Кейс 1. Сеть аптек "Здоровье"

Проблема: Дефицит популярных лекарств (группа X) и перезакуп неликвидов (группа Z).

Решение:

  • Еженедельный мониторинг товаров группы X с автоматической генерацией заказов.
  • Для группы Z — переход на систему vendor-managed inventory (поставщик сам управляет запасами на складе аптеки).

Результат: Сокращение дефицита на 80% и снижение затрат на хранение на 25%.

Кейс 2. Производитель мебели "ДомКомфорт"

Проблема: Сезонные колебания спроса на диваны (пик в ноябре-декабре, спад летом).

Решение:

  • Классификация диванов по XYZ с учетом скользящего окна (анализ последних 6 месяцев).
  • Для группы Y (умеренные колебания) — внедрение гибких скидок в межсезонье.

Результат: Рост выручки на 15% за счет продажи "залежалых" моделей со скидкой 30%.

Кейс 3. Онлайн-магазин электроники

Проблема: Высокие издержки на хранение смартфонов (группа Z из-за быстрого устаревания моделей).

Решение:

  • Переход на дропшиппинг для моделей группы Z.
  • Для группы X (чехлы, зарядные устройства) — увеличение страхового запаса до 30 дней.

Результат: Сокращение складских площадей на 40% без потери продаж.

FAQ: Ответы на частые вопросы

Можно ли проводить XYZ-анализ для услуг, а не только для товаров?

Да, метод применим и к услугам. Например, салон красоты может анализировать спрос на процедуры (стрижки, маникюр) по дням недели. Главное — использовать данные о количестве оказанных услуг, а не о выручке (так как цены могут варьироваться).

Пример: если в понедельник в среднем 10 стрижек, а в субботу — 30, коэффициент вариации покажет нестабильность спроса по дням.

Как часто нужно обновлять XYZ-анализ?

Рекомендуемая периодичность:

  • 📅 Группа X: раз в 3-6 месяцев (спрос стабилен).
  • 📅 Группа Y: ежемесячно (требуется контроль трендов).
  • 📅 Группа Z: еженедельно (высокий риск неликвидов).

Для сезонных товаров (например, новогодние украшения) анализ проводится за 2-3 месяца до пикового сезона.

Чем отличается XYZ-анализ от метода "минимум-максимум"?

XYZ-анализ классифицирует товары по стабильности спроса, а метод "минимум-максимум" устанавливает границы запасов (например, заказывать при остатке < 10 шт, до уровня 50 шт).

Эти методы дополняют друг друга:

  • Для группы X устанавливают узкий коридор "минимум-максимум" (например, 5-15 шт).
  • Для группы Z коридор расширяют (например, 0-5 шт) или отказываются от него в пользу заказов под конкретные продажи.
Можно ли автоматизировать XYZ-анализ с помощью макросов?

Да, вот пример кода VBA для автоматического расчета:

Sub XYZAnalysis()

Dim ws As Worksheet

Set ws = ActiveSheet

Dim lastRow As Long, lastCol As Long

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

'Добавляем столбцы для CV и группы XYZ

ws.Cells(1, lastCol + 1).Value = "CV"

ws.Cells(1, lastCol + 2).Value = "XYZ_Group"

'Расчет CV и классификация

For i = 2 To lastRow

Dim dataRange As Range

Set dataRange = ws.Range(ws.Cells(i, 2), ws.Cells(i, lastCol))

Dim avg As Double, stdev As Double, cv As Double

avg = Application.WorksheetFunction.Average(dataRange)

stdev = Application.WorksheetFunction.StDevP(dataRange)

cv = stdev / avg

ws.Cells(i, lastCol + 1).Value = cv

If cv <= 0.1 Then

ws.Cells(i, lastCol + 2).Value = "X"

ElseIf cv <= 0.25 Then

ws.Cells(i, lastCol + 2).Value = "Y"

Else

ws.Cells(i, lastCol + 2).Value = "Z"

End If

Next i

'Условное форматирование

With ws.Range(ws.Cells(2, lastCol + 2), ws.Cells(lastRow, lastCol + 2))

.FormatConditions.Add Type:=xlTextString, String:="X", TextOperator:=xlContains

.FormatConditions(.FormatConditions.Count).Interior.Color = RGB(100, 200, 100)

.FormatConditions.Add Type:=xlTextString, String:="Y", TextOperator:=xlContains

.FormatConditions(.FormatConditions.Count).Interior.Color = RGB(255, 255, 100)

.FormatConditions.Add Type:=xlTextString, String:="Z", TextOperator:=xlContains

.FormatConditions(.FormatConditions.Count).Interior.Color = RGB(255, 100, 100)

End With

End Sub

Чтобы запустить макрос, нажмите Alt + F11, вставьте код в модуль и выполните его через F5.

Как учитывать вес или объем товаров в XYZ-анализе?

Если ваша цель — оптимизация складских площадей, модифицируйте анализ:

  1. Добавьте столбец с объемом единицы товара (например, в м³).
  2. Рассчитайте средний занимаемый объем за период:
    =СРЗНАЧ(диапазон_продаж) * объем_единицы
  3. Классифицируйте товары по CV, но сортируйте результаты по занимаемому объему. Товары группы Z с большим объемом — приоритет для вывода со склада.

Пример: холодильники (большой объем) в группе Z могут занимать место, эквивалентное 10 телевизорам группы X.