Существуют ли библиотеки для генерации синтетических аномалий в временных рядах на Python?

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

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

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

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

Я нашел https://github.com/KIT-IAI/GeneratingSyntheticEnergyPowerAnomalies, и есть много библиотек для обнаружения аномалий, но я не могу найти ничего конкретного для добавления аномалий.

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

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

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

Библиотеки для генерации синтетических аномалий в данных временных рядов

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

    import numpy as np
    import pandas as pd
    
    def add_anomalies(data: pd.Series, anomaly_type: str, magnitude: float, start: int, end: int) -> pd.Series:
       series = data.copy()
       if anomaly_type == 'noise':
           noise = np.random.normal(0, magnitude, size=len(series))
           series += noise
       elif anomaly_type == 'zero':
           series[start:end] = 0
       elif anomaly_type == 'increase':
           series[start:end] += magnitude
       elif anomaly_type == 'outlier':
           outlier_indices = np.random.choice(len(series), size=int(magnitude), replace=False)
           series[outlier_indices] = series[outlier_indices] + np.random.normal(10, 5, size=len(outlier_indices))
       return series
  2. Synthea
    Это библиотека, созданная для генерации синтетических медицинских данных, но она может быть адаптирована для использования в других областях. Вы можете изменить параметры генерации, чтобы создать разные виды аномалий. Однако, потребуется немного настроек и доработок.

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

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

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

Заключение

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

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

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

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