paint-brush
Разработка функций для машинного обученияby@sumitmakashir
705
705

Разработка функций для машинного обучения

Sumit Makashir15m2024/05/15
Read on Terminal Reader

Разработка функций имеет решающее значение для максимизации производительности моделей машинного обучения. Создавая и обрабатывая значимые функции, даже простые алгоритмы могут достичь превосходных результатов. Ключевые методы включают агрегирование, различия и соотношения, возрастное кодирование, индикаторное кодирование, горячее кодирование и целевое кодирование. Эффективная обработка признаков включает в себя обработку выбросов, обработку пропущенных значений, масштабирование, уменьшение размерности и преобразование целевых значений к нормальному распределению.
featured image - Разработка функций для машинного обучения
Sumit Makashir HackerNoon profile picture
0-item


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

В общих чертах, мы можем разделить разработку функций на два компонента: 1) создание новых функций и 2) обработку этих функций, чтобы заставить их оптимально работать с рассматриваемым машинным алгоритмом. В этой статье мы обсудим эти два компонента разработки признаков для перекрестных структурированных наборов данных, не относящихся к НЛП.


Создание новой функции

Сбор необработанных данных может быть утомительным, и к концу этой задачи мы можем оказаться слишком уставшими, чтобы тратить больше времени и энергии на создание дополнительных функций. Но именно здесь мы должны противостоять искушению сразу погрузиться в обучение модели. Я обещаю вам, что оно того стоит! На этом перекрестке нам следует остановиться и спросить себя: «Если бы я делал прогнозы вручную на основе своих знаний в предметной области, какие функции помогли бы мне сделать хорошую работу?» Задание этого вопроса может открыть возможности для создания новых значимых функций, которые в противном случае наша модель могла бы упустить. После того, как мы обдумали, какие дополнительные функции могут нам пригодиться, мы можем использовать приведенные ниже методы для создания новых функций на основе необработанных данных.


1. Агрегация

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

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

  1. Сколько раз клиент становился жертвой мошенничества за последние пять лет: Клиент, который ранее несколько раз становился жертвой мошенничества, с большей вероятностью станет жертвой мошенничества снова. Следовательно, использование этого агрегированного представления на уровне клиента может предоставить правильные сигналы прогнозирования.

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


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



2. Различия и соотношения

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

Примеры:

  1. Разница между процентом новых торговых транзакций за последний 1 час и процентом новых торговых транзакций за последние 30 дней: высокий процент новых торговых транзакций в быстрой последовательности сам по себе может указывать на риск мошенничества, но когда мы видим, что такое поведение изменилось по сравнению с историческим поведением клиента, это становится еще более очевидным сигналом.

  2. Отношение количества транзакций текущего дня к среднему количеству ежедневных транзакций за последние 30 дней. Когда кредитная карта взломана, по ней, скорее всего, будет выполнено много транзакций за короткий промежуток времени, что может не соответствовать предыдущему использованию кредитной карты. Значительно высокое соотношение количества транзакций текущего дня к среднему количеству ежедневных транзакций за последние 30 дней может указывать на мошеннические модели использования.


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

3. Кодирование возраста

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

Примеры:

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

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


4. Кодировка индикатора

Индикаторные или логические функции имеют двоичные значения {1, 0} или {True, False}. Функции индикатора очень распространены и используются для представления различных типов двоичной информации. В некоторых случаях у нас уже могут быть такие двоичные функции в числовой форме, а в других случаях они могут иметь нечисловые значения. Чтобы использовать нечисловые двоичные функции для обучения модели, все, что нам нужно сделать, — это сопоставить их с числовыми значениями.

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

Примеры:

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

  2. Изменение местоположения страны по сравнению с последней транзакцией. Изменение местоположения страны может указывать на скомпрометированную кредитную карту. Здесь создание признака-индикатора, представляющего изменение нечислового признака «местоположение страны», будет собирать информацию об изменении этой страны.


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


5. Горячее кодирование

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

Примеры:

  1. Категория покупки транзакции. Определенные типы категорий покупок могут быть связаны с более высоким риском мошенничества. Поскольку названия категорий покупок представляют собой текстовые данные, мы можем применить метод горячего кодирования, чтобы преобразовать эту функцию в набор функций числового индикатора. Если имеется десять различных названий категорий покупок, горячее кодирование создаст десять новых функций индикатора, по одному для каждого названия категории покупок.
  2. Тип устройства. Онлайн-транзакцию можно совершить с помощью нескольких типов устройств, таких как iPhone, телефон Android, ПК с ОС Windows и Mac. Некоторые из этих устройств более восприимчивы к вредоносному ПО или легко доступны мошенникам и, следовательно, могут быть связаны с более высоким риском мошенничества. Чтобы включить информацию о типе устройства в числовой форме, мы можем применить к типу устройства горячее кодирование, что создаст новую функцию индикатора для каждого типа устройства.

В таблицах выше показан пример горячего кодирования. Здесь мы создали набор новых функций числового индикатора, применив технику горячего кодирования к нечисловому категориальному признаку «Тип устройства».


6. Целевое кодирование

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

Примеры:

  1. Название продавца: транзакции, совершенные против определенных продавцов, могут указывать на мошенническую деятельность. Таких торговцев могут быть тысячи, каждый из которых имеет разный риск мошеннических транзакций. Применение горячего кодирования к объекту, содержащему названия продавцов, может привести к появлению тысяч новых функций, что нежелательно. В таких случаях целевое кодирование может помочь получить информацию о риске мошенничества со стороны продавца без увеличения количества функций.
  2. Почтовый индекс транзакции. Как и у продавцов, транзакции, совершаемые с разными почтовыми индексами, могут представлять разные уровни риска мошенничества. Хотя почтовые индексы имеют числовые значения, они не являются переменными непрерывного измерения и не должны использоваться в модели как есть. Вместо этого мы можем включить информацию о рисках мошенничества, связанную с каждым почтовым индексом, применив такой метод, как целевое кодирование.

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



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

Обработка функций

Обработка признаков — это серия шагов обработки данных, которые гарантируют, что модели машинного обучения соответствуют данным, как предполагалось. Хотя некоторые из этих этапов обработки необходимы при использовании определенных алгоритмов машинного обучения, другие обеспечивают хорошее взаимодействие между функциями и рассматриваемым алгоритмом машинного обучения. В этом разделе давайте обсудим некоторые общие этапы обработки объектов и то, почему они нам нужны.

1. Обработка выбросов

Некоторые алгоритмы машинного обучения, особенно параметрические, такие как модели регрессии, серьезно страдают от выбросов. Эти алгоритмы машинного обучения пытаются учесть выбросы, серьезно влияя на параметры модели и ставя под угрозу общую производительность. Чтобы обработать выбросы, мы должны сначала их идентифицировать. Мы можем обнаружить выбросы для определенного признака, применяя определенные практические правила, например, иметь абсолютное значение, превышающее среднее значение плюс три стандартных отклонения, или значение, выходящее за пределы ближайшего значения «усов» (значение ближайшего квартиля плюс 1,5-кратное значение межквартильного диапазона). После того как мы определили выбросы в конкретном объекте, мы можем использовать некоторые из приведенных ниже методов для их обработки:

  1. Удаление: мы можем удалить наблюдения хотя бы с одним выходящим значением. Однако, если наши данные имеют слишком много значений выбросов для разных объектов, мы можем потерять много наблюдений.
  2. Замена: мы можем заменить значения выбросов средними значениями, такими как среднее значение, медиана и мода данного объекта.
  3. Преобразование или стандартизация признаков: мы можем использовать логарифмическое преобразование или стандартизацию признаков (как описано в разделе «Масштабирование»), чтобы уменьшить величину выбросов.
  4. Ограничение и ограничение: мы можем заменить выбросы, выходящие за пределы определенного значения, этим значением, например, заменив все значения выше 99-го процентиля значением 99-го процентиля и заменив все значения ниже 1-го процентиля значением 1-го процентиля.


На изображении выше показаны два часто используемых метода обнаружения одномерных выбросов. Мы видим, что эти два метода могут давать разные наборы выбросов. Метод среднего +3 SD следует использовать, если данные подчиняются нормальному распределению. Техника, основанная на усах коробчатой диаграммы, является более общей и может применяться к данным с любым распределением.


В таблицах выше показано применение часто используемых методов обработки выбросов.


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


2. Обработка пропущенных значений

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

  1. Удаление: мы можем удалить наблюдения хотя бы с одним отсутствующим значением признака. Однако, если в наших данных слишком много пропущенных значений для разных функций, мы можем потерять много наблюдений.
  2. Удаление: если у объекта большое количество пропущенных значений, мы можем удалить его.
  3. Замена средними значениями. Мы можем использовать средние значения, такие как среднее значение, медиана и мода данного объекта, чтобы заменить недостающие значения. Этот метод прост в реализации, но он не может обеспечить хорошие оценки для всех типов наблюдений. Например, транзакция с высоким риском мошенничества может иметь другую среднюю сумму транзакции, чем сумма транзакции с низким риском мошенничества, и использование общего среднего значения для отсутствующей суммы транзакции с высоким риском мошенничества может не быть хорошей заменой.
  4. Максимальное правдоподобие, множественные вменения, K ближайших соседей: это более сложные методы, которые учитывают взаимосвязь с другими объектами в наборе данных и могут обеспечить более точные оценки, чем общие средние значения. Однако реализация этих методов потребует дополнительного моделирования или реализации алгоритма.

В таблицах выше показано применение часто используемых методов обработки пропущенных значений.

3. Масштабирование

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

  1. Нормализация: этот метод масштабирования ограничивает значения признака от 0 до 1. Чтобы применить нормализацию, мы вычитаем минимальное значение признака и делим его на диапазон (разницу между минимальным и максимальным) этого признака. Нормализация может быть не лучшим методом, если некоторые из наших функций имеют резкий перекос или несколько резких выбросов.
  2. Стандартизация: этот метод преобразует распределение данных объектов в стандартное нормальное распределение. Мы можем реализовать этот метод, вычитая среднее значение и разделив его на стандартное отклонение. Этот метод обычно предпочтителен, если объект имеет резкий наклон или несколько крайних выбросов.

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

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


На изображении выше показана разница масштабов между исходными, нормализованными и стандартизированными значениями признаков. Как мы видим, масштабирование не влияет на форму распределения данных.

4. Уменьшение размерности

Сегодня у нас есть огромные данные, и мы можем создать обширную коллекцию функций для обучения наших моделей. Для большинства алгоритмов наличие большего количества функций полезно, поскольку оно предоставляет больше возможностей для улучшения производительности модели. Однако это справедливо не для всех алгоритмов. Алгоритмы, основанные на метриках расстояний, страдают от проклятия размерности: по мере существенного увеличения числа признаков значение расстояния между двумя наблюдениями становится бессмысленным. Таким образом, чтобы использовать алгоритмы, основанные на метриках расстояния, мы должны гарантировать, что не используем большое количество функций. Если наш набор данных имеет большое количество функций и мы не знаем, какие из них сохранить, а какие отбросить, мы можем использовать такие методы, как анализ главных компонентов (PCA). PCA преобразует набор старых функций в набор новых функций. Он создает новые функции, причем тот, у которого самые высокие собственные значения, захватывает большую часть информации из старых функций. Тогда мы сможем сохранить только несколько первых новых функций и отказаться от оставшихся.

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

В таблицах выше показано применение PCA для сокращения возможностей. Как мы видим, первые три функции захватывают более 87% информации, содержащейся в исходном наборе данных. В этом случае мы можем исключить две функции (f4 и f5) из-за потери <13% информации. Количество функций, которые следует сохранить, и количество функций, которые следует исключить, будет варьироваться от проблемы к проблеме в зависимости от различных факторов.


5. Преобразование к нормальному распределению

Этот шаг является исключением, поскольку он применяется только к цели, а не к объектам. Кроме того, большинство алгоритмов машинного обучения не имеют каких-либо ограничений на распределение цели, но некоторые из них, такие как линейная регрессия, требуют, чтобы цель распределялась нормально. Линейная регрессия предполагает, что значения ошибок симметричны и сосредоточены вокруг нуля для всех точек данных (точно так же, как форма нормального распределения), а нормально распределенная целевая переменная гарантирует выполнение этого предположения. Мы можем понять распределение нашей цели, построив гистограмму. Статистические тесты, такие как тест Шапиро-Уилка, говорят нам о нормальности, проверяя эту гипотезу. Если наша цель не имеет нормального распределения, мы можем попробовать различные преобразования, такие как логарифмическое преобразование, квадратное преобразование, преобразование квадратного корня и другие, чтобы проверить, какие преобразования делают целевое распределение нормальным. Существует также преобразование Бокса-Кокса, которое проверяет несколько значений параметров, и мы можем выбрать то, которое лучше всего преобразует распределение нашей цели в нормальное.

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


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


Заключение

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