Принципиальный способ свертывания категориальных переменных со многими уровнями?


58

Какие методы доступны для объединения (или объединения) многих категорий в несколько с целью использования их в качестве входных данных (предиктора) в статистической модели?


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

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

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

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

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

изменить : чтобы быть понятным, речь идет о сворачивающихся категориях (не выбирая их), а категории являются предикторами или независимыми переменными. Оглядываясь назад, эта проблема кажется подходящим временем, чтобы «упорядочить их всех и позволить Богу разобраться в них». Рад видеть этот вопрос интересным для многих людей!


2
В моем комментарии на stats.stackexchange.com/questions/230636/… У меня есть длинный список подобных вопросов здесь! Посмотрите ... Кроме того, поиск на этом сайте с ключевыми словами "много уровней", вы найдете много похожих вопросов, мало хороших ответов.
kjetil b halvorsen

3
Я вернусь к этому, когда у меня будет время ... тем временем, следующий документ является весьма актуальным, который, кажется, частично отвечает на этот вопрос: epub.ub.uni-muenchen.de/12164/1/petry_etal_TR102_2011. pdf
kjetil b halvorsen

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

1
@ssdecontrol, да, мой прототипный пример - номера телефонов (или другие идентификаторы). По сути, правильный ответ на вопрос о том, как моделировать, используя их, - нет!
seanv507

2
Если вы хотите вывести иерархии, вы можете взглянуть на схемы встраивания нейронных сетей. По сути, они используют сокращенный набор нейронов между категориями и остальной частью модели, так что модель должна находить линейные проекции похожих категорий при решении. По сути это нелинейная версия факторизационных машин. tenorflow.org/guide/embedding
seanv507

Ответы:


41

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

В простейшем случае у вас была бы линейная модель «одностороннего ANOVA» с одним категориальным предиктором: где кодирует уровень категориальной переменной ( категория). Но вы можете предпочесть решение, которое объединяет некоторые уровни (категории) вместе, например,

yij=μ+αi+ϵij,
i
{α1=α2,α3=α4=α5.

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

L=ωi<j|αiαj|.
αiαjω

Я никогда не имел дело с такими моделями, и первое, что пришло мне в голову, - это выше. Тогда я решил посмотреть, реализовано ли что-то подобное. Я сделал некоторые поиски Google , и вскоре понял , что это называется слияние категорий; поиск lasso fusion categoricalдаст вам много ссылок для чтения. Вот некоторые из них, которые я кратко рассмотрел:

Gertheiss and Tutz 2010, опубликованный в «Анналах прикладной статистики», выглядит как недавний и очень читаемый документ, содержащий другие ссылки. Вот его резюме:

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

Мне нравятся их лассо-подобные пути решения, которые показывают, как уровни двух категориальных переменных объединяются вместе, когда сила регуляризации увеличивается:

Gertheiss and Tutz 2010


1
И только после того, как я написал все это, я заметил, что @Kjetil дал ссылку на одну из работ Тутса уже неделю назад ...
говорит амеба: восстановите Монику

1
Спасибо, что покопались в литературе по этому вопросу! Это определенно хорошая отправная точка, особенно имея название для этой техники («слияние»), которую я могу найти
shadowtalker

10

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

Кроме того, в подобных ситуациях кажется, что на самом деле нужно принять два смешанных решения: 1) как объединить категории, которые есть у вас, когда вы подходите под модель, и 2) какая объединенная категория становится «другой», когда вы по умолчанию включите любую новую майоры, которые кто-то придумывает после того, как вы подходите к своей модели. (Случайный эффект может обработать этот второй случай автоматически.)

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

Случайный эффект обрабатывает множество уровней, динамически объединяет («черпает силы») разные уровни, может предсказывать ранее невидимые уровни и т. Д. Одним из недостатков может быть то, что распределение уровней почти всегда считается нормальным.


1
Вы смотрели на использование матрицы близости в качестве матрицы расстояний для кластеризации? stats.stackexchange.com/questions/270201/… ?
Кит

7

Один из способов справиться с этой ситуацией - перекодировать категориальную переменную в непрерывную, используя так называемое «целевое кодирование» (так называемое «ударное кодирование») [1]. Пусть будет входной переменной с категориальными уровнями , и пусть будет выходной / целевой / ответной переменной. Замените на , гдеZz1,...,zKYZImpact(Z)

Impact(zk)=E(Y | Z=zk)E(Y)

для непрерывного многозначных . Для двоичного значения используйте вместо просто .YYlogitEE

В библиотеке category_encoders есть реализация Python [2].

Вариант под названием «ударное кодирование» был реализован в пакете R Vtreat [3] [4]. Пакет (и сам код воздействия) описан в статье этих авторов от 2016 года [5] и в нескольких сообщениях в блоге [6]. Обратите внимание, что текущая реализация R не обрабатывает полиномиальные (категориальные с более чем 2 категориями) или многовариантные (векторные значения) ответы.

  1. Даниэле Миччи-Баррека (2001). Схема предобработки для категориальных атрибутов с высокой мощностью в задачах классификации и прогнозирования. Информационный бюллетень ACM SIGKDD , том 3, выпуск 1, июль 2001 г., стр. 27–32. https://doi.org/10.1145/507533.507538
  2. Категория Кодеры. http://contrib.scikit-learn.org/categorical-encoding/index.html
  3. Джон Маунт и Нина Зумель (2017). vtreat: Статистически обоснованный процессор / обработчик data.frame. Версия пакета R 0.5.32. https://CRAN.R-project.org/package=vtreat
  4. Win-Vector (2017). vtreat. GitHub репозиторий на https://github.com/WinVector/vtreat
  5. Зумель, Нина и Маунт, Джон (2016). vtreat: процессор data.frame для прогнозного моделирования. 1611.09477v3, ArXiv e-prints . Доступно по адресу https://arxiv.org/abs/1611.09477v3 .
  6. http://www.win-vector.com/blog/tag/vtreat/

Что такое логит Е? Не могли бы вы поделиться формулой самой?
Оптимус Прайм

@OptimusPrime logit E - логит ожидания
shadowtalker

Хорошо. Таким образом, в этом случае Impact (zk) = log (E (Y | Z = zk) −E (Y)) ИЛИ Impact (zk) = log (E (Y | Z = zk)) - log (E (Y) )?
Оптимус Прайм

2
Это контролируемое обучение и потребуются сложные корректировки для определения количества степеней свободы, которые «украдены» у Y.
Фрэнк Харрелл

3
Наверняка - любой метод, который использует Y для руководства обработкой категорий для категориального предиктора, будет подвергаться переобучению, и будет трудно получить достаточно широкие интервалы неопределенности, чтобы быть точными. Я сосредоточился на обучении без учителя, чтобы эти проблемы не возникали.
Фрэнк Харрелл

6

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

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

Мне очень нравится предложение о наказании по адресу https://stats.stackexchange.com/users/28666/amoeba @amoeba.


Не могли бы вы взглянуть на мой вопрос stats.stackexchange.com/q/383887/44368 ? Спасибо.
Ганс

Оптимально ли оценивать метод, описанный на слайде 15 этой лекции ? Трудно найти эти термины, все они встречаются в других контекстах.
Shadowtalker

1
Я уверен, что это 0,85
Фрэнк Харрелл

Это звучит как (лучшая) версия идеи целевого кодирования из машинного обучения, например stats.stackexchange.com/questions/398903/…
kjetil b halvorsen

2

В статье « Схема предварительной обработки для категориальных атрибутов с высокой степенью кардинальности в задачах классификации и прогнозирования » использует иерархическую структуру в атрибутах категории во вложенной «эмпирической байесовской» схеме на каждом пуле / уровне, чтобы отобразить категориальную переменную в вероятности апостериорного класса, которая может быть использован непосредственно или как вход в другие модели.


Это в основном то, что предложил @Wayne (модели смешанных эффектов ~ частая версия байесовских иерархических моделей), и то, что я предложил в комментарии к вопросу. Однако ОП хочет вывести иерархию.
seanv507

1

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

Но вполне может быть, что проблема заключается в моделировании, я не уверен, что обычные методы обработки категориальных предикторных переменных действительно дают достаточные рекомендации при наличии категориальных переменных с очень многими уровнями, см. Этот сайт для тега [many-categories]. Есть, конечно, много способов, которые можно попробовать, один может быть (если это хорошая идея для вашего примера, я не могу знать, вы не сказали нам свое конкретное приложение), своего рода иерархическая категориальная переменная (переменные), то есть вдохновленная системой, используемой в биологической классификации, см. https://en.wikipedia.org/wiki/Taxonomy_(biology), Там индивид (растение или животное) классифицируется сначала по домену, затем по королевству, типу, классу, порядку, семье, роду и, наконец, по видам. Таким образом, для каждого уровня в классификации вы можете создать факторную переменную. Если ваши уровни, скажем, продукты продаются в супермаркете, вы можете создать иерархическую классификацию, начинающуюся с [продукты питания, кухонные принадлежности, другое], тогда продукты питания можно классифицировать как [мясо, рыба, овощи, крупы, ...] и скоро. Просто возможность, которая дает предварительную иерархию, конкретно не связанную с результатом.

Но ты сказал:

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.