Подходы к кластеризации/алгоритмы для данных datetime с категориальными типами dtypes

#python #time-series #cluster-analysis #categorical-data

Вопрос:

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

Я постарался сделать пример как можно более общим для дальнейшего использования. Это выбранные (скремблированные) записи для контекста:

   shipment        delivery          cost        time        location                weight_kg

 2020-04-22      2020-04-27         77.31     19:42:00     UK:66c54f531....           0.5
 2020-04-22      2020-04-25         44.14     19:42:00     DK:22c54f531....           2.23
 2020-04-24      2020-04-24         53.84     09:55:00     UK:66c54f531....           1.57 
 2020-04-24      2020-04-26         22.09     14:27:00     UK:66c54f531....           1.2
 

Моей первой склонностью было создать модель прогнозирования спроса на отгрузку/количество месяцев(отгрузка), но, учитывая количество функций, многомерный случай казался более уместным. Я просто не уверен, какие дополнительные функции добавить — и что более важно — чтобы этот проект стал универсальным (линейная регрессия). Мои начальные EDA изображали переменные с низкой корреляцией и удалялись в противном случае, чтобы избежать мультиколлинеарности.

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

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

  • Итак, должен ли я скорее рассматривать столбцы дат как категории? Даже если некоторые функции являются временными рядами (столбец времени).

Ответ №1:

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

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

Основные вопросы, которые вы должны задать себе, это:

  1. Что вы хотите получить от своего кластерного анализа?
  2. Поможет ли кластерный анализ достичь этой цели?

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

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

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

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

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

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

*Некоторая литература, которую я нашел интересной, о проблемах, связанных с кластеризацией:

Luxburg Uv, Williamson RC, Гайон И. Кластеризация: наука или искусство? В: Изабель Г., Гидеон Д., Винсент Л., Грэм Т., Даниэль С., редакторы. Материалы семинара ICML по обучению без присмотра и передаче знаний; Материалы исследований в области машинного обучения: PMLR; 2012. С. 65-79.

Пил Л, Ларремор Д. Б., Клаузе А. Основная правда о метаданных и обнаружении сообществ в сетях. Научные достижения. 2017;3(5):e1602548.