Сегодня я продолжу начатую ранее тему по методу касательных. В этот раз применим его к методу анализа XYZ, который традиционно дополняет классификацию методом ABC, рассмотренный ранее. Как оказалось, общий алгоритм выделения групп методом касательных можно с успехом применять и при XYZ классификации – в конце статьи будут 2 qvw-документа с расчетом статистических и динамических коэффициентов вариации для выделения групп X, Y и Z.
XYZ анализ: краткое представление
Анализ 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, нужно обработать данные следующим образом:
- Из значений продаж убрать продажи по промо-акциям
- Из периодов выборки (как правило, это дни) убрать периоды с остатком на складе меньше, чем максимум продаж продукта (иначе из-за упущенных продаж, когда товара не было на складе, вы можете получить неверный коэффициент и неверно определить категорию товара)
- Оставшееся количество данных должно быть репрезентативным
При этом часть товаров у вас останется «за бортом», как товары с недостаточно репрезентативной выборкой – это могут быть новинки, товар с малым количеством дней на складе и т.д. Эти товары нужно проанализировать отдельно – выделять группу N, а не приписывать им группу Z.
Так ли все хорошо? — 2
Вам кажется, что в первом пункте мы что-то забыли? Да, и это сезонность!
Суть проблемы – практически во всех источниках деление на группы XYZ производится на основе коэффициента вариации, вернее называть его «статистическим коэффициентом вариации». Но давайте сравним две ситуации:
Как мы видим это два временных ряда с сезонной компонентой и без. Нетрудно увидеть, что использовать «статистический» коэффициент вариации во втором случае (когда сезонная компонента присутствует) может оказаться не совсем правильным ходом. В таком случае нам желательно делать расчет «динамического» коэффициента вариации, для расчета которого будет использоваться не мат.ожидание, а тренд, хотя бы линейный.
Примеры скриптов XYZ-анализа и практическое применение
Тут можно скачать примеры скриптов XYZ-анализа в QlikView. Их я выполнил в двух вариантах:
- стандартный XYZ-анализ методом касательных
- XYZ-анализ с расчетом динамического коэффициента вариации.
Главным отличием является значение коэффициента вариации полученного двумя разными способами.
Статистический коэффициент вариации:
Где , σ — среднеквадратическое отклонение, M – мат.ожидание
Динамический коэффициент вариации:
Вариантов расчета такого коэффициента может быть много, я же буду использовать методы прогнозирования с переходом непосредственно к динамическому коэффициенту вариации.
где Mt+1 – прогнозное значение динамического ряда для периода t+1, в случае линейного тренда (без учета сезонности): Mt = a0 + a1*t.
σt+1 – среднее квадратическое отклонение динамического ряда:
Метод касательных для определения границ групп и динамический коэффициент вариации могут дополнять друг друга:
- Определяем критерий классификации, по которой будем проводить XYZ-классификацию
- Определяем коэффициенты линейного тренда (более сложные тренды, полиномиальный, экспонента и т.д. можно рассчитать по аналогии с линейным)
- Определяем среднее квадратическое отклонение динамического ряда по формуле выше
- Рассчитываем динамический коэффициент вариации
- Определяем границы групп экспертным методом или методом касательных
Внедрить алгоритм в свое приложение можно буквально в 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
-
- на выходе мы получаем таблицу Data_OUT_XYZ со следующими полями:
«Внимание!» — если необходимо использовать алгоритм XYZ классификации несколько раз в скрипте, то после каждого его применения не забывайте делать постобработку таблицы Data_OUT_XYZ. xyz.txt – содержит расчет СТАТИСТИЧЕСКОГО коэффициента вариации!
На всякий случай еще раз дублирую ссылку на скачивание примеров сриптов: XYZ-анализ стандартный и динамический в QlikView.
Всем ценной аналитики и до новых встреч!
Нужная информация, но ссылка на скрипт не рабочая, скриншоты в статье также с битыми ссылками.
Буду признателен если поправите.