Боль и лекарство от выбора функций в машинном обучении
Считаете ли вы выбор признаков сложной задачей при работе с многомерными наборами данных?
Кластеризация неразмеченных данных является обычной практикой во многих областях.
В этом блоге мы демонстрируем функцию кластеризации с использованием AI & Analytics Engine PI.EXCHANGE, примененную к базе данных статистики персонажей покемонов.
Введение
Дилемма, которую команда стремилась решить для своих потенциальных клиентов с помощью этой функции (функции/действия), и краткое описание того, как она это делает.
Поиск естественно встречающихся групп похожих элементов в наборе данных является распространенной проблемой во многих областях. Например, в области медицины он применяется для обнаружения групп опухолей по данным об экспрессии генов, а в сфере розничной торговли он используется для сегментации клиентов среди других целей. Эту проблему можно решить с помощью машинного обучения. Однако, в отличие от предиктивного машинного обучения, здесь нет меток, связанных с каждым элементом или точкой данных, которые можно было бы использовать.
Например, предположим, что у нас есть база данных клиентов розничного магазина, содержащая информацию об их покупательском поведении. Информация может быть:
- Продукты, которые покупает каждый покупатель.
- Как часто клиент покупает. (еженедельно? ежемесячно? и т. д.).
- Средние расходы за некоторый период времени.
- и т. д.
Мы хотели бы разделить клиентов на группы, которые в некотором смысле «похожи», а затем применить особую маркетинговую кампанию для каждой группы, поскольку она должна быть более эффективной, чем общая маркетинговая кампания.
Применение процесса кластеризации сопряжено со многими препятствиями: Какой алгоритм кластеризации использовать? Сколько кластеров у моих данных? Как я могу эффективно запустить его на больших наборах данных? Как я понимаю сгенерированные кластеры? Как визуализировать результаты? и т. д.
Даже технические знания, такие как соответствующие навыки кодирования, могут не помочь вам преодолеть эти препятствия.
AI & Analytics Engine решает именно эти проблемы для пользователей, упрощая кластеризацию для всех. Этому способствуют внутренние приложения, которые могут решить многие типы проблем. В Engine пользователи могут просто загружать свои данные и выбирать кластеризацию во время создания приложения, а также указывать, какие столбцы релевантны. Engine будет автоматически генерировать результаты в приложении для кластеризации. Он также поставляется с автоматическим анализом результатов кластеризации, повышающим объяснимость, в дополнение к надежности и простоте использования, так что пользователь может перейти от данных к пониманию за считанные минуты.
Нахождение естественных группировок покемонов
Почему это проблема? Подумайте: трудоемки ли традиционные методы? Или влияние невыполнения этого действия/этапа.
Чтобы продемонстрировать процесс кластеризации на движке, воспользуемся набором данных Pokémon stats от Kaggle. Мы используем эти данные, потому что они просты и идеально подходят для демонстрации ключевых аспектов функции кластеризации Engine.
Для тех, кто не в курсе: Покемон — это японская медиа-франшиза, управляемая The Pokémon Company, компанией, основанной Nintendo, Game Freak и Creatures. Есть сотни существ покемонов, каждый со своими атрибутами.
Набор данных содержит список из 800 существ покемонов и их атрибутов. Мы хотели бы «обнаружить» группы покемонов, используя их атрибуты. Традиционно, чтобы получить представление о данных, пользователям необходимо вручную применять инструменты статистического анализа к набору данных, чтобы найти «группы», и в целом тратить много времени на анализ результатов.
Ниже приведены атрибуты набора данных:
Первоначальные выводы
Прежде чем погрузиться в решение, мы обычно пытаемся лучше понять данные. Первый шаг — загрузка данных и наблюдение за анализом:
Используя сюжет, мы получаем представление о распределении признаков. Используя анализ, мы можем сгруппировать по определенным признакам и получить качественную оценку различий между группами.
Пример: группировка по признаку generation
:
Кажется, что каждое поколение покемонов имеет довольно похожее распределение функций. Следовательно, мы можем сделать вывод, что generations
на самом деле не является важной функцией.
Мы можем попытаться найти естественные группировки, используя физические атрибуты покемонов (скорость, атака и т. д.). Парный сюжет может помочь:
Мы определенно можем видеть корреляции (например, Defense
положительно коррелирует с Attack
, что означает, что они имеют тенденцию быть выше вместе), но трудно найти какие-либо группы, не говоря уже об их объяснении с помощью этого типа диаграммы и предоставленных данных. Мы начинаем понимать, что нам нужно что-то еще.
Приложение кластеризации — постановка задачи
Как фича/действие решает проблему, объясните фичу или действие — лучше всего простым языком.
Как мы видели ранее, стандартные инструменты анализа данных могут быть бесполезны для поиска естественных группировок и требуют трудоемкого ручного анализа. В нашем случае мы хотели бы автоматизировать процесс, для этого мы можем использовать приложение для кластеризации.
Наша цель будет состоять в том, чтобы обнаружить естественные группы, используя физические атрибуты покемонов, например: HP, Attack, Defense, Sp. Atk, Sp. Def
и Speed
. Однако в качестве проверки здравомыслия мы начнем с использования всех физических атрибутов плюс еще одна особенность: Legendary
, потому что у нас есть основания полагать, что легендарный покемон должен сильно отличаться от других. Ведь они легендарны!
Легендарные покемоны являются «самыми сильными», и, следовательно, они должны демонстрировать физические характеристики, которые находятся на высоком уровне. Мы можем легко увидеть это, используя анализ данных:
Мы ожидаем, что AI & Analytics Engine найдет как минимум 2 отдельные группы при использовании этого набора функций. Позже мы удалим эту функцию и позволим приложению кластеризации попытаться найти естественные группы без нее. Вручную сделать это намного сложнее!
Кластерное приложение — реализация
Что делает действие функции — Продемонстрируйте использование функции.
1) Пошагово со скриншотами.
2) Запишите процесс использования функции в наборе данных.
Сценарий 1: Кластеризация со столбцом Legendary
Для первого сценария мы подробно рассмотрим, как реализовать все этапы приложения кластеризации и как понять сгенерированный анализ. Начнем с создания нового приложения:
Затем мы решили использовать приложение кластеризации и выбрать набор данных для обработки:
Мы приступаем к выбору необходимых столбцов для кластеризации. Этот шаг необходим, поскольку именно пользователь должен решать, какие столбцы следует учитывать при определении сходства двух покемонов. Обратите внимание, чтобы помочь пользователю, мы предлагаем представление распределения столбцов.
Теперь нам нужно выбрать алгоритмы кластеризации. Мы начнем с выбора классического алгоритма: Гауссовой смешанной модели (GMM). Детальное рассмотрение этого алгоритма выходит за рамки этого блога. Мы не знаем заранее, сколько кластеров мы собираемся найти, поэтому мы просто используем настройки по умолчанию, которые будут искать ряд вариантов и автоматически выбирать лучший для нас:
Наконец, мы просматриваем конфигурацию приложения и приступаем к кластеризации:
Затем мы переходим к окну приложения кластеризации. Мы можем видеть важную информацию, такую как размер набора данных, создавший его пользователь, выбранные столбцы для кластеризации и текущий прогресс обучения моделей кластеризации. и модели, закончившие обучение.
После завершения обучения мы можем просмотреть результаты анализа, «понять» наши кластеры и экспортировать результаты. У нас есть много информации, поэтому следующий фрагмент видео является просто обзором. Мы сразу же погрузимся в эти результаты в следующем обзоре:
Видеообзор кластерного анализа:
https://www.pi.exchange/hubfs/Video%20links%20for%20publications/04_clustering_results_overview.mp4
Пошаговое руководство по обзору кластерного анализа
Во-первых, мы видим сводку анализа. Критическая информация заключается в том, что GMM обнаружил 2 кластера, как мы и подозревали при просмотре анализа данных, сгруппированных по признаку Legendary
. Кроме того, GMM удалось сгруппировать все доступные записи данных.
Резюме анализа
Затем мы можем просмотреть низкоразмерное (2D) представление данных, где каждая запись характеристик покемонов (7D-вектор) сопоставляется с точкой в этом представлении:
Кроме того, мы можем выделить задачи кластеризации. Мы видим, что он почти полностью соответствует представленной структуре, которая представляет собой два сгустка точек, представляющих два кластера.
Прежде чем мы углубимся в объяснения, мы уже можем иметь некоторое представление о различиях между кластерами, используя вкладку «Профили кластера».
На оси Y мы видим два кластера, которые у нас есть.
На оси X у нас есть наиболее важные признаки (в данном случае все они), которые помогли разделить кластеры. Цвет каждой ячейки указывает, каково среднее значение признака для определенного кластера и признака по сравнению со средним значением этого признака по всем кластерам. Другими словами, если у нас есть сильные цветовые различия для признака между кластерами, это означает, что среднее значение признака сильно различается между кластерами и, таким образом, является хорошим «разделяющим» признаком.
Например, мы можем видеть, что для кластера 1 (большего из кластеров, содержащего 731 точку) функция Legendary_true
(это исходная функция Legendary
, разделенная на категории, которые она содержит, либо true
, либо false
) равна нулю! Это на 100% ниже среднего и указывает на то, что все покемоны в этом кластере не легендарные покемоны.
С другой стороны, мы видим высокое значение (выше среднего) этого признака во 2-м кластере, что говорит об обратном. То есть меньший кластер — это кластер легендарных покемонов.
Кроме того, мы также можем видеть, что в среднем физические атрибуты легендарных покемонов (кластер 2), как правило, имеют более высокие значения, что согласуется с тем, что мы видели в анализе, сгруппированном по признаку Legendary
.
Далее мы хотели бы получить некие «правила», которые укажут нам, как именно разделить эти кластеры. Мы можем получить их, используя «детальное описание» кластеров.
Давайте углубимся в кластер 2:
Во-первых, мы наблюдаем покрытие для этого кластера. Покрытие показывает процент элементов в кластере, к которым применимо сгенерированное описание. У нас также есть эксклюзивность, которая показывает, относятся ли элементы, к которым применяется описание, в основном к выбранному кластеру.
Наш охват и эксклюзивность превосходны, и мы видим, что наши описания объясняют все записи (покемонов) в кластере, кроме одной.
Правила также просты. Во-первых, мы видим, что можем описать 68 из 69 общих точек в кластере двумя простыми наборами правил, называемыми «подразделениями».
Большинство записей, которые были отнесены к кластеру 2 (65 элементов), имеют простое правило: Legendary == True
.
Для оставшихся 4 записей у нас есть 3, которые можно описать в подразделе 2. В частности, они НЕ Legendary
, но по-прежнему имеют высокое значение очков жизни (HP), которое равно > 121.5,
, и более низкие значения для Attack
, которые равны < 34
.
Если пользователь заинтересован в более глубоком изучении конкретного подразделения, это можно сделать, щелкнув «просмотреть подробности» в подразделе, описанном в приложении.
Сценарий 2: кластеризация без столбца Legendary
В этом разделе мы пропустим все детали и перейдем к сути нашего целевого вопроса. Учитывая только физические атрибуты ['HP', 'Attack', 'Defense', 'Speed', 'Sp. Atk', 'Sp. Def']
, можем ли мы найти естественные группировки?
Поскольку мы рассмотрели все шаги в предыдущем разделе, сейчас мы их пропустим. Единственное изменение, которое мы внесем в процесс создания приложения, — это выбор рекомендуемого алгоритма (UMAP + HDBSCAN, который считается более надежным по сравнению с GMM, который мы использовали в сценарии 1) на этапе выбора алгоритма при создании приложения.
После настройки приложения и запуска обучения мы получаем результаты анализа. Я кратко расскажу об основных выводах, которые мы можем сделать после наблюдения за результатами:
Сводка
Основная информация:
- Мы применили алгоритм только к физическим атрибутам покемонов.
- Мы нашли 4 кластера.
- Один из кластеров представляет собой «шумовые точки», которые на самом деле не считаются принадлежащими какому-либо кластеру. Мы также видим, что алгоритму не удалось присвоить кластер 5% записей (40 покемонов).
Далее мы хотим получить некоторое визуальное представление кластеров:
Основная информация:
- Визуально кажется, что можно утверждать, что на самом деле существует 2 отдельные группы, а не 3, но это спорно. В любом случае близость точек, по крайней мере, между
Cluster 2
иCluster 3
указывает на то, что эти группы, вероятно, не сильно различаются. - Некоторые шумовые записи очевидны и распределены равномерно.
Продолжая, мы рассмотрим профили кластеров, чтобы получить общее представление о различиях между кластерами:
- Основное различие между кластерами заключается в том, что средние значения признаков
cluster 1
ниже, чем их средние значения по всем кластерам, в то время как средние значения признаковcluster 2
иcluster 3
кажутся выше, чем их средние значения по всем кластерам. Cluster 2
иcluster 3
очень похожи. Кажется, что (в среднем)cluster 2
имеет более высокие значенияAttack
иcluster 3
, ноcluster 3
имеет (в среднем) более высокие значения дляSpeed
На данный момент у нас уже есть представление о различных группах покемонов. Если мы объединим cluster 2
и cluster 3
, мы можем получить группы:
- Сильный покемон.
- Слабый покемон.
Что неудивительно. Кроме того, мы можем разбить сильных покемонов на 2 дополнительные группы:
- Покемоны, которые обычно атакуют первыми. (выше
Speed
). - Покемоны, которые сильнее (выше
Attack
)
Если нас устраивает это объяснение, мы можем экспортировать данные вместе со столбцом идентификатора кластеризации в платформу или в виде загружаемого файла.
Если потребуется дополнительная информация, мы можем продолжить работу, как и раньше, и получить подробный анализ. Например, попробуем описать cluster 3
:
Сначала нам нужно принять во внимание тот факт, что для этого кластера покрытие немного ниже по сравнению с предыдущим разделом. Тем не менее, это все еще хорошо. Таким образом, приведенное ниже объяснение подразделения применимо к большинству элементов в этом кластере.
Мы уже ожидаем, что в этом кластере будут сильные покемоны в целом и с более высоким средним Speed
, и мы видим, что у самого большого подразделения действительно есть Speed > 80.5
(что является высоким).
На этот раз мы не будем углубляться во все подразделения для всех кластеров.
И последнее замечание: для cluster 3
эксклюзивность описаний хороша, но не велика. По сути, это означает, что в cluster 3
есть также (несколько) другие точки не, но вы все равно можете описать их по тем же правилам.
Подведение итогов: (Результат — Повторите выгоду)
Подумайте: каков результат, был ли результат достигнут быстро/с меньшим количеством шагов, чем традиционные методы или кодирование?
Мы начали с набора данных персонажей покемонов и задали вопрос:
Можем ли мы найти естественные группы в этом наборе данных?
Мы увидели, что, хотя мы можем найти некоторые четкие разделения с помощью анализа данных и группировки по некоторым признакам, это трудно выполнить, если мы попытаемся найти группы, основанные только на физических атрибутах покемонов.
Затем мы продемонстрировали, как мы можем автоматически выполнять такой анализ с помощью кластерного приложения AI & Analytics Engine.
В течение очень короткого промежутка времени (около 15 минут) нам не только удалось получить результат кластеризации, готовый для загрузки или интеграции обратно в движок, но также получить подробный анализ, который разбивает решения по кластеризации с точки зрения высокого уровня различий между кластеров, вплоть до точных правил и числовых значений, разделяющих каждый кластер.
Приложение: сведения о подразделении
Напоминание: в сценарии 1 у нас есть 3 подразделения. Чтобы продемонстрировать детали подразделения, давайте воспользуемся подразделением 2, в котором всего 3 элемента:
Начинаем чтение с левой стороны;
Полный набор данных имеет:
- 69 записей, принадлежащих кластеру 2.
- 731 запись, принадлежащая всем остальным кластерам.
Фильтруем по правилу в подразделе: Legendary = false
. «Другие» остаются с 731 очком (мы знаем, что кластер 1 на самом деле содержит всех нелегендарных покемонов), но в кластере 2 у нас теперь есть только 4 предмета, которые не являются легендарными.
Далее проверяем, сколько у них HP > 121.5
. (Относительно высокое значение)
- 14 из 731 в кластере 1.
- 3 из 4 в кластере 2.
Наконец, мы проверяем, сколько из отфильтрованных кластеров имеют Attack <= 34
:
- 0 из 14 в кластере 1.
- 3 из 3 в кластере 2.
Это завершает всю разбивку по количеству записей для каждого правила в интересующем подразделении.
Хорошо, хорошо, вам может не понадобиться объединять покемонов в кластер в ближайшее время, но мы обещаем, что существует множество вариантов использования в разных доменах. Кластеризацию можно использовать в рамках маркетинга для выявления сегментов клиентов; Сервисы потоковой передачи для группировки контента по темам и информации, а Поставщики страховых услуг для группировки потребителей, которые используют свою страховку определенным образом — и это лишь некоторые из них!
Искусственный интеллект и аналитический движок предлагает двухнедельную бесплатную пробную версию, где вы можете испытать кластеризацию на себе, попробуйте!