XYZ-анализ — это статистический метод классификации товаров по стабильности спроса, который помогает оптимизировать запасы, снизить издержки на хранение и улучшить логистику. В отличие от ABC-анализа (который ранжирует товары по доле в общем объеме продаж), XYZ фокусируется на вариативности потребления. Если вы работаете с большими массивами данных в Excel, умение автоматизировать этот анализ сэкономит часы ручной работы.
Многие ошибочно считают, что XYZ-анализ требует специализированного ПО типа 1C или SAP. На практике достаточно стандартных функций Excel — от СТАНДОТКЛОН до условного форматирования. В этой статье мы разберем три метода расчета (ручной, полуавтоматический и полностью автоматизированный), покажем, как интерпретировать результаты, и предостережем от типичных ошибок, которые искажают итоговую классификацию на 30-40%.
XYZ-анализ особенно востребован в сферах, где спрос подвержен сезонным колебаниям: розничная торговля, фармацевтика, производство. Например, в аптечных сетях лекарства от аллергии могут относиться к группе X (стабильный спрос круглый год), а противогриппозные препараты — к группе Z (резкие пики в осенне-зимний период). Без правильной классификации риски как перезаказа, так и дефицита вырастают в разы.
Что такое XYZ-анализ и зачем он нужен
XYZ-анализ делит товары на три категории по коэффициенту вариации (отношение стандартного отклонения к среднему значению спроса):
- 🔹 Группа X — стабильный спрос (коэффициент вариации < 10%). Примеры: хлеб в супермаркете, канцтовары для офиса.
- 🔸 Группа Y — умеренные колебания (10-25%). Примеры: одежда среднего ценового сегмента, бытовая химия.
- 🔶 Группа Z — высоковолатильный спрос (>25%). Примеры: новогодние товары, сезонная обувь.
Основная цель анализа — оптимизация запасов:
- Для группы X достаточно минимального страхового запаса (например, 5-7 дней продаж).
- Группа Y требует гибкой системы пополнения с учетом трендов.
- Группа Z часто нуждается в just-in-time поставках или контрактах с поставщиками на возврат нереализованного.
Без XYZ-анализа компании теряют до 15-20% прибыли на избыточных запасах группы Z или упущенных продажах группы X из-за дефицита. Например, сеть магазинов электроники, не классифицировавшая смартфоны по XYZ, ежеквартально списывала на утилизацию товары на 300+ тыс. рублей — именно столько стоил "залежавшийся" флагман прошлого года (группа Z), закупленный в избыточном количестве.
⚠️ Внимание: XYZ-анализ бесполезен без предварительной очистки данных. Если в вашей таблице есть нулевые продажи (например, товар временно отсутствовал на складе), коэффициент вариации будет завышен. Исключите такие периоды или замените нули на среднее значение.
Подготовка данных в Excel: шаг за шагом
Перед расчетом XYZ убедитесь, что ваша таблица соответствует требованиям:
- 📌 Структура: каждая строка — товар, каждый столбец — период (месяц, неделя).
- 📌 Формат: только числовые значения (нет текста, символов, пустых ячеек).
- 📌 Периодичность: не менее 12 периодов (например, месяцев) для достоверности.
Пример корректной таблицы:
| Товар | Янв | Фев | Март | ... | Дек |
|---|---|---|---|---|---|
| Ноутбук Model A | 15 | 18 | 16 | ... | 22 |
| Смартфон Brand X | 30 | 25 | 40 | ... | 120 |
| Наушники Wireless | 50 | 45 | 55 | ... | 60 |
Если ваши данные хранятся в другом формате (например, каждая строка — это чек с датой и товаром), используйте СВОДНАЯ ТАБЛИЦА для преобразования:
- Выделите исходный диапазон →
Вставка → Сводная таблица. - В строки перетащите поле "Товар", в значения — "Количество".
- В столбцы добавьте "Месяц" (предварительно создайте его через
=МЕСЯЦ(дата)).
Удалить строки с нулевыми продажами|Заменить текстовые значения на числа|Проверить отсутствие пустых ячеек|Добавить столбец со средним значением по каждому товару-->
Формулы для расчета 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")
Для удобства используйте условное форматирование:
- Выделите столбец с группами →
Главная → Условное форматирование → Правила выделения ячеек. - Для группы X установите зеленый фон, для Y — желтый, для Z — красный.
⚠️ Внимание: Если коэффициент вариации превышает 100%, это сигнализирует об аномальных выбросах в данных. Например, товар продавался только в одном месяце из 12. Такие позиции требуют ручной проверки — возможно, это ошибка ввода или разовая акция.
Автоматизация XYZ-анализа с помощью Power Query
Для больших таблиц (1000+ товаров) ручной расчет неэффективен. Power Query (встроенный в Excel 2016+) позволяет автоматизировать процесс:
- Перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона. - В редакторе Power Query добавьте настраиваемый столбец с формулой коэффициента вариации:
= List.StandardDeviation([Продажи]) / List.Average([Продажи])где
[Продажи]— название столбца с данными. - Добавьте еще один столбец для классификации:
= if [CV] <= 0.1 then "X" else if [CV] <= 0.25 then "Y" else "Z" - Нажмите
Закрыть и загрузить— результаты появятся на новом листе.
Преимущества 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: Потенциал роста — требуют маркетинговой поддержки.
Алгоритм построения матрицы:
- Проведите ABC-анализ (ранжируйте товары по доле в общей выручке).
- Добавьте столбец с ABC-группой рядом с XYZ-классификацией.
- Создайте сводную таблицу с фильтрами по обоим столбцам.
- Постройте тепловую карту (условное форматирование → цветовые шкалы).
Пример матрицы:
| ABC\XYZ | X | Y | Z |
|---|---|---|---|
| A | AX (20% товаров) | AY (15% товаров) | AZ (5% товаров) |
| B | BX | BY | BZ |
| C | CX | CY | CZ |
⚠️ Внимание: Товары группы AZ (высокая доля в выручке + нестабильный спрос) — самые рискованные. Для них критично:
- Заключать контракты с поставщиками на консигнацию (оплата только за проданное).
- Использовать дропшиппинг (отгрузка напрямую от производителя).
- Внедрять систему динамического ценообразования (скидки на пиковые остатки).
Типичные ошибки и как их избежать
Даже опытные аналитики допускают ошибки, которые искажают результаты XYZ-анализа. Вот топ-5 проблем и их решения:
- Игнорирование сезонности.
Если вы анализируете продажи игрушек в декабре, все товары попадут в группу Z. Решение: используйте данные за несколько лет или применяйте
СКОЛЬЗЯЩЕЕ СРЕДНЕЕдля сглаживания пиков. - Неправильный диапазон данных.
Включение в анализ периодов с акциями или сбоями поставок (например, lockdown 2020 года) исказит стандартное отклонение. Решение: фильтруйте аномальные месяцы через
ФИЛЬТРилиУДАЛИТЬ ДУБЛИКАТЫ. - Использование
СТАНДОТКЛОН.ГвместоСТАНДОТКЛОН.В.СТАНДОТКЛОН.Грассчитывает отклонение для выборки (делит на 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-анализе?
Если ваша цель — оптимизация складских площадей, модифицируйте анализ:
- Добавьте столбец с объемом единицы товара (например, в м³).
- Рассчитайте средний занимаемый объем за период:
=СРЗНАЧ(диапазон_продаж) * объем_единицы - Классифицируйте товары по CV, но сортируйте результаты по занимаемому объему. Товары группы Z с большим объемом — приоритет для вывода со склада.
Пример: холодильники (большой объем) в группе Z могут занимать место, эквивалентное 10 телевизорам группы X.