Сегодня я продолжу начатую ранее тему по методу касательных. В этот раз применим его к методу анализа XYZ, который традиционно дополняет классификацию методом ABC, рассмотренный ранее. Как оказалось, общий алгоритм выделения групп методом касательных можно с успехом применять и при XYZ классификации – в конце статьи будут 2 qvw-документа с расчетом статистических и динамических коэффициентов вариации для выделения групп X, Y и Z.

XYZ анализ: краткое представление

xyz анализ в QlikАнализ XYZ – довольно популярный, наряду с ABC (вот, даже на заборе пишут=)), но его суть не все понимают, поэтому дам очень краткую справку. Кто в теме, смело пропускайте этот раздел.

XYZ-анализ классифицирует ресурсы компании в зависимости от стабильности их потребления и точности будущего прогнозирования. Чаще всего XYZ-анализ применяют к товарным запасам – группируют объекты анализа по мере однородности анализируемых параметров (по коэффициенту вариации), и таким образом выделяют:

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

Коэффициент вариации я тут привожу стандартный, в вашей компании разбивка по категориям X, Y, Z может немного отличаться.

Ну а формулы и более подробное описание анализа можно найти в Википедии.

Для чего и кем реально используется XYZ-анализ:

  • Склад: В комбинации с АВС-анализом для оценки структуры склада по 9 (АX, AY, AZ, BX, BY, BZ, CX, CY,CZ, CN) или 12 группам (АX, AY, AZ, AN, BX, BY, BZ, BN, CX, CY,CZ, CN).
  • Маркетинг: Выбор товара для промо-акций. Считается, что товары из групп AX, AY и BX дадут лучший ROI акции. В данной области ABC-XYZ-анализ хорошо дополняется анализом ассоциативных правил (но об этом в следующих статьях!)
  • Закупки: для товаров группы Z используют повышенный коэффициент страхового запаса (safety stock).

Автоматизация XYZ по методу касательных в Qlik

Суть метода касательных для автоматизации распределения групп по XYZ я не буду повторять – подробно описывал его в статье Метод касательных в АВС-анализе. Основное отличие метода XYZ: для ABC мы строили кривую с накопительным итогом доли какого-либо фактора, для метода же XYZ строится кривая коэффициента вариации:

Для XYZ классификации полностью сохраняются все плюсы и минусы метода.

Так ли все хорошо? – 1

Ответ дам сразу – нет, все не так хорошо! Для XYZ-анализа очень важна корректная обработка данных. Нужно обязательно учитывать ситуации выбросов – например, промо-акции (аномально высокие продажи) или, наоборот, дефицит на складе (неудовлетворенный спрос). Поэтому если вы, не задумываясь возьмете необработанные данные продаж, скорее всего, получите слишком большую группу Z, в которую попадут товары с гораздо более прогнозируемым спросом.

Итак, чтобы получить реальную классификацию по XYZ, нужно обработать данные следующим образом:

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

При этом часть товаров у вас останется «за бортом», как товары с недостаточно репрезентативной выборкой – это могут быть новинки, товар с малым количеством дней на складе и т.д. Эти товары нужно проанализировать отдельно – выделять группу N, а не приписывать им группу Z.

Так ли все хорошо? – 2

Вам кажется, что в первом пункте мы что-то забыли? Да, и это сезонность!

Суть проблемы – практически во всех источниках деление на группы XYZ производится на основе коэффициента вариации, вернее называть его «статистическим коэффициентом вариации». Но давайте сравним две ситуации:

Как мы видим это два временных ряда с сезонной компонентой и без. Нетрудно увидеть, что использовать «статистический» коэффициент вариации во втором случае (когда сезонная компонента присутствует) может оказаться не совсем правильным ходом. В таком случае нам желательно делать расчет «динамического» коэффициента вариации, для расчета которого будет использоваться не мат.ожидание, а тренд, хотя бы линейный.

Примеры скриптов XYZ-анализа и практическое применение

Тут можно скачать примеры скриптов XYZ-анализа в QlikView. Их я выполнил в двух вариантах:

  • стандартный XYZ-анализ методом касательных
  • XYZ-анализ с расчетом динамического коэффициента вариации.

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

Статистический коэффициент вариации:

Где ,  σ – среднеквадратическое отклонение, M – мат.ожидание

Динамический коэффициент вариации:

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

где Mt+1 – прогнозное значение динамического ряда для периода t+1, в случае линейного тренда (без учета сезонности): Mt = a0 + a1*t.

σt+1 – среднее квадратическое отклонение динамического ряда:

Метод касательных для определения границ групп и динамический коэффициент вариации могут дополнять друг друга:

  1. Определяем критерий классификации, по которой будем проводить XYZ-классификацию
  2. Определяем коэффициенты линейного тренда (более сложные тренды, полиномиальный, экспонента и т.д. можно рассчитать по аналогии с линейным)
  3. Определяем среднее квадратическое отклонение динамического ряда по формуле выше
  4. Рассчитываем динамический коэффициент вариации
  5. Определяем границы групп экспертным методом или методом касательных

Внедрить алгоритм в свое приложение можно буквально в 2 шага:

1. Самое простое – пишем в скрипте:

$(Must_Include=xyz.txt);

Сам алгоритм метода касательных «спрятан» в подскрипт, который вызывается на выполнение командой $(Must_Include) или $(Include). Таким образом, мы можем включить алгоритм в любом месте скрипта, любое количество раз. В скрипте я комментировал каждый шаг, так что при необходимости разработчику или аналитику будет легко разобраться.

2. Перед тем, как написать команду выше, нам все же нужно немного поработать:

  • сформировать таблицу, на которой будет проведена XYZ классификация:
      • имя таблицы – Data_IN_XYZ,
      • два поля – Object (объект классификации), Factor (критерий классификации).

«Внимание!» — данные в таблице Data_IN_XYZ – должны быть сгруппированными!!!

    • на выходе мы получаем таблицу Data_OUT_XYZ со следующими полями:
        • id – поле для сопоставления входных и выходных данных (поле Object в таблице Data_IN)
        • Factor_coeff_var– коэффициент вариации
        • XYZ_Group – группа X,Y,Z

«Внимание!» — если необходимо использовать алгоритм XYZ классификации несколько раз в скрипте, то после каждого его применения не забывайте делать постобработку таблицы Data_OUT_XYZ. xyz.txt – содержит расчет СТАТИСТИЧЕСКОГО коэффициента вариации!

На всякий случай еще раз дублирую ссылку на скачивание примеров сриптов: XYZ-анализ стандартный и динамический в QlikView.

Всем ценной аналитики и до новых встреч!