Вопрос или проблема
Наш csv содержит 36 колонок
- 1 колонка времени, собранная каждые 30 минут
- 3 переменные (количество, задержка, общее время) x 10 признаков (вход-выход пользователя, серверный вход-выход, параллелизм и т.д.) различных точек данных с сервера: пример – количество входа-выхода пользователя, задержка входа-выхода пользователя, общее время входа-выхода пользователя.
- остальные 5 являются более статичными: имя сервера, IP-адрес и т.д.
Мы знаем, что когда есть пик в одном из признаков (вход-выход пользователя, серверный вход-выход), это означает проблему на сервере… иногда это может быть комбинацией признаков.
В данных за последний год мы можем видеть, что если задержка в каком-либо из признаков: выброс имеет некоторые шансы стать большим выбросом (что означает, что мы видим, как выброс продолжает увеличиваться в интервале 30 минут, и самый большой совпадает с временем нашей проблемы), что вызывает проблему на сервере.
После прочтения множества блогов смог получить что-то вроде ниже, работающее для 1 признака… Но мы хотим объединить и другие признаки, чтобы получить консолидированный результат.
# from sklearn.ensemble import IsolationForest
# model = IsolationForest(contamination=0.004)
# model.fit(df[['Concurrency Latency']])
# df['outliers']=pd.Series(model.predict(df[['Concurrency Latency']])).apply(lambda x: 'yes' if (x == -1) else 'no' )
# df.query('outliers=="yes"')
# fig = px.scatter(df.reset_index(), x='STime', y='Concurrency Latency', color="outliers")
# fig.update_xaxes(
# rangeslider_visible=True,
# )
# fig.show()
Есть идеи, какая библиотека может помочь в этом. Нужно, чтобы она работала с временными рядами, чтобы понять тенденции и сезонность.
Фон: новичок в ML, начал изучать Python некоторое время назад.
Буду признателен за любую помощь. Цель – поймать выброс, когда он начинает с маленького предупреждения… чтобы мы были готовы за несколько часов до этого.
Prophet довольно хорошо адаптирован к многовариантным временным рядам с или без сезонности, включая события.
Вот несколько кодов, которые могут быть полезны:
https://medium.com/mlearning-ai/multivariate-time-series-forecasting-using-fbprophet-66147f049e66
https://www.kaggle.com/code/bagavathypriya/multivariate-time-series-using-fb-prophet
Однако Prophet работает только с временными рядами и не может хорошо справляться с отсутствующими данными.
Поэтому вы можете использовать Random Forest, который может обрабатывать любые типы данных, но прогнозы временных рядов могут быть хуже, чем у Prophet:
https://www.analyticsvidhya.com/blog/2021/06/random-forest-for-time-series-forecasting/
Ответ или решение
Проблема и целевая аудитория
Ваша задача заключается в выявлении аномалий в многомерных временных рядах, содержащих данные о нагрузке на сервер. Это необходимо для заранее предупреждения о потенциальных проблемах. Вы уже начали с использования алгоритма Isolation Forest для одной переменной, но стремитесь расширить это на все ваши столбцы, чтобы получить более целостное представление о проблемах в работе сервера. Задача довольно актуальна для специалистов в области IT и машинного обучения, особенно для тех, кто начинает осваивать Python и машинное обучение.
Решение: библиотеки и подходы
-
Введение в библиотеки для анализа временных рядов
Существует несколько библиотек в Python, которые могут быть полезны для анализа многомерных временных рядов:
-
Prophet от Facebook: хорошо зарекомендовавшая себя библиотека для прогнозирования временных рядов, которая может обрабатывать данные с сезонностью и праздниками. Однако важно помнить, что Prophet имеет свои ограничения — он не всегда хорошо работает с пропущенными данными.
-
Scikit-learn с предыдущим Isolation Forest: отличная библиотека для машинного обучения, которую вы уже начали использовать. Можно комбинировать несколько подходов для достижения лучшего результата.
-
Statsmodels: предоставляет функции для анализа временных рядов и статистического тестирования, включая ARIMA и Exponential Smoothing.
-
-
Комбинирование функций
Чтобы учесть несколько переменных, которые могут влиять друг на друга, вы можете использовать методы, позволяющие анализировать взаимосвязи между временными рядами. Например, можно создать мультивариантные модели, такие как VAR (Vector Auto Regression) или использовать LSTM (Long Short-Term Memory) сети из Keras или TensorFlow для обработки временных рядов.
-
Формирование общей аномалии с несколькими признаками
Для выполнения задачи выделения аномалий по многочисленным признакам можно попробовать следующее:
-
Загрузка и очистка данных: обработайте пропуски и подготовьте данные, чтобы они были готовы для анализа. Возможно, будет полезно объединить столбцы воедино, чтобы создать иерархию признаков, где можно рассмотреть, как изменения в одном признаке влияют на другие.
-
Применение Isolation Forest к многомерным данным: Используйте метод Isolation Forest, комбинируя признаки. Например, вы можете создать набор данных, включающий значения latencies, counts, и другие важные признаки, чтобы получить предсказания из модели.
Пример кода:
from sklearn.ensemble import IsolationForest import pandas as pd # Загрузка данных df = pd.read_csv('your_data.csv') # Объединим важные признаки в одну выборку features = ['user_io_count', 'user_io_latency', 'user_io_totaltime', 'server_io_count', 'server_io_latency', 'server_io_totaltime', 'concurrency_count', 'concurrency_latency', 'concurrency_totaltime'] # Обучение модели Isolation Forest на нескольких признаках model = IsolationForest(contamination=0.004) model.fit(df[features]) df['outliers'] = pd.Series(model.predict(df[features])).apply(lambda x: 'yes' if (x == -1) else 'no') # Визуализация аномалий import plotly.express as px fig = px.scatter(df.reset_index(), x='date_time', y='user_io_latency', color="outliers") fig.update_xaxes(rangeslider_visible=True) fig.show()
-
-
Мониторинг и предсказание аномалий
Системы на основе машинного обучения могут быть использованы для предварительного предупреждения о возникновении аномалий. В этом отношении, использование алгоритмов LSTM для распознавания временных зависимостей и предсказания потенциальных аномалий может стать эффективным решением.
Заключение
Исходя из приведенных выше решений, вы имеете возможность развивать вашу модель, охватывая многомерные временные ряды и выявляя предстоящие проблемы на сервере. Начните с Herbalife, постепенно добавляя больше переменных и прямо применяя модели к вашим данным, чтобы улучшить точность и предсказуемость. Выбирая подходящие инструменты и методы, вы сможете значительно улучшить процесс определения аномалий и повысить надежность вашего сервера.