"Начиная"

Расширение целевой кодировки

Использование целевой кодировки, когда ваши категориальные переменные имеют иерархическую структуру

В самом начале этого тысячелетия, когда мои волосы были намного темнее, я написал небольшую статью с довольно длинным названием, озаглавленную « Схема предварительной обработки для категориальных атрибутов высокой мощности в задачах классификации и прогнозирования ». Это была простая статья, которую я решил написать, руководствуясь очень практической потребностью в методе работы с типами данных, которые было трудно подключить к моделям машинного обучения (ML). В то время я работал над моделями машинного обучения для обнаружения мошеннических транзакций электронной коммерции. Поэтому я имел дело с очень разреженными категориальными переменными, такими как почтовые индексы, IP-адреса или артикулы. Я не смог найти простого способа предварительной обработки таких переменных, за исключением традиционного горячего кодирования, которое плохо масштабировалось для ситуаций, когда приходится иметь дело с сотнями или даже тысячами уникальных значений. Популярный в то время метод дерева решений - алгоритм C5.0 Р. Quinlan , предоставил возможность группировать отдельные наборы значений в рамках процесса создания дерева. Однако C5.0 был проприетарным алгоритмом, и поэтому методы, использованные для разработки, которые они назвали подмножествами дискретных значений, не были раскрыты.

Таким образом, я придумал свой очень прагматичный метод. Я заменил исходное категориальное значение ожидаемым значением цели с учетом значения переменной. Это причудливый способ сказать, что я использовал для задач двоичной классификации долю истинных целей Y, наблюдаемую в обучающих данных, когда входная переменная X принимала значение Си. Однако этот метод хорошо распространяется и на задачи регрессии, и на задачи многоклассовой классификации. Просто замените ввод на среднее целевого значения, когда X = Xi, для регрессионных моделей, или используйте N-1 вероятностные кодировки для задач классификации N -класса. Вот и все, или почти, и ваша трудноразрешимая категориальная переменная легко становится гораздо более мягкой и информативной, непрерывной переменной.

Что усложняет ситуацию, так это то, что при работе с входными переменными очень высокой мощности многие значения могут иметь относительно небольшой размер выборки. Следовательно, простое доверие к статистике цели может означать проблемы (а именно проблемы переобучения). По этой причине я просмотрел некоторую литературу и применил подход сглаживания, в соответствии с которым оценка цели при заданном X = Xi смешивается с априорной вероятностью цели (или исходный уровень). Смешивание контролируется параметром, который зависит от размера образца. Чем больше выборка, тем больше оценка соотносится с целевым значением, заданным X = Xi; чем меньше размер выборки, тем больше оценка приближается к общей базовой линии для цели.

Приведенная выше формула описывает способ реализации «смешивания», где Ni - размер выборки для X = Xi,, а лямбда-функция - некоторая монотонно возрастающая функция выборки. размер.

Статья появилась во второй публикации ACM SIGKDD Explorations Newsletter, что меня очень порадовало. Тем не менее, после этого, казалось, что никто этого не заметил, кроме автора (судьба длинного хвоста рецензируемых статей). Но по прошествии лет, и Data Science достигла третьей волны интереса за последние 5 лет, я заметил, что некоторые люди обращаются ко мне с вопросами по статье. Затем, благодаря Google Scholar, я понял, что внезапно статью в последнее время цитируют другие авторы в литературе по ML - конечно, не тонны цитирований. Тем не менее, как-то несколько человек читали его, спустя почти 20 лет после публикации!

Копнув еще немного, я обнаружил, что люди реализовали алгоритм в пакетах Python и что даже H20, похоже, поддерживает этот тип преобразования. Люди даже дали ему название, или на самом деле парочку: Целевая кодировка или Ударное кодирование - это определенно звучит лучше, чем Схема предварительной обработки. для…. .

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

  • Алгоритм машинного обучения с открытым исходным кодом CATBOOST, разработанный Яндексом, использует целевую статистику для представления категориальных переменных, но обеспечивает альтернативный подход к сглаживанию и предотвращению переобучения.
  • Предлагаемое кодирование, зависящее от цели, рассматривается многими авторами как базовый подход к работе с категориальными переменными высокой мощности, в том числе в недавней книге Куна и Джонсона под названием « Разработка и выбор функций »
  • Различные статьи по прикладному анализу данных (в социальных сетях, электронной коммерции, кредитном рейтинге и т. Д.) Ссылаются на статью, потому что это был выбранный ими метод обработки категориальных переменных.

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

  • Почтовые индексы: конечно, в США почтовые индексы не присваиваются регионам случайным образом. Подобные почтовые индексы обычно охватывают соседние или близлежащие районы. Таким образом, если мы рассмотрим все почтовые индексы, начинающиеся с одних и тех же 4 цифр (ZIP4), мы сгруппируем вместе соседние коды, и мы также сможем перейти к ZIP3.
  • IP-адреса. Хотя потенциально существует 4 294 967 296 различных IP-адресов (фактическое количество меньше из-за зарезервированных блоков), они имеют встроенную иерархическую структуру: ZZZ. ГГГ.ХХХ.NNN. Как правило, они резервируются в виде непрерывных блоков. Таким образом, мы также можем использовать их естественную группирующую структуру.
  • Отраслевые коды: Система NAICS предоставляет очень подробную 6-значную схему классификации для типов бизнеса, которая очень полезна в различных типах приложений машинного обучения. Хотя количество уникальных кодов огромно, коды NAICS также являются иерархическими. NAICS5, NAICS4 и до NAICS2 представляют все более широкие бизнес-категории (например, NAICS2 = 51 указывает на издателей, а 22 - на коммунальные предприятия).

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

Ранее я упоминал формулу «смешивания», которая контролирует соотношение между «статистикой значения» (а именно целевой статистикой, когда X = Xi) и априорной вероятностью цели. . Мы используем безусловную априорную вероятность цели просто потому, что считаем, что нет лучшей альтернативы, когда P (Y | X = Xi) ненадежен из-за небольшого размера выборки. Однако, когда у нас есть иерархическая структура, которую мы можем использовать, мы можем посмотреть целевую статистику для «родительской группы». Таким образом, если размер выборки для почтового индекса 94089 слишком мал, мы можем учесть целевую статистику для всех записей с почтовым индексом 9409x, что, будем надеяться, обеспечит более надежную оценку, а если нет… как насчет учета 940xx? Эта иерархическая версия метода целевого кодирования дает несколько преимуществ:

  1. Переменная детализация на основе данных. Возвращаясь к случаям с почтовыми индексами, мы можем заметить, что некоторые коды ZIP5 в нашем наборе данных содержат массу данных, а другие представлены очень редко. У кого-то может возникнуть соблазн рассмотреть возможность агрегирования ZIP4 или даже ZIP3 для обращения к множеству разреженных индексов ZIP5; однако это приведет к ненужному размытию информации для этих густонаселенных почтовых индексов. При предлагаемом подходе уровень агрегации эффективно варьируется - высокочастотные значения будут использовать целевую статистику, специфичную для их значения, в то время как другие будут сгруппированы с другими связанными (по иерархии) кодами, таким образом, используя более широкую групповую статистику.
  2. Более высокая дифференциация: со стандартной формулировкой Target Encoding может создавать непрерывную переменную (на самом деле, дискретную непрерывную переменную), для которой относительно большое количество случаев сопоставляется с априорной вероятностью цели, что является «нейтральным» значением. Это особенно верно для категориальных переменных с сильно искаженным распределением значений или длинными хвостами. Это связано с тем, что целевая оценка для низкочастотных значений будет сильно взвешена по отношению к одному и тому же числу, а именно к априорной вероятности цели. Однако, когда у нас есть иерархическая структура, доступная для категориальной переменной, используя этот вариант, мы получим гораздо более распределенное представление, поскольку каждое разреженное значение будет смешано с потенциально другой целевой оценкой.

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

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