Как статистически доказать, имеет ли столбец категориальные данные или не использует Python


10

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

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

Я пробовал ниже критерия хи-квадрат, но я не уверен, что это достаточно хорошо

import numpy as np
data = np.random.randint(0,5,100)
import scipy.stats as ss
ss.chisquare(data)

Пожалуйста, порекомендуйте.


1
Не могли бы вы уточнить, правильно ли я понял, что вы хотите различать int, используемый в качестве порядковой переменной и используемый в качестве произвольного категориального кодирования? У меня нет ответа, но это может помочь другим читателям понять, что вы хотите. Интуитивно я не думаю, что Chi2 мог бы надежно выполнить эту работу.
ReneBt

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

1
Откуда правило «результат должен состоять в том, что это категориальная переменная, потому что она имеет только 5 уникальных значений». родом из?
Деннис Соемерс

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

Хотя другие правильно отметили, что это невозможно, тем не менее, это создаст интересную проблему машинного обучения. Несомненно, существуют проблемные области, в которых можно сделать достаточно точные прогнозы.
Джон Колман

Ответы:


34

Краткий ответ: вы не можете.

Не существует статистического теста, который бы указывал, является ли предиктор, содержащий целые числа от 1 до 10, числовым предиктором (например, число детей) или кодирует десять различных категорий. (Если предиктор содержит отрицательные числа, или наименьшее число больше единицы, или он пропускает целые числа, это может свидетельствовать о его категориальной кодировке - или это может означать, что аналитик использовал нестандартную кодировку.)

Единственный способ убедиться в этом - использовать опыт предметной области или кодовую книгу набора данных (которая должна существовать всегда).


14
«Кодовая книга набора данных (которая должна существовать всегда)» - Ха, хороший.
Кодиолог

12

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

Это хуже, чем ты думаешь, даже если ты думаешь, что это хуже, чем ты думаешь.

  1. Ответ @Stephan Kolassa уже имеет одно ключевое значение. Маленькие целые числа могут означать количество, а не категории: 3, означающее 3 машины или кошки, не совпадает с 3, что означает «человек владеет автомобилем» или «человек принадлежит кошке».

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

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

  4. Количество отличных (лучший термин, чем «уникальный», который все еще имеет первичное значение встречается только один раз) значений также не является хорошим ориентиром. Число людей разной высоты, возможных в умеренных выборках, вероятно, намного меньше, чем количество различных религиозных принадлежностей или этнического происхождения.


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

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

7

Что ж, я думаю, что это даже хуже, чем предполагают другие ответы: данные не являются категориальными или числовыми подвидом æternatis - аналитик определяет уровень измерения как ответ на конкретный вопрос в конкретном случае. Смотрите ответ Glen_b здесь .

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


0

Это открытый вопрос исследования. Смотрите, например, работу Valera et al. ( бумага ) или расширения (например, один от Dhir et al. - бумага ).

Редактировать:

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

(Из бумаги Валеры.)

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


Не могли бы вы рассказать нам, что вы имеете в виду под «открытым вопросом исследования»? Пожалуйста, рассмотрите также объяснение того, как ваш ответ не противоречит другим ответам в этой теме.
whuber

Конечно, позвольте мне отредактировать мой ответ.
Астрид,

Спасибо. При просмотре статьи Валеры мне показалось, что она делает гораздо более сильное утверждение: а именно, имеет смысл иметь метод угадывания типов переменных и, в частности, различать категориальные и порядковые данные. Я не изучал метод, но предполагаю, что он должен быть основан (по крайней мере частично) на рассмотрении отношений между такими переменными и другими переменными, с которыми, как предполагается, они связаны. Я не могу понять, как «бесконечный образец» (каким бы он ни был) был бы каким-либо дополнительным использованием: не могли бы вы объяснить, как это сделает проблему «легкой»?
whuber

На самом деле это очень надежный метод, и я сам детально его изучил (что заставляет меня думать несколько предвзято); но у них идея очень умная. Мы предполагаем, что каждый тип столбца может быть описан как смесь типов (во многом как модель смеси), а затем мы стремимся найти тип с наибольшим весом, а затем назовем соответствующий «тип» реальным типом переменной. Что касается вывода типов, это очень умный и лучший автоматический метод (который я знаю). Если другие знают о других, пожалуйста, поделитесь!
Астрид,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.