Как я могу уменьшить количество измерений, используя алгоритм кластеризации в смешанном наборе данных?

Вопрос или проблема

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

Набор данных состоит примерно из 20 признаков и 2.000.000 образцов за 1 день потребления. У меня есть доступ к данным за 3 года потребления, так что я могу использовать до ~1 миллиарда данных. Моя идея состоит в том, чтобы начать работать только с несколькими днями потребления (и, следовательно, с несколькими миллионами данных).

3 признака являются непрерывными/числовыми (дата и время потребления, длительность…) и остальные признаки являются дискретными/категориальными, с признаками с бинарными опциями (например, идет ли программа в прямом эфире или нет) или с множественными и даже сотнями опций (например, название программы, тема, тип устройства и т.д.). По этой причине я пытаюсь реализовать алгоритм кластеризации на Python, который может работать со смешанными данными.

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

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

В данный момент я применил алгоритм K-прототипов, который основан на K-средних, но для смешанных данных. Его легко реализовать на Python (https://antonsruberts.github.io/kproto-audience/). Однако он только возвращает метки кластеров, координаты центров и стоимость (определяемую как сумму расстояний всех точек до их соответствующих центров). Поэтому я не знаю, как интерпретировать результаты или как изучить эффект признаков.

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

Некоторые общие методы для сокращения числа признаков:

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

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

  • Случайные леса / ансамблевые деревья. Ансамбли деревьев решений, также называемые случайными лесами, полезны для отбора признаков, в дополнение к тому, что они являются эффективными классификаторами. Лично я предпочту этот метод, так как его легко реализовать. Пример использования приведен в ядре –>
    https://www.kaggle.com/prashant111/xgboost-k-fold-cv-feature-importance?scriptVersionId=48823316&cellId=74

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

Ссылка: https://www.kdnuggets.com/2015/05/7-methods-data-dimensionality-reduction.html

Ответ или решение

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

1. Предварительная обработка данных

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

  • Обработка пропусков: Удалите или заполните пропуски в данных. Признаки с большим процентом пропусков могут быть исключены.

  • Нормализация данных: Чтобы устойчиво сравнивать признаки, необходимо нормализовать непрерывные переменные. Это особенно важно для алгоритмов, основанных на расстоянии, таких как K-Means или K-Prototypes.

  • Кодирование категориальных переменных: Примените методы, такие как one-hot кодирование или кодирование с использованием порядковых шкал для категориальных признаков. Это также позволит алгоритму корректно обрабатывать данные.

2. Выбор алгоритма кластеризации

Вы уже начали применять алгоритм K-Prototypes, который подходит для смешанных данных. Однако вы также можете рассмотреть следующие альтернативы:

  • DBSCAN: Этот алгоритм хорошо справляется с шумом и не требует заранее определенного числа кластеров. Он может быть полезен для поиска более информативных паттернов в данных.

  • Hierarchical Clustering (иерархическая кластеризация): Позволяет получить дендрограмму, что может помочь в визуализации и выборе подходящего числа кластеров.

  • Agglomerative Clustering: Альтернатива иерархической кластеризации, поддерживающая различные метрики расстояния и методы связывания.

3. Оценка качества кластеризации

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

  • Внутренние метрики оценки: Используйте такие метрики, как silhouette score, Davies-Bouldin index или Calinski-Harabasz index. Эти метрики помогут вам понять, насколько хорошо ваши кластеры отделены друг от друга.

  • Сравнение результатов: Для анализа влияния каждого признака вы можете исключать один признак, повторно выполнять кластеризацию и сравнивать метрики качества с предыдущими. Если изменение метрики несущественно, то данный признак может быть исключен.

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

4. Альтернативные методы снижения размерности

Для дополнения вашего анализа можете применять и другие методы снижения размерности:

  • PCA (Метод основных компонент): Хотя PCA не подходит для категориальных данных, комбинировать его с предварительной обработкой будет полезно.

  • t-SNE или UMAP: Эти методы помогут визуализировать данные в низкоразмерном пространстве и могут быть полезны для исследования структуры данных.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...