Автоматизируем АВС-анализ в 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, не используя «сильной» математики =) Вообще я сам придерживаюсь этого правила (и всем могу посоветовать): если задачу можно решить простым методом – используем простой!

Метод касательных для АВС-классификации: суть, плюсы и минусы

Суть метода касательных представлена на графике ниже:

Кратко алгоритм графического метода можем описать так:

  1. Строим кривую Парето
  2. Соединяем крайние её точки
  3. К кривой Парето строим касательную параллельную прямой п.2.
  4. Точка касания – граница групп А (слева) и В (справа).
  5. Чтобы получить группу С, повторяем все, начиная с п.2, только прямую начинаем строить не от начала кривой Парето, а от точки границы групп А и В.

Теперь немного моих усовершенствований для понимания сути метода:

  1. Метод касательных можно представить в виде последовательности шагов по разделению всего множества объектов на две группы (целевая группа и остальное множество). Таким образом на первом шаге мы определяем первую целевую группу А и все остальные объекты.
  2. Количество шагов зависит от количества групп, на которые мы делаем разбиение. Стандартно сегмента 3 – А, В и С, но при желании можно продолжить.
  3. На каждом шаге рассматриваемое множество объектов делится по скорости роста кривой Парето (там, где скорость роста кривой выше среднего на всем рассматриваемом множестве, и где ниже)

Достоинства метода касательных:

  • Возможность автоматического расчета границ групп (без «большой математики»)
  • Отсутствие необходимости пересматривать границы групп
  • Масштабируемый алгоритм
  • Хороший результат в области средних значений точки Парето

Недостатки метода касательных:

  • Не единственность разбиения для некоторых форм кривой Парето (наличие прямолинейного отрезка):

  • Метод плохо работает на распределениях близких к граничным точкам Парето:

Но на практике могу сказать, что это крайние случаи, и для них необходимо использовать экспертный подход, разбирать их отдельно. Алгоритм действий в таком случае может быть следующим:

  1. Предобработка данных. Определяем крайние случаи распределения Парето
  2. Крайние случаи отправляем на экспертный анализ
  3. Общие случаи отправляем на метод касательных

Разрабатываем аналитический алгоритм АВС на Qlik

Скачайте предложенный мной Алгоритм автоматизации АВС-классификации по методу касательных. Разработанный алгоритм является унифицированным, т.е. его не нужно «допиливать» под конкретную задачу, вы либо его принимаете, либо нет =)

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

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

$(Must_Include=abc.txt);

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

  1. Перед тем, как написать команду выше, нам все же нужно немного поработать:
    1. сформировать таблицу на которой будет проведена ABC классификация:
      • имя таблицы – Data_IN,
      • два поля – Object (объект классификации), Factor (критерий классификации).

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

    1. на выходе мы получаем таблицу Data_OUT со следующими полями:
      • id – поле для сопоставления входных и выходных данных (поле Object в таблице Data_IN)
      • SalePer – доля критерия в общем объеме
      • SalePerCum – доля критерия с накоплением
      • ABC_Group – группа A,B,C

«Внимание!» – если необходимо использовать алгоритм ABC классификации несколько раз в скрипте, то после каждого его применения не забывайте делать пособработку таблицы Data_OUT.

АВС-анализ по методу касательных: реальный пример

Для примера я создал приложение АВС-классификации по методу касательных на QlikView:

Расчет групп производится здесь автоматически по неделям, с возможностью выбора объекта классификации – номенклатура или контрагент.

Тут можно увидеть, что функция расчета ABC групп запускалась не один раз (а точнее >300 раз). Это и расчеты по разным объектам (Номенклатура и Контрагенты), и по разным временным отрезкам. При этом отмечу, что данный алгоритм работает очень быстро – на вход подавался объем ~3 млн.строк, время обработки составило ~1 мин. Для сравнения, тот же алгоритм реализованный на языке R на куда меньшем объеме ~60 тыс. записей, выполняется ~10 мин.

Еще раз даю ссылку на скачивание файла: Алгоритм автоматизации АВС-классификации по методу касательных.

Спасибо за внимание, надеюсь, пригодится =)