Вопрос или проблема
Я работаю над обнаружением аномалий в данных временных рядов и мне нужно добавить синтетические аномалии в существующие данные временных рядов (чтобы протестировать алгоритмы обнаружения аномалий).
Я могу сделать это, запустив функцию для модификации временного ряда в случайных точках, что работает, но мне интересно, есть ли какие-либо библиотеки в экосистеме Python, которые делают это.
Идеально, если бы я мог передать массив (или серию pandas) в функцию и получить другой массив с вставленными аномалиями различными способами и разных видов. Например, я мог бы захотеть добавить случайный шум, установить серию на ноль на интервале, увеличить среднее значение серии или добавить случайные выбросы и т. д.
Я нашел https://github.com/KIT-IAI/GeneratingSyntheticEnergyPowerAnomalies, и есть много библиотек для обнаружения аномалий, но я не могу найти ничего конкретного для добавления аномалий.
Смысл использования библиотеки в том, что, вероятно, существуют виды аномалий, которые я не учел, или о которых я еще не знаю, или которые могут быть полезны.
Ответ или решение
Вопрос о создании синтетических аномалий в данных временных рядов является актуальным для специалистов в области анализа данных и машинного обучения. Создание таких аномалий важно не только для тестирования алгоритмов обнаружения аномалий, но и для улучшения их устойчивости и точности. К счастью, в экосистеме Python существует несколько библиотек, которые могут помочь в этой задаче.
Библиотеки для генерации синтетических аномалий в данных временных рядов
-
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
-
Synthea
Это библиотека, созданная для генерации синтетических медицинских данных, но она может быть адаптирована для использования в других областях. Вы можете изменить параметры генерации, чтобы создать разные виды аномалий. Однако, потребуется немного настроек и доработок. -
tsfresh
Хотя эта библиотека в первую очередь предназначена для извлечения признаков из временных рядов, она предоставляет возможность добавления искусственного шума к данным. Synthea также может быть использована в контексте создания аномалий. -
anomaly-detection
Это специализированная библиотека для обнаружения аномалий, но она также может быть адаптирована для вставки предопределенных аномалий в ваши временные ряды, чтобы оценить эффективность различных алгоритмов. -
Dollar
Библиотека, которая может помочь создавать синтетические временные ряды с аномалиями. Она включает в себя функции для добавления различных типов аномальных событий, таких как выбросы, скачки и шумы. Однако, данная библиотека может потребовать индивидуального подхода к настройке конкретных видов аномалий.
Заключение
Использование специализированных библиотек для создания синтетических аномалий очень полезно, так как они позволяют не только тестировать существующие модели, но и находить новые виды аномалий, которые могут возникнуть в реальной жизни. Рекомендуется тщательно исследовать возможности указанных библиотек и адаптировать их под ваши конкретные задачи.
Если вы столкнулись с дополнительными пожеланиями касательно различных типов аномалий, рекомендую самостоятельно разработать функции на основе вышеупомянутых примеров. Это позволит вам иметь полное управление над процессом генерации аномалий и настроить параметры под конкретные условия ваших данных.