Разработка функций с использованием Featuretools с кодом

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

К счастью, featuretools - это именно то решение, которое мы ищем. Эта библиотека Python с открытым исходным кодом автоматически создает множество функций из набора связанных таблиц. Featuretools основан на методе, известном как Глубокий синтез функций.

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

Во-первых, давайте взглянем на данные нашего примера. а полный набор таблиц выглядит следующим образом:

  • clients: основная информация о клиентах кредитного союза. У каждого клиента есть только одна строка в этом фрейме данных
  • loans: кредиты, предоставленные клиентам. У каждой ссуды есть только собственная строка в этом фрейме данных, но у клиентов может быть несколько ссуд.
  • payments: выплаты по кредитам. У каждого платежа только одна строка, но у каждой ссуды будет несколько платежей.

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

Featuretools

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

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

  • Сущности
  • Глубокий синтез функций (DFS)
  • Примитивы функций

а) Сущность можно рассматривать как представление фрейма данных Pandas. Набор из нескольких сущностей называется набором сущностей.

б) Глубокий синтез функций (DFS) на самом деле является методом разработки функций и является основой Featuretools. Он позволяет создавать новые функции как из одного, так и из нескольких фреймов данных.

c) DFS создает функции, применяя примитивы функций к отношениям сущностей в EntitySet. Эти примитивы - часто используемые методы для создания функций вручную. Например, примитивное «среднее» найдет среднее значение переменной на агрегированном уровне.

Реализация Featuretools

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

Теперь мы можем начать использовать Featuretools для автоматизированного проектирования функций! Необходимо, чтобы в наборе данных был уникальный идентификатор (в нашем наборе данных его сейчас нет). Итак, мы создадим один уникальный идентификатор для нашего объединенного набора данных. Если вы заметили, у нас есть два идентификатора в наших данных - один для товара, а другой для торговой точки. Итак, простое объединение обоих даст нам уникальный идентификатор.

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

нам нужно будет создать EntitySet. EntitySet - это структура, которая содержит несколько фреймов данных и отношения между ними. Итак, давайте создадим EntitySet и добавим к нему комбинацию фреймов данных.

Наши данные содержат информацию на двух уровнях - уровне позиции и уровне торговой точки. Featuretools предлагает функцию разделения набора данных на несколько таблиц. Мы создали новую таблицу «розетка» из таблицы BigMart на основе идентификатора точки Outlet_Identifier.

Как видно выше, он состоит из двух сущностей - bigmart и outlet. Также существует связь между двумя таблицами, соединенными Outlet_Identifier. Эти отношения будут играть ключевую роль в создании новых функций.

Теперь мы будем использовать Deep Feature Synthesis для автоматического создания новых функций. Напомним, что DFS использует примитивы функций для создания функций с использованием нескольких таблиц, присутствующих в EntitySet.

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

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

У этого фрейма данных есть одна проблема - он не отсортирован должным образом. Нам нужно будет отсортировать его на основе переменной id из фрейма данных combi.

Давайте построим модель на основе избранных данных

Пришло время проверить, насколько на самом деле полезны эти сгенерированные функции. Мы будем использовать их для построения модели и прогнозирования Item_Outlet_Sales. Поскольку наши окончательные данные (feature_matrix) имеют много категориальных функций, я решил использовать алгоритм CatBoost. Он может напрямую использовать категориальные функции и масштабируемый по своей природе. Вы можете обратиться к этой статье, чтобы узнать больше о CatBoost.

CatBoost требует, чтобы все категориальные переменные были в строковом формате. Итак, мы сначала преобразуем категориальные переменные в наших данных в строку:

Функции, созданные с помощью Featuretools, не просто случайны, они ценны и полезны. Что наиболее важно, это невероятно экономит время на проектирование функций.

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

============ Спасибо ==============

Код: https://github.com/ranasingh-gkp/Feature_engineering_Featuretools

Ссылка:

Https://towardsdatascience.com/automated-feature-engineering-in-python-99baf11cc219

Https://www.analyticsvidhya.com/blog/2018/08/guide-automated-feature-engineering-featuretools-python/