Автоматизируем АВС-анализ в Qlik: метод касательных
Сегодня продолжение истории про Парето-анализ. Базовое приложение на Qlik разработано, настало время основывать АВС-аналитику не на общепризнанных правилах или экспертных оценках, а исключительно на ваших данных (ведь реальная разбивка может быть не 20/80, а 10/70 или любой другой). В конце статьи можно скачать скрипт, который автоматизирует разбиение групп на А, В и С по методу касательных. Итак, приступим!
Зачем нам автоматизировать АВС-аналитику в Qlik?
ABC-анализ – популярный метод структурного анализа, который помогает во многих бизнес-задачах, к примеру, более эффективно управлять товарными запасами и выстраивать категорийный менеджмент. В первоначальном варианте данный вид анализа основывается на принципе Парето (или еще можно встретить вариант принцип 20/80) – «20% усилий дают 80% результата, а остальные 80% усилий – лишь 20% результата». Это так называемый классический метод ABC-анализа. Его можно применять – это лучше, чем не применять совсем ничего.
Но мир неидеален и бизнес не работает по классическим учебникам – на деле соотношения бывают совершенно разными: 20/90, 10/70, 45/100, 5/98 и т.д. Причин тому опять же может быть множество:
- Сезонность, которая влияет на ассортимент продукции,
- Праздничные дни: Новый Год, Рождество, Пасха и т.д.,
- Введение/выведение товара (группы товаров) на рынок, которые могут существенно повлиять на структуру продаж,
- Выход на новые рынки (регионы), рост/падение клиентской базы и пр.
К тому же, часто для проведения ABC-анализа нельзя обойтись каким-то одним критерием классификации (это уже задача многокритериальной классификации объектов). В такой ситуации проще и эффективнее иметь максимально формализованный метод определения границ групп при ABC-классификации – метод касательных.
Почему метод касательных?
Придумано достаточно методов для ABC-классификации: метод касательных, метод треугольника, метод петли и т.д. Почему я выбрал метод касательных? Этот метод – полностью формализован, алгоритм его работы понятен (как в графическом, так и аналитическом представлении), и его можно реализовать на Qlik, не используя «сильной» математики =) Вообще я сам придерживаюсь этого правила (и всем могу посоветовать): если задачу можно решить простым методом – используем простой!
Метод касательных для АВС-классификации: суть, плюсы и минусы
Суть метода касательных представлена на графике ниже:
Кратко алгоритм графического метода можем описать так:
- Строим кривую Парето
- Соединяем крайние её точки
- К кривой Парето строим касательную параллельную прямой п.2.
- Точка касания – граница групп А (слева) и В (справа).
- Чтобы получить группу С, повторяем все, начиная с п.2, только прямую начинаем строить не от начала кривой Парето, а от точки границы групп А и В.
Теперь немного моих усовершенствований для понимания сути метода:
- Метод касательных можно представить в виде последовательности шагов по разделению всего множества объектов на две группы (целевая группа и остальное множество). Таким образом на первом шаге мы определяем первую целевую группу А и все остальные объекты.
- Количество шагов зависит от количества групп, на которые мы делаем разбиение. Стандартно сегмента 3 – А, В и С, но при желании можно продолжить.
- На каждом шаге рассматриваемое множество объектов делится по скорости роста кривой Парето (там, где скорость роста кривой выше среднего на всем рассматриваемом множестве, и где ниже)
Достоинства метода касательных:
- Возможность автоматического расчета границ групп (без «большой математики»)
- Отсутствие необходимости пересматривать границы групп
- Масштабируемый алгоритм
- Хороший результат в области средних значений точки Парето
Недостатки метода касательных:
- Не единственность разбиения для некоторых форм кривой Парето (наличие прямолинейного отрезка):
- Метод плохо работает на распределениях близких к граничным точкам Парето:
Но на практике могу сказать, что это крайние случаи, и для них необходимо использовать экспертный подход, разбирать их отдельно. Алгоритм действий в таком случае может быть следующим:
- Предобработка данных. Определяем крайние случаи распределения Парето
- Крайние случаи отправляем на экспертный анализ
- Общие случаи отправляем на метод касательных
Разрабатываем аналитический алгоритм АВС на Qlik
Скачайте предложенный мной Алгоритм автоматизации АВС-классификации по методу касательных. Разработанный алгоритм является унифицированным, т.е. его не нужно «допиливать» под конкретную задачу, вы либо его принимаете, либо нет =)
Внедрить алгоритм в свое приложение можно буквально в 2 шага:
- Самое простое – пишем в скрипте:
$(Must_Include=abc.txt);
Сам алгоритм метода касательных «спрятан» в подскрипт, который вызывается на выполнение командой $(Must_Include) или $(Include). Таким образом, мы можем включить алгоритм в любом месте скрипта, любое количество раз. В скрипте я комментировал каждый шаг, так что при необходимости разработчику или аналитику будет легко разобраться.
- Перед тем, как написать команду выше, нам все же нужно немного поработать:
- сформировать таблицу на которой будет проведена ABC классификация:
- имя таблицы – Data_IN,
- два поля – Object (объект классификации), Factor (критерий классификации).
- сформировать таблицу на которой будет проведена ABC классификация:
«Внимание!» — данные в таблице Data_IN – должны быть сгруппированными!!!
-
- на выходе мы получаем таблицу Data_OUT со следующими полями:
- id – поле для сопоставления входных и выходных данных (поле Object в таблице Data_IN)
- SalePer – доля критерия в общем объеме
- SalePerCum – доля критерия с накоплением
- ABC_Group – группа A,B,C
- на выходе мы получаем таблицу Data_OUT со следующими полями:
«Внимание!» — если необходимо использовать алгоритм ABC классификации несколько раз в скрипте, то после каждого его применения не забывайте делать пособработку таблицы Data_OUT.
АВС-анализ по методу касательных: реальный пример
Для примера я создал приложение АВС-классификации по методу касательных на QlikView:
Расчет групп производится здесь автоматически по неделям, с возможностью выбора объекта классификации – номенклатура или контрагент.
Тут можно увидеть, что функция расчета ABC групп запускалась не один раз (а точнее >300 раз). Это и расчеты по разным объектам (Номенклатура и Контрагенты), и по разным временным отрезкам. При этом отмечу, что данный алгоритм работает очень быстро – на вход подавался объем ~3 млн.строк, время обработки составило ~1 мин. Для сравнения, тот же алгоритм реализованный на языке R на куда меньшем объеме ~60 тыс. записей, выполняется ~10 мин.
Еще раз даю ссылку на скачивание файла: Алгоритм автоматизации АВС-классификации по методу касательных.
Спасибо за внимание, надеюсь, пригодится =)
Привет. Есть замечание по поводу «скрипта» на определение формул касательных и нахождение ближайших фактических точек к этим двум прямым, ссылка на который есть на этой странице.
http://blog.atkcg.ru/metod-kasatelnyx-v-abc-analize/
С идеей всё в порядке: в особенностях ассоциативной модели (пассы таблиц) применить школьную программу математики (определение прямой по двум точкам).
С исполнением… требуется доработать немножко. В частности, почему вы накопительную долю (%) делите на количество. Коварно это:) Делите уж тогда тоже долю (порядковый номер в очереди делить на общее количество.))
Удачи! И спасибо за ваше время!
Игорь.