Как я могу динамически различать категориальные данные и числовые данные?

12

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

Однако он не уверен в том, как динамически назначать типы данных для определенных числовых данных. Например:

    CITY
    Albuquerque
    Boston
    Chicago

Это, очевидно, не числовые данные и будут сохранены в виде текста. Однако,

    ZIP
    80221
    60653
    25525

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


У нас была пара идей:

  1. Если столбец состоит из целых чисел, пометьте его как категориальный. Это явно не сработает, но это была идея.
  2. Если столбец имеет менее n уникальных значений и является числовым, пометьте его категориальным. Это может быть ближе, но могут все еще быть проблемы с проваливанием числовых данных.
  3. Вести список распространенных числовых данных, которые на самом деле должны быть категориальными, и сравнить заголовки столбцов с этим списком на совпадения. Например, все, что содержит «ZIP», будет категоричным.

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

Пуассон Фиш
источник
Не полное доказательство, но если оно начинается с 0, оно, как правило, не числовое
папараццо
Вы, вероятно, также должны спросить себя, каковы последствия неправильного понимания? Это должно определить, сколько усилий вам нужно приложить к процессу. Хотите ли вы на 90%, или на 99%, или на 99,9999%?
космонавт
Я бы взял все эвристики, предложенные в ответах, как функции и обучил двоичный классификатор.
Эмре
См. Stats.stackexchange.com/a/106400/17230 . Здесь нет настоящей истины.
Scortchi - Восстановить Монику
Смотрите также stats.stackexchange.com/q/336261/17230 .
Scortchi - Восстановить Монику

Ответы:

8

Я не знаю надежного способа сделать это. Вот одна идея из головы:

  1. По умолчанию считайте значения категориальными.
  2. Проверьте наличие различных атрибутов данных, которые подразумевают, что они на самом деле непрерывны. Взвесьте эти атрибуты в зависимости от вероятности их корреляции с непрерывными данными. Вот несколько возможных примеров:
    • Значения целые: +.7
    • Значения являются поплавками: +.8
    • Значения обычно распределяются: +.3
    • Значения содержат относительно небольшое число уникальных значений: +.3
    • Значения не являются одинаковым количеством символов: +.1
    • Значения не содержат ведущих нулей: +.1
  3. Лечить любые столбцы, сумма до более чем 1 как числовой. Отрегулируйте коэффициенты и веса на основе тестирования с различными наборами данных в соответствии с вашими потребностями. Вы могли бы даже создать и обучить отдельный алгоритм машинного обучения только для этого.
jncraton
источник
Этот ответ интересен. Вместо того, чтобы дать другой ответ, я хотел бы предложить модификацию этого. Как насчет лечения этой проблемы в качестве регулярной задачи классификации? Вы можете определить набор функций для каждого столбца на основе атрибутов в этом ответе (целое число, число с плавающей запятой, нормально распределенное число, относительное количество уникальных значений и т. Д.). После этого это всего лишь вопрос использования алгоритма классификации.
Пабло Сво
@PabloSuau, мне нравится эта идея. Алгоритмы классификации могут быть отличным методом здесь. Спасибо jncraton за некоторые характеристики.
Пуассона рыбы
4

Если у вас есть, например, число детей в семье (которая может составлять, например, от 0 до 5), это категорическое или числовая переменная? На самом деле это зависит от вашей проблемы и от того, как вы собираетесь ее решить. В этом смысле, вы можете сделать следующее:

  • Вычислить количество уникальных значений этого столбца
  • Разделите это число на общее количество строк
  • Если это отношение ниже некоторого порогового значения (например, 20%), вы считаете это категорично.

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

Он работал достаточно хорошо для меня в прошлом ...

Бернардо Афлало
источник
2

Поскольку этот вопрос был опубликован перекрестно, первоначальные комментарии @nickcox о перекрестной проверке очень актуальны и верны. Мои взгляды немного отличаются. Например, я бы перефразировал вопрос, разложив его на две части: во-первых, существует вопрос о том, как можно классифицировать поток неизвестной информации по типу данных, и, во-вторых, какую степень ошибочной классификации можно ожидать. Оба вопроса немедленно отвечают, если кто-то хочет найти время, чтобы сделать это.

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

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

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

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

---- Дополнительный комментарий ----

Хорошее обсуждение выделения признаков, как он относится к процессу формирования данных выскочили на резюме здесь:

/stats/191935/what-does-the-process-that-generates-the-data-mean-and-how-does-feature-selec

Извлечение, отбор функций и DGP являются отличной отправной точкой для разработки экспертной системы.

DJohnson
источник
Я удалил вопрос о перекрестной проверке. Для справки, @NickCox заявил: «Это хуже, чем вы думаете, даже если вы думаете, что это хуже, чем вы думаете. Десятичные точки могут скрываться в категориальных переменных, как часть кодированных классификаций, например, отраслей или болезней. Маленькие целые числа могут означать скорее чем категории: 3, что означает 3 машины или кошки, это не то же самое, что 3, что означает «человек владеет автомобилем» или «человек принадлежит кошке». Измерения могут быть просто целыми числами по соглашению, например, высота людей может быть просто сообщается как целое число см или дюймы, кровяное давление - как целое число мм рт. ст. »
Пуассон Фиш
@NickCox второй комментарий: «Количество отличных (лучший термин, чем« уникальный », который все еще имеет первичное значение встречается только один раз) также не является хорошим ориентиром. Число различных высот людей, возможных в умеренных выборках, вероятно, намного меньше, чем число различных религиозных принадлежностей или этнического происхождения ".
Пуассон Фиш