Введение

Это не миф, что предварительная обработка данных в любой модели машинного обучения обещает дать лучшие результаты, чем что-либо другое. Верно и то, что пользователи в конечном итоге тратят 60–70% своего времени на предварительную обработку данных, и это, очевидно, не самая приятная часть машинного обучения. Что ж, если вы занимаетесь наукой о данных и у вас есть эти симптомы, то вам повезло!

Я собираюсь представить библиотеку Python под названием PreProcess1. Это будет серия уроков. Это (бесплатный) высокоуровневый пакет Python с открытым исходным кодом, который помогает подготовить наборы данных для задач машинного обучения. Простота лежит в основе пакета с целью уменьшить усилия по кодированию и увеличить время, затрачиваемое на бизнес-сферу. Я буду очень признателен за ваши отзывы об улучшении пакета. Я использовал и построил код вокруг пакетов Python «scikit-learn», «datetime», «datender», «pyod».

Инструкция по установке

Вы можете установить библиотеку так же, как и любую другую библиотеку в Python. Просто используйте приведенный ниже код:
pip install preprocess1

Чтобы начать использовать пакет, выполните следующие действия:
из preprocess1 импортируйте инструментарий как t

Генеральный план

Существует более 20 методов предварительной обработки, которые можно применить к данным с помощью пакета. Чтобы упростить пользователям работу, все эти методы были помещены в определенную последовательность внутри конвейера. Этот конвейер можно вызвать с помощью формулы, подобной Excel. Все, что вам нужно сделать, это предоставить некоторую основную информацию о данных и включить или отключить необходимые функции. Очень просто! Теперь, конечно, для опытных пользователей вы можете вызывать эти 20 с лишним методов по отдельности и создавать свой собственный конвейер или просто использовать любой из них по отдельности. Тем не менее, это сложная тема, и я расскажу об этом, как только мы рассмотрим подход «конвейерной» линии.

На данный момент существует два конвейера: один (с именем Preprocess_Path_One) обслуживает контролируемые проблемы (где доступны метки/цель), а другой (с именем Preprocess_Path_Two) обслуживает неконтролируемые проблемы (где метки/цель НЕ доступны). конвейер возвращает преобразованный фрейм данных. Если также доступны тестовые данные (в случае, если вы выполняете какие-то задания или собираетесь участвовать в соревнованиях Kaggle и т. д.), вы можете указать тестовый набор в пути, и путь/конвейер вернет два набора данных, преобразованные данные обучения и преобразованные тестовые данные. Если в данный момент у вас нет набора тестовых данных, вы сможете вызвать и применить все преобразования, которые вы применили/изучили из набора обучающих данных в набор тестовых данных, с помощью одной простой команды…. волшебство !!! Ниже приведен набросок того, как выглядит минимальный путь:

transformed_data = Path(training_data, 'имя целевой переменной')

Ладно, хватит болтать, давай запачкаем руки. Для этих руководств я использую случайные наборы данных, к которым у меня есть доступ, вы можете использовать любые наборы данных, которые вам нравятся. Я буду использовать контролируемый путь, чтобы продемонстрировать работу, тогда вы сможете очень легко использовать неконтролируемый путь, поскольку они почти идентичны по конструкции. Конкретное имя пути — Preprocess_Path_One, для неконтролируемых проблем вы можете использовать Preprocess_Path_Two.

Основы: обнаружение типов данных, пропущенных значений и одно горячее кодирование

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

Обнаружение типов данных

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

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

Он также пытается выбрать вариант использования проблемы ML, такой как классификация или регрессия (эта функция доступна только в контролируемом пути (Preprocess_Path_One). Если выбран неправильный алгоритм b, вы можете указать его в аргументе «ml_usecase» (например, ml_usecase = 'классификация' или ml_usecase = 'регрессия'). Если вы хотите пропустить часть интерфейса, вы можете установить для аргумента 'отображение' значение False. Типы данных по-прежнему будут собираться (или переопределяться в соответствии с командой) под капотом , Ниже приведен код:

Пропущенные значения и одно горячее кодирование

Многие алгоритмы машинного обучения не могут работать, если они сталкиваются с NaN (пропущенными значениями). PreProcess1 может очень легко позаботиться об этом. Он может вменять недостающие значения для категориальных, числовых и временных признаков. У нас есть два типа импутеров: простой импутер и суррогатный импутер. В простом импутере отсутствующее значение заменяется, и алгоритм движется дальше. В суррогатном импутере вменяется отсутствующее значение, и создается новый признак, указывающий, что значение было вменено для этой точки данных/выборки.

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

По умолчанию «простой импутер» включен. Стратегия числовых признаков — «средняя», а категориальная стратегия — «недоступна».

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

Давайте попробуем кодировать:

Применение изученного преобразования к тестовым данным

Эта часть очень проста, конвейер «Preprocess_Path_One» теперь сохранен и доступен, все, что вам нужно, это применить метод «преобразования» объекта конвейера, ниже приведен код:

Это еще не все, мы обсудим многие другие функции в следующем уроке. Вот ссылка на колаб Google.



* Дополнительная информация

Ниже приведена числовая последовательность событий, которые применяются в Preprocess_Path_One:

Информация также доступна в строке документации класса Preprocess_Path_One.

  - 1) Auto infer data types 
  - 2) Impute (simple or with surrogate columns)
  - 3) Ordinal Encoder
  - 4) Drop categorical variables that have zero variance or near     zero variance
  - 5) Club categorical variables levels togather as a new level (other_infrequent) that are rare / at the bottom 5% of the variable distribution
  - 6) Club unseen levels in test dataset with most/least frequent levels in train dataset 
  - 7) Reduce high cardinality in categorical features using clustering or counts
  - 8) Generate sub features from time feature such as 'month','weekday',is_month_end','is_month_start' & 'hour'
  - 9) Group features by calculating min, max, mean, median & sd of similar features
  -10) Make nonlinear features (polynomial, sin , cos & tan)
  -11) Scales & Power Transform (zscore,minmax,yeo-johnson,quantile,maxabs,robust) , including option to transform target variable
  -12) Apply binning to continious variable when numeric features are provided as a list 
  -13) Detect & remove outliers using isolation forest, knn and PCA
  -14) Apply clusters to segment entire data
  -15) One Hot / Dummy encoding
  -16) Remove special characters from column names such as commas, square brackets etc to make it competible with jason dependednt models
  -17) Feature Selection throuh Random Forest , LightGBM and Pearson Correlation
  -18) Fix multicollinearity
  -19) Feature Interaction (DFS) , multiply , divided , add and substract features
  -20) Apply diamension reduction techniques such as pca_liner, pca_kernal, incremental, tsne 
      - except for pca_liner, all other method only takes number of component (as integer) i.e no variance explaination metohd available