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

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

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

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

Фейкер

Faker — это очень простой и интуитивно понятный пакет Python, предназначенный для упрощения генерации синтетических данных.

Давайте установим Faker:

pip install Faker

Теперь начните занятие…

из поддельного импорта поддельного
fake = Faker()

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

fake.name()

Результатом является имя человека, когда мы используем атрибут .name класса Faker. Синтетические данные будут создаваться случайным образом каждый раз, когда мы запускаем атрибут. Запустить снова…

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

Здесь это не ограничивается переменной имени — другим примером является адрес, банк, работа, штрих-код, кредитный рейтинг и многое другое. В пакете Faker этот генератор называется Provider. Подробнее смотрите в документации и больше примеров в: примеры.

SDV — Хранилище синтетических данных

Второй пакет называется SDV или Synthetic Data Vault, который служит для создания синтетических данных на основе заданного набора данных. Сгенерированные данные могут быть одной таблицей, несколькими таблицами или временными рядами в зависимости от необходимости.

Сгенерированные данные имеют те же свойства и статистику, что и исходный набор данных.

SDV генерирует синтетические данные, применяя математические методы и модели машинного обучения, такие как модель глубокого обучения. Даже если данные содержат несколько типов данных и отсутствующие данные, SDV обработает их, поэтому нам нужно только предоставить данные (и метаданные, когда это необходимо).

Давайте потренируемся?

pip install sdv

Мы будем использовать набор данных Kaggle: Horse Survival Dataset (он содержит много недостающих данных и типов).

импортировать панд как pd
data = pd.read_csv(‘horse.csv’)
data.head()

Набор данных готов, и мы хотим сгенерировать синтетические данные на его основе. Давайте воспользуемся одной из доступных моделей SDV Singular Table: GaussianCopula.

из sdv.tabular import GaussianCopula
model = GaussianCopula()
model.fit(data)

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

sample = model.sample(200)
sample.head()

Как и выше, с помощью атрибута .sample мы получаем рандомизированные синтетические данные. Количество необходимых данных зависит от числа, которое вы передаете атрибуту.

Чтобы сгенерировать уникальный номер для ключевых полей, например: Hospital_number, мы можем передать параметр: primary_key в модель,

model = GaussianCopula(primary_key=’hospital_number’)
model.fit(data)

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

После генерации данных и как узнать, насколько хороши сгенерированные синтетические данные? В этом случае мы могли бы использовать функцию: оценить из SDV. Эта оценка сравнивает фактический набор данных с образцом. Доступно множество тестов, здесь мы будем использовать только Колмогоров-Смирнов (КС) и Хи-квадрат (КС).

оценка импорта из sdv.evaluation
оценка(образец, данные, метрики=['CSTest', 'KSTest'], агрегат=False)

KSTest используется для сравнения непрерывных столбцов, а CSTest — для сравнения дискретных столбцов. Оба теста приводят к нормализованной оценке от 0 до 1 с целью максимизации оценки. Из приведенного выше результата видно, что столбцы дискретной выборки хорошие (почти похожи на реальные данные — 0,88). Напротив, непрерывные столбцы могут иметь сдвиг распределения — 0,68. Если вы хотите углубиться в методы оценки SDV, перейдите по ссылке документация.

Гретель — Гретель Синтетика

Последний и не менее важный пакет — Gretel или Gretel Synthetics — это пакет с открытым исходным кодом, основанный на рекуррентной нейронной сети (RNN) для создания структурированных и неструктурированных данных. Пакетный подход рассматривает набор данных как текстовые данные и обучает модель на основе этих текстовых данных. Затем модель будет создавать синтетические данные с текстовыми данными (нам нужно преобразовать данные в желаемый результат).

Гретель требовал немного больше вычислительной мощности, поскольку он основан на RNN, поэтому я рекомендую использовать блокнот Google Colab.

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

Несбалансированные данные

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

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

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

Игнорирование этого факта и обучение алгоритма на основе исходного набора данных с пропуском промежуточного этапа балансировки данных может иметь прямое влияние на вашу науку о данных проект. (+)

Методы работы с несбалансированными данными:

Недостаточная выборка

Он состоит в случайном сокращении примеров мажоритарного класса. Ниже приведены некоторые техники:

  • NearMiss — это алгоритм недостаточной выборки, который состоит из случайного сокращения примеров большинства классов, но он выбирает примеры на основе расстояния.
  • ClusterCentroids — использует метод K-средних для уменьшения количества выборок. Следовательно, каждый класс будет синтезирован с центроидами метода K-средних вместо исходных образцов.
  • RandomUnderSampler — это быстрый и простой способ сбалансировать данные путем случайного выбора подмножества данных для целевых классов.
  • EditedNearestNeighbours — применяет алгоритм ближайших соседей и «редактирует» установленную дату, удаляя образцы, которые «достаточно» не согласуются со своим соседством.
  • RepeatedEditedNearestNeighbours — расширяется от EditedNearestNeighbours путем многократного повторения алгоритмов.
  • AllKNN — отличается от RepeatedEditedNearestNeighbours тем, что количество соседей алгоритма внутреннего ближайшего соседа увеличивается с каждой итерацией.

Оверсэмплинг

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

  • SMOTE — вероятно, наиболее часто используемый в настоящее время, он состоит в создании синтетических данных (не дубликатов) миноритарного класса от соседей. Он вычисляет ближайшие соседи и характеристики этих соседей для создания новых данных. Если количество сгенерированных данных слишком велико, у нас может быть переобучение . Пример использования Smote в области Здоровье.
  • RandomOverSampler — аналогичный случайной подвыборке, этот подход состоит в генерации новых выборок методом случайной выборки с заменой имеющихся в настоящее время выборок (позволяет отбирать разнородные данные, например, содержащие несколько строк ).
  • SMOTENC — это расширение алгоритма SMOTE, в котором категориальные данные обрабатываются по-другому. SMOTNC работает только до тех пор, пока данные представляют собой смесь категориальных и числовых функций.
  • SMOTEN — если набор дат состоит только из категориальных признаков, мы можем использовать вариант SMOTEN.

гибриды

Существует два готовых к использованию класса, которые реализуют несбалансированное обучение для объединения методов избыточной выборки и недостаточной выборки: SMOTETomek и SMOTEENN.

Функция Разработка

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

Заключение и ссылки

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

Рекомендации

Оригинальная статья на португальском языке

Несбалансированная классификация