Вопрос или проблема
Я работаю с смешанным набором данных, который соответствует данным о потреблении ТВ, с целью сократить количество признаков до только тех, которые имеют отношение к выявлению паттернов потребления ТВ (или групп потребления) с использованием кластеризации.
Набор данных состоит примерно из 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: Эти методы помогут визуализировать данные в низкоразмерном пространстве и могут быть полезны для исследования структуры данных.
Заключение
Ваш подход в целом верен, и с учетом вышеуказанных рекомендаций вы сможете более активно исследовать ваши данные для выявления значимых кластеров, касающихся потребления ТВ. Важной частью данного процесса будет постоянная экспертиза и анализ результатов на каждом этапе, что позволит вам корректировать методику построения кластеров и, соответственно, повышать качество анализа.