0. Введение

Согласно Википедии:

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

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

1. Типы объектов

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

- Числовой (интервал или соотношение)

- Категориальный (порядковый или номинальный)

- Временные (дата и время)

- Пространственный (Координаты и местоположение)

Числовые признаки измеряют величину количества, такого как банковский баланс, температура, возраст, рост, вес, население…

Есть две различные числовые функции: интервал и соотношение. Если числовое значение имеет осмысленную (непроизвольную) нулевую точку, то это значение отношения, в противном случае — интервал. Например, нулевая точка для температуры по Цельсию произвольна и не имеет смысла, поэтому это значение интервала. Мы не можем сказать, что 20°C в два раза больше 10°C, так как это не соотношение. Однако остаток на банковском счету со значимой нулевой точкой является значением коэффициента. Это означает, что мы можем сказать, что 200 долларов в два раза больше 100 долларов.

Категорические значения также называются дискретными переменными. Они описывают группы или категории субъекта, такие как пол, тип продукта, название города. Все они также называются номинальными переменными. Напротив, другой тип категориальной переменной называется порядковой переменной. Порядковые переменные представляют собой ранжированные категориальные переменные, такие как оценка предпочтения, рейтинг клиента.

Для разных типов переменных требуются разные методы разработки признаков, которые будут представлены ниже.

Больше чтений: https://en.m.wikipedia.org/wiki/Statistical_data_type

2. Числовые характеристики

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

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

Чтобы решить эту проблему, масштабирование можно использовать для преобразования числовых переменных в стандартизированный диапазон, например MinMaxScaler/StandardScaler в пакете Python scikit-learn.

Кроме того, выбросы в числовых значениях могут вызвать проблемы с моделями, не основанными на деревьях. Простое решение для выбросов — просто удалить их из набора данных. Другими решениями являются Winsorization и Ranking. Winsorization обрезает числовые значения, используя нижнюю и верхнюю границы. Методы ранжирования заменяют числовые значения их относительным рейтингом в наборе данных.

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

Кроме того, многие методы генерации признаков можно использовать с числовыми переменными, в основном на основе предыдущих знаний/данных анализа. Например, имея набор данных, описывающий цены на товары в супермаркете, мы можем извлечь из ценовых значений дробную часть (например, 0,99 из 4,99), что, вероятно, влияет на восприятие цен людьми.

Дополнительная информация: https://towardsdatascience.com/understanding-feature-engineering-part-1-continuous-numeric-data-da4e47099a7b

3. Категориальные характеристики

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

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

проблема коллинеарности: https://www.algosome.com/articles/dummy-variable-trap-regression.html

Одним из альтернативных подходов к категориальному кодированию является числовое кодирование, которое просто нумерует каждую из категорий в столбце с положительными целыми числами. Например, мы можем закодировать три категории A/B/C в 1/2/3. Он не увеличивает размер данных и очень хорошо работает с древовидными моделями. И это рекомендуемый метод кодирования для модели lightGBM.

https://lightgbm.readthedocs.io/en/latest/Advanced-Topics.html

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

Несколько методов генерации признаков также применимы к категориальным признакам. Одним из них является частотное кодирование, оно вычисляет частоту каждой метки в категориальной переменной и создает новый столбец, который использует соответствующую вычисленную частоту. Например, если в категориальной переменной содержится 5 меток A, 3 метки B, 2 метки C, то A/B/C можно закодировать 0,5/0,3/0,2 соответственно. Логика в том, что в некоторых случаях важна популярность лейбла, а не сам лейбл.

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

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

Дополнительное чтение: https://medium.com/data-design/visiting-categorical-features-and-encoding-in-decision-trees-53400fa65931

4. Временная характеристика

Как правило, временной характеристикой называется любая характеристика, которая изменяется со временем, например цена акции и температура. А скользящее среднее — один из основных и популярных методов генерации временных характеристик. Эта область исследований называется анализом временных рядов, и это большая тема, которая не будет рассматриваться в этой короткой статье.

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

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

5. Пространственные данные

К пространственным данным относятся любые данные, которые содержат пространственную информацию, такую ​​как карта, местоположение или траектория GPS или даже спутниковое изображение. Опять же, это еще одна большая тема, называемая наукой о пространственной информации, которая не может быть раскрыта в этой короткой статье. Однако есть еще несколько важных моментов, которые необходимо знать при работе с пространственными данными.

Одним из важных атрибутов пространственных данных является то, что они описывают местоположения на сфере. Мы не должны использовать какие-либо простые уравнения из плоской геометрии. Например, при вычислении расстояния между точками, описываемыми долготой и широтой, sqrt((lat1-lat2)²+(lon1-lon2)²) совершенно неверен. Лучше всего использовать формулу большого круга.

https://en.m.wikipedia.org/wiki/Great-circle_distance

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

https://en.m.wikipedia.org/wiki/Tobler%27s_first_law_of_geography

6. Отсутствующие значения

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

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

7. Подведение итогов

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

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

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

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

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

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