Сегодня поделюсь переводом интересной статьи от лондонского аналога нашего qRUG, QlikDevGroup.

Введение

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

Перцентиль

Вы сможете превратить в нечто подобное:

Перцентиль

Перцентиль – это способ посмотреть на ваши данные в отношении ко всем другим значениям набора данных. Например, если вы хотите определить 10% самых активных покупателей за прошлый месяц, по сути, вы хотите увидеть всех покупателей выше границы в 90%.

Основная причина использования распределения по перцентилям – слишком плотное распределение данных. Например, на графике выше вы видите, как большинство точек в пузырьковой диаграмме сосредоточено внизу.

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

Проблемы при работе по средним:

  • Средние скрывают выбросы и вы их не видите.
  • Выбросы смещают средние значения, так что в системе, в которой существуют выбросы, средние значения уже не отражают нормальное состояние системы.

Выход из этой ситуации – перцентили.

НА ЗАМЕТКУ! Перцентили (квантили — в более широком представлении) часто превозносятся как средство преодоления фундаментального недостатка средних значений.  Однако не стоит забывать, что перцентиль — это всего лишь число, так же как и среднее. Среднее отображает центр масс выборки, а перцентиль же показывает отметку верхнего уровня указанной доли выборки.

Фрактальный подход

В QlikView и QlikSense достаточно просто рассчитываются перцентили. Функция FRACTILE() будет показывать соответствующее значение перцентиля.

Так, для того чтобы найти ТОП 10% ваших клиентов (то есть тех, которые выше границы 90%), вам нужно использовать следующее выражение:

Такая формула отлично срабатывает для любой готовой меры <Measure>, которая у нас есть. Но, как правило, требуется задать перцентиль для конкретного измерения, и в этом случае нужно использовать функцию FRACTILE вместе с функцией AGGR.

Например, если вы хотите показать перцентиль 90% по продажам ваших продуктов, то вам нужно использовать следующее выражение:

Подход ранжирования

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

Например, если у нас есть следующий набор данных:

Применив RANK (), получим ранжирование в виде:

где группа 1-5 – отранжированные ТОП-5 значений.

Второй режим функции ранжирования возвращает значение DUAL.

В примере выше Qlik хранит группу 1-5 как двоичное значение (‘1-5’,1.5)

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

Так, если мы продолжим пример с продажами, выражение примет вид:

Эта функция – рабочая, но с некоторыми ограничениями:

  1. Функция хорошо работает по всему набору данных, только если не используются фильтры данных. Чтобы убрать это ограничение, нужно использовать Set Analysis.
  2. Выражение расценивает NULL продажи как правомерные значения данных, тем самым искажая результаты. Чтобы избавиться от этой проблемы, делаем проверку на NULL и заменяем их нулями.

В итоге получаем улучшенную формулу:

Практический пример:

Далее рассмотрим пример создания диаграммы с процентилями для QlikSense 2.0.7

Диаграмма представляет продажу по каждому продукту в сравнении с процентильным ранжированием в 2007 и 2008 годах, а также объемом продаж в 2008. Также на графике выделены продукты, которые выросли и упали в перцентилях.

В жизни все не так просто, поэтому добавим немного сложностей и в тестовый пример J Некоторые продукты в 2008 не продавались, поэтому нам придется добавить дополнительную проверку на NULL значения продаж в случае применения фильтров.

Выражение для перцентиля 2007 года получается таким:

А для 2008 – таким:

Выражение для вычисления размера пузырьков:

И в завершении выражение для цветов диаграммы:

И в заключение я добавил дополнительные линии от 50% на обоих осях:

Перцентиль

Заключение

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

СКАЧАТЬ ПРИМЕР