Функциональная инженерия

Понимание самого важного шага в рабочем процессе обработки данных

Вступление

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

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

Числовые данные

Бинаризация

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

Биннинг

В нашем предыдущем примере вместо использования двоичной переменной мы также могли преобразовать исходную переменную в категориальную, где 0 = без дождя, 1 = небольшой дождь, 2 = сильный дождь, 3 = шторм. Количество ящиков и их размер могут различаться, и вам может потребоваться несколько попыток, чтобы настроить их «правильно». Это помогает взглянуть на распределение переменных (гистограмму), чтобы найти разумные точки отсечения (например, квартили).

Преобразование журнала

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

Как мы видим, эта переменная сильно сконцентрирована в одном хвосте (распределение с тяжелыми хвостами), и это может добавить некоторую предвзятость и ошибку в некоторые модели. Чтобы исправить это, мы могли бы применить преобразование журнала, что означает, что вместо использования нашей переменной X в нашей модели мы могли бы использовать новую переменную: log (X). Наша новая переменная log_X имеет гораздо более «правильное» распределение:

Это распределение обычно дает лучшие результаты для большинства моделей (подумайте о линейной регрессии - проще построить прямую линию, когда не все наши наблюдения сосредоточены вокруг 0).

Трансформация власти

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

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

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

Самый популярный метод масштабирования называется стандартизацией. Стандартизация функций создает новую переменную, которая имеет среднее значение 0 (оно перемещает распределение переменной примерно в 0) и дисперсию, равную 1 (масштабирует дисперсию переменной). Для этого используется формула ниже, где std_dev (x) представляет собой стандартное отклонение x:

Затем ваша переменная примет отрицательные и положительные значения, распределенные около 0.

Если вы не хотите, чтобы переменная имела отрицательные значения, вы можете использовать min-max scaling, еще один популярный метод масштабирования, формула которого имеет следующий вид:

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

Текстовые данные

Уборка

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

Еще один шаг очистки текстовых данных - это избавиться от стоп-слов, которые сами по себе не несут особого смысла, таких как «есть», «есть», «в», «для» и т. Д. стоп-слова для многих языков, доступные непосредственно из библиотек Python и R.

Наконец, есть также очистка лишних пробелов, исправление опечаток и т. Д.

Стемминг

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

Мешок слов

С текстовыми данными работать намного сложнее, чем с числами, поэтому большинство методов, используемых для работы с текстом, основаны на его преобразовании в числа. Один из самых основных методов - рассматривать текст как «мешок слов», то есть мы подсчитываем, сколько раз каждое слово встречается в тексте, превращаем это количество в вектор и используем эти векторы для сравнения различных текстов. Проблема с этим подходом очевидна: слова могут иметь разное значение в зависимости от порядка, в котором они появляются, или от того, какие слова им предшествуют. Например, рассмотрим два следующих предложения: «мужчина съел гамбургер» и «гамбургер съел человека». Оба имеют одинаковое количество слов и будут представлены одинаково, хотя они явно означают разные вещи. Для решения этой проблемы обычным решением является создание пакетов с n-граммами, что означает, что вместо подсчета слов мы считаем наборы слов, которые встречаются вместе (обычно максимум 2 или 3 слова). Итак, в нашем примере мы посчитаем количество появлений слов «мужчина», «съел», «гамбургер», «человек ел» и т. Д.

TF-IDF

TF-IDF расшифровывается как Term Frequency - Inverse Document Frequency, что является способом учета встречаемости слов в тексте по сравнению с другими текстами. Допустим, мы анализируем твиты Трампа и хотим знать, какие слова он использует чаще всего. Если мы просто посмотрим на простой подсчет слов, мы получим довольно скучные результаты: такие слова, как «и» и «я», появятся, потому что они распространены. Проблема в том, что они распространены повсюду, не потому, что Трамп их особенно часто пишет, и именно в этом нам может помочь TF-IDF. Его можно рассчитать по-разному, но самый простой:

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

Категориальные переменные

Одно горячее кодирование

Опять же, наша цель - превратить нечисловую переменную в числовую. One-Hot Encoding создает n новых переменных, где n - это количество уникальных категорий в нашей исходной переменной. Например, если у нас есть переменная Пол, у нас будет только 2 категории: «Мужчина» и «Женщина». Затем мы заменим переменную Пол двумя новыми переменными: Мужчина и Женщина, для которых значение равно 1, если наблюдение принадлежит соответствующему полу. :

Фиктивное кодирование

Вы заметили, что одна из перечисленных выше переменных избыточна? мы могли сохранить только один из них, не теряя никакой информации. Если вы отбросите столбец Женщина, вы все равно сможете узнать пол человека (если это не женщина, то мужчина). Dummy Coding делает именно это:

Снижение размерности

Анализ главных компонентов (PCA)

PCA - это отдельная тема. Если вы хотите лучше разобраться в деталях, ознакомьтесь с этой статьей.

В общих чертах, PCA - это метод, который уменьшает размеры, сохраняя при этом как можно больше информации. Он берет исходные элементы (которые также можно назвать размерами) и создает новые элементы на основе проекций исходных размеров. Вы начинаете с 30 измерений и можете закончить 2, 3, 4 или 18, которые называются главными компонентами. У вас будет компромисс между уменьшением размеров и сохранением информации и отклонений. Сохранение не менее 80% исходной дисперсии - распространенный тест, но на самом деле это зависит от вашего приложения.

Заключение

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