#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:
Извините, но я не могу много сказать по вашему вопросу о том, следует ли вам преобразовывать столбцы дат в категории, потому что я никогда не пробовал этого раньше. Однако я бы не стал классифицировать (например, кодировать) даты как категориальные признаки, потому что это означало бы, что каждая дата будет отдельной категорией сама по себе. Возможно, будет лучше разбить даты на месяцы и закодировать месяцы в двенадцати категориях (но будьте осторожны с высокой мощностью) или, возможно, сезонами (зима, весна, лето, осень).
Тем не менее, цель моего ответа ниже состоит в том, чтобы заставить вас задуматься о том, действительно ли вам нужно выполнять кластеризацию для решения вашего проектного вопроса, прежде чем вы начнете думать о необходимых преобразованиях данных. Я надеюсь, что вы и все остальные, кто читает это, оцените эту попытку:
Основные вопросы, которые вы должны задать себе, это:
- Что вы хотите получить от своего кластерного анализа?
- Поможет ли кластерный анализ достичь этой цели?
Я не могу ответить вам на эти вопросы, потому что недостаточно хорошо знаю ваш проект. Однако вот мои два цента о некоторых проблемах, связанных с кластеризацией.
Одной из основных проблем кластерного анализа является определение сходства в наборе данных. Это становится все более сложным, если у вас смешанные наборы данных типов данных, что верно в вашем случае (категориальные и непрерывные функции). Я знаю, что было предложено несколько матриц расстояния или подобия для объединения непрерывных и категориальных функций (например, матрица расстояний Гауэра и Неконтролируемый случайный лес).
Допустим, вы успешно создали матрицу расстояний смешанного типа данных. Тогда возникает следующий вопрос: какой алгоритм кластеризации вы будете использовать? Довольно часто более традиционные (жесткие) алгоритмы кластеризации (K-средние, иерархическая кластеризация и т.д.) Перечислены из-за их вычислительной эффективности и относительно интуитивных механизмов. Однако эти подходы также являются эвристическими по своей природе. Например, трудно выбрать правильное ограничение, когда в иерархической кластеризации есть два или более разделов с одинаковыми порогами сокращения дендрограмм или оценками силуэта в K-методах. Я также не знаю об альтернативной (например, статистически обоснованной) мере соответствия для этих подходов к кластеризации. Более того, эти традиционные методы кластеризации всегда будут идентифицировать кластеры, даже если на самом деле их нет.
Цель кластерного анализа довольно часто состоит в том, чтобы найти «общие знаменатели», определяющие принадлежность к кластеру. Опять же, как вы будете оценивать правильность разделов и их соответствующие характеристики, потому что правильные разделы неизвестны (в противном случае вы бы не выполняли кластеризацию в первую очередь)? Это еще более проблематично, когда у вас есть разнородные данные, которые плохо разделяются, потому что существует большая вероятность того, что разные алгоритмы будут идентифицировать разные кластеры в одном и том же наборе данных. Какой алгоритм затем определил правильный кластер?
Одним из способов (частично) преодоления этих проблем является (смешанная) кластеризация на основе моделей, но это может быть дорогостоящим с точки зрения вычислений и проблемой для реализации в Python. Я думаю, что в R есть несколько пакетов кластеризации на основе моделей, которые позволяют использовать смешанные наборы данных типа данных (например mclust
), но я не использовал их широко и не изучал их статьи.
P.S. Я действительно думаю, что этот вопрос (или мой ответ), возможно, больше подходит для перекрестной проверки, потому что эта платформа больше фокусируется на теоретических принципах методов, основанных на данных.
*Некоторая литература, которую я нашел интересной, о проблемах, связанных с кластеризацией:
Luxburg Uv, Williamson RC, Гайон И. Кластеризация: наука или искусство? В: Изабель Г., Гидеон Д., Винсент Л., Грэм Т., Даниэль С., редакторы. Материалы семинара ICML по обучению без присмотра и передаче знаний; Материалы исследований в области машинного обучения: PMLR; 2012. С. 65-79.
Пил Л, Ларремор Д. Б., Клаузе А. Основная правда о метаданных и обнаружении сообществ в сетях. Научные достижения. 2017;3(5):e1602548.