Введение

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

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

  • Продукты, которые покупает каждый покупатель.
  • Как часто клиент покупает. (еженедельно? ежемесячно? и т. д.).
  • Средние расходы за некоторый период времени.
  • и т. д.

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

Применение процесса кластеризации сопряжено со многими препятствиями: Какой алгоритм кластеризации использовать? Сколько кластеров у моих данных? Как я могу эффективно запустить его на больших наборах данных? Как я понимаю сгенерированные кластеры? Как визуализировать результаты? и т. д.

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

AI & Analytics Engine решает именно эти проблемы для пользователей, упрощая кластеризацию для всех. Этому способствуют внутренние приложения, которые могут решить многие типы проблем. В Engine пользователи могут просто загружать свои данные и выбирать «кластеризацию» во время создания приложения, а также указывать, какие столбцы релевантны. Engine будет автоматически генерировать результаты в приложении для кластеризации. Он также поставляется с автоматическим анализом результатов кластеризации, повышающим объяснимость, в дополнение к надежности и простоте использования, так что пользователь может перейти от данных к пониманию за считанные минуты.

Нахождение естественных группировок покемонов

Чтобы продемонстрировать процесс кластеризации на движке, воспользуемся набором данных Pokémon stats от Kaggle. Мы используем эти данные, потому что они просты и идеально подходят для демонстрации ключевых аспектов функции кластеризации Engine.

Для тех, кто не в курсе: Pokémon (аббревиатура от Pocket Monsters на японском языке) — это японская медиа-франшиза, управляемая The Pokémon Company, компанией, основанной Nintendo, Game Freak и Существа. Есть сотни существ покемонов, каждый со своими атрибутами.

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

Ниже приведены атрибуты набора данных:

Первоначальная информация

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

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

Пример: группировка по признаку «генерация»:

Кажется, что каждое поколение покемонов имеет довольно похожее распределение функций. Следовательно, мы можем сделать вывод, что «поколения» на самом деле не являются важной характеристикой.

Мы можем попытаться найти естественные группировки, используя физические атрибуты покемонов (скорость, атака и т. д.). Парный сюжет может помочь:

Мы определенно можем видеть корреляции (например, «Защита» положительно коррелирует с «Атакой», что означает, что они, как правило, выше вместе), но трудно найти какие-либо группы, не говоря уже об их объяснении с помощью этого типа диаграммы, и приведенные данные. Мы начинаем понимать, что нам нужно что-то еще.

Приложение кластеризации — постановка задачи

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

Наша цель будет состоять в том, чтобы обнаружить естественные группы, используя физические атрибуты покемонов, например: «HP, Attack, Defense, SP. Атака, Сп.Защ и Скорость». Однако в качестве проверки здравомыслия мы начнем с использования всех физических атрибутов плюс еще одна функция: «Легендарный», потому что у нас есть основания полагать, что легендарный покемон должен сильно отличаться от других. . Ведь они легендарны!

Легендарные покемоны являются «самыми сильными», и, следовательно, они должны демонстрировать физические характеристики, которые находятся на высоком уровне. Мы можем легко увидеть это, используя анализ данных:

Мы ожидаем, что AI & Analytics Engine найдет как минимум 2 отдельные группы при использовании этого набора функций. Позже мы отбросим эту функцию и позволим приложению кластеризации попытаться найти естественные группировки без нее. Вручную сделать это намного сложнее!

Кластерное приложение — реализация

Сценарий 1: Кластеризация с помощью столбца «Легендарный»

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

Затем мы решили использовать приложение кластеризации и выбрать набор данных для обработки:

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

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

Наконец, мы просматриваем конфигурацию приложения и приступаем к кластеризации:

Затем мы переходим к окну приложения кластеризации. Мы можем видеть важную информацию, такую ​​как размер набора данных, создавший его пользователь, выбранные столбцы для кластеризации и текущий прогресс обучения моделей кластеризации. и модели, закончившие обучение.

Рис. 10. Ожидание завершения обработки кластера

https://www.pi.exchange/hubfs/03_waiting_for_clustering.mp4

После завершения обучения мы можем просмотреть результаты анализа, «понять» наши кластеры и экспортировать результаты. У нас есть много информации, поэтому следующий фрагмент видео является просто обзором. Мы сразу же погрузимся в эти результаты в следующем обзоре:

Обзор видео кластерного анализа:

https://www.pi.exchange/hubfs/04_clustering_results_overview.mp4

Пошаговое руководство по обзору кластерного анализа

Во-первых, мы видим сводку анализа. Критическая информация заключается в том, что GMM обнаружил 2 кластера, как мы и подозревали при просмотре анализа данных, сгруппированных по «легендарному» признаку. Кроме того, GMM удалось сгруппировать все доступные записи данных.

Резюме анализа

Затем мы можем просмотреть низкоразмерное (2D) представление данных, где каждая запись характеристик покемонов (7D-вектор) сопоставляется с точкой в ​​этом представлении:

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

Прежде чем мы углубимся в объяснения, мы уже можем иметь некоторое представление о различиях между кластерами, используя вкладку «Профили кластера».

На оси Y мы видим два кластера, которые у нас есть.

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

Например, мы можем видеть, что для кластера 1 (большего из кластеров, содержащего 731 точку) признак «Легендарный_истина» (это исходный признак «Легендарный», разделенный на категории, которые он содержит, либо «истинный», либо « ложь») равно нулю! Что на 100% ниже среднего и указывает на то, что все покемоны в этом кластере не являются легендарными покемонами.

С другой стороны, мы видим высокое значение (выше среднего) этого признака во 2-м кластере, что говорит об обратном. т.е. Меньший кластер — это кластер легендарных покемонов.

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

Далее мы хотели бы получить некоторые «правила», которые точно скажут нам, как разделить эти кластеры. Мы можем получить их, используя «детальное описание» кластеров.

Давайте углубимся в кластер 2:

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

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

Правила также просты. Во-первых, мы видим, что можем описать 68 из 69 общих точек в кластере двумя простыми наборами правил, называемыми «подразделениями».

Большинство записей, которые были отнесены к кластеру 2 (65 элементов), имеют простое правило: «Легендарный = Истина».

Что касается оставшихся 4 записей, у нас есть 3, которые можно описать в подразделе 2. В частности, они НЕ являются «легендарными», но по-прежнему имеют высокое значение очков жизни (HP), которое составляет › 121,5, и более низкие значения для атаки, которые стоят ‹ 34.

Если пользователь заинтересован в более глубоком изучении конкретного подразделения, это можно сделать, щелкнув «просмотреть подробности» в подразделе, описанном в приложении.

Сценарий 2. Кластеризация без столбца "Легендарный"

В этом разделе мы пропустим все детали и перейдем к сути нашего целевого вопроса. Учитывая только физические атрибуты ['HP', 'Attack', 'Defense', 'Speed', 'Sp. Atk', 'Sp. Def'], можем ли мы найти естественные группировки?

Поскольку мы рассмотрели все шаги в предыдущем разделе, сейчас мы их пропустим. Единственное изменение, которое мы внесем в процесс создания приложения, — это выбор рекомендуемого алгоритма (UMAP + HDBSCAN, который считается более надежным по сравнению с GMM, который мы использовали в сценарии 1) на этапе выбора алгоритма при создании приложения.

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

Обзор:

Основная информация:

  • Мы применили алгоритм только к физическим атрибутам покемонов.
  • Мы нашли 4 кластера.
  • Один из кластеров представляет собой «шумовые точки», которые на самом деле не считаются принадлежащими какому-либо кластеру. Мы также видим, что алгоритму не удалось присвоить кластер 5% записей (40 покемонов).

Основная информация:

  • Визуально кажется, что можно утверждать, что на самом деле есть 2 отдельные группы, а не 3, но это спорно. В любом случае близость точек, по крайней мере, между «кластером 2» и «кластером 3» указывает на то, что эти группы, вероятно, не сильно различаются.
  • Некоторые шумовые записи очевидны и распределены равномерно.

Продолжая, мы рассмотрим профили кластеров, чтобы получить общее представление о различиях между кластерами:

  • Основное различие между кластерами состоит в том, что средние значения признаков «кластера 1» ниже, чем их средние значения по всем кластерам, а средние значения признаков «кластера 2» и «кластера 3» кажутся выше, чем их средние значения по всем кластерам. их средние значения по всем кластерам.
  • «кластер 2» и «кластер 3» очень похожи. Кажется, что (в среднем) «кластер 2» имеет более высокие значения «Атака» и «кластер 3», но «кластер 3» имеет (в среднем) более высокие значения «Скорости».

На данный момент у нас уже есть представление о различных группах покемонов. Если мы объединим «кластер 2» и «кластер 3», мы можем в основном получить группы:

  • Сильный покемон.
  • Слабый покемон.

Что неудивительно. Кроме того, мы можем разбить сильных покемонов на 2 дополнительные группы:

  • Покемоны, которые обычно атакуют первыми. (выше «Скорость»).
  • Покемоны, которые сильнее (более высокая «Атака»).

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

Если потребуется дополнительная информация, мы можем продолжить работу, как и раньше, и получить подробный анализ. Например, попробуем описать «кластер 3»:

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

Мы уже ожидаем, что в этом кластере будут сильные покемоны в целом и с более высокой «Скоростью» в среднем, и мы видим, что самое большое подразделение действительно имеет «Скорость › 80,5» (что является высоким).

На этот раз мы не будем углубляться во все подразделения для всех кластеров.

И последнее замечание: для «кластера 3» эксклюзивность описаний хорошая, но не отличная. По сути, это означает, что есть также (довольно много) другие точки, не входящие в «кластер 3», но вы все равно можете описать их с помощью тех же правил.

Заключение

Мы начали с набора данных персонажей покемонов и задали вопрос:

Можем ли мы найти естественные группы в этом наборе данных?

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

Затем мы продемонстрировали, как мы можем автоматически выполнять такой анализ с помощью кластерного приложения AI & Analytics Engine.

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

Приложение: сведения о подразделении

Напоминание: в сценарии 1 у нас есть 3 подразделения. Чтобы продемонстрировать детали подразделения, давайте воспользуемся подразделением 2, в котором всего 3 элемента:

Начинаем читать с левой стороны:

Полный набор данных имеет:

  • 69 записей, принадлежащих кластеру 2.
  • 731 запись, принадлежащая всем остальным кластерам.

Фильтруем по правилу в подразделе: «Легендарный = Ложный». «Другие» остаются с 731 очком (мы знаем, что кластер 1 на самом деле содержит всех нелегендарных покемонов), но в кластере 2 у нас теперь есть только 4 предмета, которые не являются легендарными.

Далее проверяем, сколько у них HP › 121.5. (Относительно высокое значение)

  • 14 из 731 в кластере 1.
  • 3 из 4 в кластере 2.

Наконец, мы проверяем, сколько из отфильтрованных кластеров имеют Attack ‹ = 34:

  • 0 из 14 в кластере 1.
  • 3 из 3 в кластере 2.

Это завершает всю разбивку по количеству записей для каждого правила в интересующем подразделении.

Хорошо, вам может не понадобиться объединять покемонов в кластер в ближайшее время, но мы обещаем, что существует множество вариантов использования в разных доменах. Кластеризация может использоваться в маркетинге для выявления потребительских сегментов; Потоковые сервисы для кластеризации контента на основе тем и информации, а страховые компании для кластеризации потребителей, которые используют свою страховку определенным образом — и это лишь некоторые из них!

Искусственный интеллект и аналитический движок предлагает двухнедельную бесплатную пробную версию, где вы можете испытать кластеризацию на себе, попробуйте!

Первоначально опубликовано на https://www.pi.exchange.