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

Пример

Мы используем игрушечный пример, чтобы облегчить понимание метода. Скажем, у нас есть банк со 100 клиентами. Мы хотим сосредоточиться на основных характеристиках этих клиентов. В этом примере мы рассматриваем только 4 аспекта (как вы понимаете, это очень упрощенно):

  • Богатство — также называемое «активом под управлением» (AUM).
  • Количество уникальных финансовых инструментов
  • Количество транзакций
  • Возраст

Кластеризация

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

Проверка

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

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

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

Где:

a(i) = среднее расстояние клиента i до других точек из того же кластера.

b(i) = среднее расстояние от i до других точек из ближайшего кластера.

Изображение ниже помогает лучше понять, что именно означают эти расстояния.

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

Примечание: коэффициент силуэта НЕ адаптируется, если вы используете метод кластеризации, который может идентифицировать невыпуклые кластеры. Для получения дополнительной информации я рекомендую Руководство пользователя scikit Learn.

Выполнение

Теперь, когда наши кластеры хорошо определены, как нам визуализировать результаты? В частности, как осмысленно сообщить наши результаты остальным коллегам?

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

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

  • Насколько точны обнаруженные шаблоны?
  • Насколько хорошо наблюдение (то есть клиент) «вписывается» в конкретный кластер?

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

Шаг 1. Определите центры для каждого кластера

Во-первых, мы определяем координаты центра для каждого кластера. Мы хотим убедиться, что каждый кластер отличается, чтобы он был достаточно удобочитаемым. Для этого находим координаты точек, расположенных на окружности (радиус 1) и равноудаленных друг от друга. Если бы мы получили 10 кластеров, центры были бы разделены следующим образом:

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

Шаг 2: создайте координаты для каждого кластера

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

Для каждого кластера находим координаты x и y:

где mu_x — первая координата центра кластера, найденная на предыдущем шаге. Силуэт – это коэффициент, соответствующий качеству кластера.

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

Шаг 3: вычислите расстояние до центра

Мы вычисляем расстояние от каждой сгенерированной точки до центра кластера. Простое евклидово расстояние подойдет.

Шаг 4: сопоставьте каждую точку с правильной сгенерированной точкой

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

Полученные результаты

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

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

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

Заключение

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

Ссылка

Кластеризация GMM (1) — https://en.wikipedia.org/wiki/Mixture_model

Кластеризация GMM (2) — следующий блог дает довольно хорошее объяснение концепции: https://jaketae.github.io/study/gaussian-mixture-models/

Коэффициент силуэта — https://en.wikipedia.org/wiki/Silhouette_(clustering)

Библиотека Plotly — https://plotly.com/