Генерация синтетических данных на основе существующих реальных данных (на Python)

Вопрос или проблема

Я ищу подход для генерации синтетических данных для обнаружения аномалий. У нас есть реальные данные, но мы хотим внедрить аномалии, чтобы протестировать модель в условиях боевых происшествий (реальных данных слишком мало для вероятных будущих аномалий).

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

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

scikit-learn может генерировать синтетические данные, но, похоже, у него нет метода для основывания на существующих статистических свойствах реальных данных.

Я могу сделать что-то простое, например:

res = {}
for column in df: 
    nrows = len(df[column].index)
    mean = df[column].mean()
    std = df[column].std()
    mu, sigma = mean, std # среднее и стандартное отклонение
    synthetic_data = np.random.normal(mu, sigma, nrows)
    res[column] = synthetic_data

…что просто обнаруживает средние значения и стандартное отклонение каждого столбца, а затем воссоздает его с использованием numpy для выборки из нормального распределения (большое допущение), но, очевидно, это плохо имитирует данные:

Реальные данные

введите описание изображения здесь

Синтетические данные

введите описание изображения здесь

Почему бы не работать в частотной области? Сделайте преобразование Фурье ваших реальных данных, а затем независимо измените полученные отдельные синусоиды, увеличив/уменьшив амплитуды на небольшое значение, и, аналогично, слегка увеличив/уменьшив частоты, а затем объедините их, чтобы получить аналогичные синтетические данные.

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

.

Ответ или решение

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

Теория

Генерация синтетических данных осуществляет несколько задач:

  1. Сохранение статистических свойств: Генерируемые данные должны отражать реальные наборы данных в терминах их статистических свойств, чтобы обеспечить реальное тестирование моделей.

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

  3. Эффективность и простота реализации: Решение должно быть достаточно ясным в плане применения и эксплуатации.

Пример

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

  1. Использование scikit-learn: Хотя scikit-learn предоставляет функции для генерации синтетических данных, такие как make_blobs или make_classification, они более подходят для создания искусственных наборов данных с нуля и не базируются на реальных данных.

  2. Работа в частотной области: При помощи преобразования Фурье можно изначально проанализировать данные в частотном домене. Это позволяет подчеркнуть фундаментальные частотные компоненты данных и аналогично менять амплитуды и частоты для получения синтетических данных.

  3. SMOTE алгоритм из библиотеки imbalanced-learn: Этот алгоритм больше подходит для задачи ресэмплинга данных, когда требуется создать дополнительную кластеризацию выборки в задачах с несбалансированными данными. SMOTE создает новые образцы путем интерполяции между существующими наблюдениями.

Применение

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

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

  2. Моделирование распределений: Используйте библиотеки, такие как scipy.stats, чтобы подогнать данные к их вероятным распределениям (нормальное, биномиальное, экспоненциальное и т.д.) и извлечь необходимые параметры для дальнейшего использования в воспроизведении подобных схем распределения в данных.

  3. Генерация синтетических данных: На основе полученных распределений используйте numpy или scipy для создания новых данных. Например, для нормального распределения достаточно будет воспользоваться функцией numpy.random.normal.

  4. Внедрение аномалий: Создайте функции, которые получат "экстремальные" значения на основе предоставленных или расчетных параметров распределения. Эти значения должны отклоняться от нормального диапазона, чтобы быть уверенными, что модель распознает их как аномалии.

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

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

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

Капча загружается...