Feature engineering что это

Feature engineering что это

Генерация признаков – пожалуй, самый творческий этап подготовки данных (Data Preparation) для машинного обучения (Machine Learning). Этот этап еще называют Feature Engineering. Он наступает после того, как выборка сформирована и очистка данных завершена. В этой статье мы поговорим о том, что такое признаки, какими они бывают и как Data Scientist их генерирует.

Признаки для Data Mining: определение и виды

Признак (фича, feature) – это переменная, которая описывает отдельную характеристику объекта. В табличном представлении выборки признаки – это столбцы таблицы, а объекты – строки [1]. Входные, независимые, переменные для модели машинного обучения называются предикторами, а выходные, зависимые, – целевыми признаками. Все признаки могут быть следующих видов [2]:

Признаки могут извлекаться из данных любого типа, в т.ч. из текста, изображений и геоданных. При обработке текстовой информации сначала выполняется ее токенизация, а затем лемматизация и цифровизация – перевод слов в числовые вектора. Этому процессу мы посвятили отдельную статью. В случае изображений зачастую анализируется не только содержание картинки как набора пикселей различного цвета, но и метаданные графического файла: дата съемки, разрешение, модель камеры и т.д. Географические данные чаще всего представлены в виде адресов (текст) или пар «широта + долгота» (числовых наборов – точек) [3].

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что этоВыбор предикторов – интересная задача фазы Data Preparation

Как проходит генерация признаков: 3 задачи этого этапа Data Mining и способы их решения

Генерация признаков включает в себя 3 взаимосвязанные задачи [3], каждой из которых мы посвятили отдельную статью:

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

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что этоГенерация признаков – пожалуй, самый творческий этап Data Preparation

Все подробности Feature Engineering и другие детали Data Preparation в нашем новом обучающем курсе для аналитиков больших данных: подготовка данных для Data Mining. Приходите, будет интересно!

Источник

Feature Engineering, о чём молчат online-курсы

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это
Sherlock by ThatsWhatSheSayd

Чтобы стать великим сыщиком, Шерлоку Холмсу было достаточно замечать то, чего не видели остальные, в вещах, которые находились у всех на виду. Мне кажется, что этим качеством должен обладать и каждый специалист по машинному обучению. Но тема Feature Engineering’а зачастую изучается в курсах по машинному обучению и анализу данных вскользь. В этом материале я хочу поделиться своим опытом обработки признаков с начинающими датасаентистами. Надеюсь, это поможет им быстрее достичь успеха в решении первых задач. Оговорюсь сразу, что в рамках этой части будут рассмотрены концептуальные методы обработки. Практическую часть по этому материалу совсем скоро опубликует моя коллега Osina_Anya.

Один из популярных источников данных для машинного обучения — логи. Практически в любой строчке лога есть время, а если это web-сервис, то там будут IP и UserAgent. Рассмотрим, какие признаки можно извлечь из этих данных.

Время

UnixTimestamp

UnixTimestamp — это количество секунд, прошедшее с 1970-01-01 00:00:00.000, популярное представление времени, натуральное число. Можно в модель добавить время в этом формате, но такой подход чаще работает в задачах регрессии. В задачах классификации он работает редко, так как в UnixTimestamp-формате сохраняется только информация о последовательности событий, а о днях недели, месяцах, часах и т. д. модель ничего знать не будет.

Год, месяц, день, часы, минуты, секунды, день недели

Часто время добавляют в модель в виде набора натуральных чисел: отдельно год, отдельно номер месяца и т. д. до нужной детализации. Например, 2017-09-08 12:07:12.997 можно преобразовать в пять признаков: 2017, 09, 08, 12, 07. Ещё можно добавить бинарный признак: выходной день или нет, время года, рабочее время или нет — и т. д., и т. п. Удачный набор таких признаков чаще всего позволяет решить задачу c высоким качеством. Иногда работает метод Создание OneHotEncoding признаков на месяцы/годы, но это скорее экзотика, нежели практика.

Отображение на круг

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

Допустим, у нас есть задача: по текущему времени определить, зачем человек взял в руки мобильный телефон — отключить звук или поставить будильник. При этом мы видим по историческим данным, что человек ставит будильник с 23.00 до 01.00, а выключает звук с 07.00 до 21.00. Если мы станем решать задачу логистической регрессией, то ей надо будет построить разделяющую плоскость для следующей картинки:

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Очевидно, что она не сможет этого сделать: такое представление времени теряет информацию о том, что 23.00 и 01.00 — это очень близкие события. В данном случае можно добавить квадратичные признаки, но у меня есть способ получше! Для решения таких проблем пригодится следующий приём: берём признак, о котором мы знаем, что он меняется по циклу. Например, «час» — он меняется от 0 до 23. И превращаем его в два признака: cos(«час» 2 pi / 24 ), sin(«час» 2 pi / 24 ), т. е. мы равномерно распределили все элементы цикла по единичной окружности с центром в 0 и диаметром 1.

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

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

IP-адрес

Немного слов об IP

На первый взгляд IP-адрес — важный признак, но что с ним делать — совершенно непонятно. Наиболее распространённый сейчас вариант — это IPV4, т. е. последовательность из 4 байтов, традиционно записываемых в виде «255.0.0.1». Работать с этими числами или со всем IP как с числовыми признаками абсолютно некорректно. Если у вас есть два IP-адреса — 123.123.123.123 и 124.123.123.123, — то близость этих чисел совершенно ничего не значит (первый — это China Unicom Beijing province network, второй — Beam Telecom Pvt Ltd). Корректно было бы рассматривать IP как категориальный с выделением подсетей, но у больших сервисов таких категорий очень много. Например, если рассматривать категории по подсетям третьего уровня, то их получается 2^24 —

10^16. Чтобы обучить модель более чем с 16 миллионами признаков, нужно действительно много данных, и, скорее всего, они создадут ненужный шум.

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Геолокация

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

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

Постскриптум для этого пункта

Если ваш сервис достаточно большой, то вы можете сами собирать GeoIP-базы. Если пользователь предоставит вашему сайту/приложению доступ к своей геолокации, то вы автоматически получите информацию о расположении конкретных IP-адресов. Только вам придётся придумать, как быть с некорректными геолокациями и IP-адресами, которые имеют широкую географию. Кроме того, пользуясь этим приёмом, можно предполагать, откуда заходил пользователь: из дома, с работы, находясь в дороге.

Чистота IP-адреса

Для анализа данных иногда стоит отфильтровывать действия настоящих пользователей от действий ботов, поисковых роботов и подобной «нечисти». В исходной формулировке эта задача очень сложная, используемая во многих областях, например антиспаме и антифроде. Но для задачи фильтрации данных иногда хватает и более простых методов — фильтрации по IP. Так, в интернете можно найти открытые списки IP-адресов, с которых часто проводятся фрод- и ддос-атаки, IP-адреса tor-exitnode (боты часто используют их для обхода блокировки IP за частые запросы к сервису) и IP-адреса открытых прокси-серверов (иногда применяются для тех же целей). Так, можно добавить в вектор признаков флаг «наличие IP-адреса в этих базах». Кроме того, по историческим данным вы можете считать вероятность встретить такого же провайдера, что и у IP-адреса в данной строке лога. Эта вероятность тоже может быть признаком, только у него есть гиперпараметр: как далеко смотреть историю, чтобы считать вероятность. Это важно, так как распределение пользователей и, как следствие, распределение провайдеров пользователей на сервисе меняется.

Возвращаясь к вопросу фильтрации «плохих» пользователей, отмечу: стандартная практика — фильтрация логов с IP-адресов, фигурировавших в доверенных чёрных списках. При этом пользователи, их инициировавшие, не принадлежат к списку пользователей, недавно совершавших доверенные действия. Оба этих условия одинаково важны, так как даже хорошие пользователи иногда обращаются к Tor’у и прокси-серверам, но аккаунт хорошего пользователя может быть взломан. Поэтому действие, характеризующее его как настоящего человека, должно произойти недавно.

UserAgent

Немного о UserAgent

Если мы говорим об HTTP-протоколе, то программное обеспечение, которое отправляет запрос на ваш сервер, в заголовке запроса передаёт поле User-Agent, в котором содержится информация о версии программного обеспечения и операционной системы. С помощью этого поля заголовка часто происходит перенаправление на мобильную версию сайта или на версию сайта без использования JS. Кроме версии браузера и операционной системы, в UserAgent может содержаться и другая полезная информация, но её иногда непросто достать. Дело в том, что единого утверждённого формата для строки User-Agent’а нет, и каждый пишет туда информацию так, как захочет. Есть много различных библиотек, позволяющих извлечь из строки UserAgent браузер и операционную систему, и их можно выбирать на свой вкус. Лично мне нравится https://github.com/ua-parser.

ОС, ПО, что сложного?

Браузер и операционную систему можно добавить как категориальный признак, воспользовавшись OneHotEncoding, даже тип устройства достаётся. Только для этого нужно аккуратно смотреть и на браузер, и на операционную систему. Но в UserAgent ещё можно опознать поисковых ботов, скрипты на Python, программы и кастомные сборки браузеров, использующие WebKit. Только с этим многообразием возможностей приходит и многообразие проблем. Записать в UserAgent-строку можно всё что угодно, и этим пользуются разработчики вредоносного ПО: для вашего сервера всё будет выглядеть так, будто к вам пришёл обычный пользователь с браузером Chrome и Windows 10 на компьютере. Поэтому надо относиться очень аккуратно к данным из UserAgent и следить за аномалиями в статистике версий браузеров. В ней вы можете заметить, что очень старая версия хрома гораздо популярней последней, или увидеть «вспышки» из старых андроидов. Кроме того, поможет частотный анализ, как и в случае с IP. Чаще всего разработчики роботов не знают распределения браузеров у вашей целевой аудитории и берут UserAgent из своих баз данных о распределении UserAgent среди пользователей интернета, а базы могут устаревать, не соответствовать географии, целевой аудитории вашего сервиса и т. д. Но все эти трудности — не повод не пользоваться этими данными. Это повод посмотреть на них внимательнее и извлечь ещё больше полезной информации.

Заключение

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

Источник

Открытый урок «Feature Engineering на примере классического датасета Титаника»

В декабре у нас стартует обучение очередной группы «Data scientist», поэтому открытых уроков и прочих активностей становится всё больше. Например, буквально на днях прошёл вебинар под длинным названием «Feature Engineering на примере классического датасета Титаника». Его провёл Александр Сизов — опытный разработчик, кандидат технических наук, эксперт по Machine/Deep learning и участник различных коммерческих международных проектов, связанных с искусственным интеллектом и анализом данных.

Открытый урок занял около полутора часов. В ходе вебинара преподаватель рассказал про подбор признаков, преобразование исходных данных (кодирование, масштабирование), настройку параметров, обучение модели и много чего ещё. В процессе проведения урока участникам показывалась тетрадь Jupyter Notebook. Для работы использовались открытые данные с платформы Kaggle (классический датасет про «Титаник», с которого многие начинают знакомство с Data Science). Ниже предлагаем видео и транскрипт прошедшего мероприятия, а тут можно забрать презентацию и коды в юпитеровском ноутбуке.

Подбор признаков

Тему выбрали хоть и классическую, но всё же немного мрачноватую. В частности, необходимо было решить задачу бинарной классификации и предсказать по имеющимся данным, выживет пассажир или нет. Сами данные были разбиты на две выборки Training и Test. Ключевая переменная — Survival (выжил/не выжил; 0 = No, 1 = Yes).

Входные тренировочные данные:

Первое, что необходимо было сделать, — это прочитать датасет и вывести наши данные на экран:

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Для анализа данных использовалась малоизвестная, но довольно полезная библиотека profiling:
pandas_profiling.ProfileReport(df_train)

Подробнее о profiling

Эта библиотека делает всё, что можно сделать априори, не зная подробностей о данных. Например, вывести статистики по данным (сколько переменных и какого они типа, сколько строк, пропущенных значений и т. д.). Мало того, даётся отдельная статистика по каждой переменной с приведением минимума и максимума, графика распределения и других параметров.

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

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

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Кроме того, преподаватель показал примеры использования Imputer и pipeline.

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

Существуют разные техники масштабирования, однако формат открытого урока позволил подробнее рассмотреть только две из них:

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

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

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

Label encoding. Это механизм, реализованный в рамках многих библиотек, который можно вызвать и применить:

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Label encoding присваивает каждому уникальному значению какой-то уникальный идентификатор. Минус — мы вносим упорядоченность в некую переменную, которая не была упорядоченной, что не есть хорошо.

OneHotEncoder. Уникальные значения текстовой переменной разворачиваются в виде столбцов, которые добавляются в исходные данные, где каждый столбец — бинарная переменная в виде 0 и 1. Этот подход лишён недостатков Label encoding, но имеет свой минус: если уникальных значений много, мы добавляем слишком большое количество столбцов и в некоторых случаях метод просто неприменим (датасет возрастает слишком сильно).

После выполнения вышеописанных действий составляется итоговый pipeline с набором всех нужных операций. Теперь достаточно взять исходный датасет и применить итоговый pipeline на этих данных с помощью операции fit_transform:
x_train = vec.fit_transform(df_train)

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

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

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

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

После обучения модель можно применять на тестовых данных, оценивая её качество в рамках какой-нибудь метрики. В нашем случае качество в рамках accuracy_score было 0,8:

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Это значит, что на полученных данных переменная правильно предсказана в 80% случаев. Получив результаты обучения, мы можем либо улучшать модель (если точность не устраивает), либо переходить непосредственно к прогнозу.

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

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

Источник

Feature engineering: шесть шагов для создания успешной модели машинного обучения

Исследования в области машинного обучения приводят к созданию новых алгоритмов и методик. Даже такой метод, как feature engineering, существующий уже несколько десятилетий, постоянно обновляется. Команды разработчиков должны постоянно учиться и прокачивать свои навыки, генерируя новые подходы в машинном обучении. «Хайтек» перевел и дополнил статью VentureBeat, чтобы рассказать о современных методиках в feature engineering и дать советы разработчикам по созданию моделей с добавленной стоимостью.

Читайте «Хайтек» в

Метод feature engineering так же стар, как и data science. Но почему-то он становится все более забытым. Высокий спрос на машинное обучение вызвал ажиотаж среди ученых-исследователей. Сегодня у них огромный опыт создания инструментов и алгоритмов. Но у них недостаточно отраслевых знаний, требуемых для feature engineering. Исследователи пытаются компенсировать это инструментами и алгоритмами. Однако алгоритмы теперь являются лишь товаром и сами по себе не генерируют корпоративное IP-портфолио (портфель интеллектуальных прав, принадлежащих компании — «Хайтек»).

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Feature engineering (с англ. «создание показателей, признаков») — техника решения задач машинного обучения, позволяющая увеличить качество разрабатываемых алгоритмов. Предусматривает превращение данных, специфических для предметной области, в понятные для модели векторы. Чтобы эффективно решить задачу с feature engineering, необходимо быть экспертом в конкретной области и понимать, что влияет на конкретную целевую переменную. Поэтому многие разработчики называют feature engineering искусством, требующим решения большого количества задач и наработки опыта.

Сегодня такие стартапы, как ContextRelevant и SparkBeyond, разрабатывают новые инструменты, которые упростят для пользователей процесс создания и отбора показателей (feature selection).

Обобщенные данные тоже становятся товаром, а облачные сервисы машинного обучения (MLaaS), такие, как Amazon ML и Google AutoML, теперь позволяют даже менее опытным членам команды запускать модели данных и получать их прогнозы в течение нескольких минут. Но в результате этого набирают обороты те компании, которые развивают организационную компетенцию в сборе или изготовлении собственных данных, создаваемых при feature engineering. Простого сбора данных и построения моделей уже недостаточно.

Корпорации многому учатся у победителей соревнований по моделированию, таких как KDD Cup и Heritage Provider Network Health Prize. Своими успехами они обязаны именно грамотному подходу к методу feature engineering.

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Ян Лекун, Facebook: прогностические модели мира — решающее достижение в ИИ

Методы feature engineering

Для техники feature engineering ученые разработали ряд методов.

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

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

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

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

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

Некоторые другие примеры преобразований:

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

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

Примеры использования формул:

Feature engineering что это. Смотреть фото Feature engineering что это. Смотреть картинку Feature engineering что это. Картинка про Feature engineering что это. Фото Feature engineering что это

Джианкарло Суччи: «Попытка спроектировать программу без багов — утопия»

Источник

Добавить комментарий

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