Модель ARIMA в машинном обучении
Модель ARIMA означает интегрированное скользящее среднее с авторегрессией. Эта модель предоставляет набор функций, которые являются очень мощными и гибкими для выполнения любых задач, связанных с прогнозированием временных рядов.
В машинном обучении модель ARIMA обычно представляет собой класс статистических моделей, которые дают выходные данные, которые линейно зависят от их предыдущих значений в комбинации стохастических факторов.
При выборе подходящей модели прогнозирования временных рядов нам необходимо визуализировать данные для анализа тенденций, сезонности и циклов. Когда сезонность является очень сильной характеристикой временных рядов, нам необходимо рассмотреть такую модель, как сезонная ARIMA (SARIMA).
Модель ARIMA работает с использованием модели распределенного запаздывания, в которой алгоритмы используются для прогнозирования будущего на основе запаздывающих значений. В этой статье я покажу вам, как использовать модель ARIMA, используя очень практичный пример из машинного обучения, которым является обнаружением аномалий.
Обнаружение аномалий с помощью модели ARIMA
Обнаружение аномалий означает выявление неожиданных событий в процессе. Это означает обнаружение угроз для наших систем, которые могут нанести вред с точки зрения безопасности и утечки важной информации.
Важность обнаружения аномалий не ограничивается безопасностью, но оно используется для обнаружения любого события, которое не соответствует нашим ожиданиям. Здесь я объясню вам, как мы можем использовать модель ARIMA для обнаружения аномалий.
Я буду использовать данные, основанные на поминутных показателях загрузки ЦП хоста. Теперь приступим к выполнению этой задачи, импортировав необходимые библиотеки:
import pandas as pd !pip install pyflux import pyflux as pf from datetime import datetime
Теперь давайте импортируем данные и кратко рассмотрим данные и некоторые из них. Вы можете скачать данные, которые я использую в этой задаче, отсюда.
from google.colab import files uploaded = files.upload() data_train_a = pd.read_csv('cpu-train-a.csv', parse_dates=[0], infer_datetime_format=True) data_test_a = pd.read_csv('cpu-test-a.csv', parse_dates=[0], infer_datetime_format=True) data_train_a.head()
Теперь давайте визуализируем эти данные, чтобы быстро понять, с чем мы работаем:
import matplotlib.pyplot as plt plt.figure(figsize=(20,8)) plt.plot(data_train_a['datetime'], data_train_a['cpu'], color='black') plt.ylabel('CPU %') plt.title('CPU Utilization')
Использование модели ARIMA
А сейчас давайте посмотрим, как мы можем использовать модель ARIMA для прогнозирования данных:
model_a = pf.ARIMA(data=data_train_a, ar=11, ma=11, integ=0, target='cpu') x = model_a.fit("M-H")
Запуск 1:
Приемлемость Metropolis-Hastings = 0.0
Запуск 2:
Приемлемость Metropolis-Hastings = 0.026
Запуск 3:
Приемлемость Metropolis-Hastings = 0.2346
Обучение завершено! Запуск на выборке:
Приемлемость Metropolis-Hastings = 0.244425
Теперь давайте визуализируем нашу модель:
model_a.plot_fit(figsize=(20,8))
Приведенные выше выходные данные показывают использование ЦП с течением времени с учетом прогноза модели ARIMA. Теперь давайте проведем образец теста, чтобы оценить производительность нашей модели:
model_a.plot_predict_is(h=60, figsize=(20,8))
Приведенные выше выходные данные показывают входящую в выборку (обучающую выборку) нашей модели прогнозирования ARIMA. Теперь я выполню фактический прогноз, используя последние 100 наблюдаемых точек данных, за которыми следуют 60 прогнозируемых точек:
model_a.plot_predict(h=60,past_values=100,figsize=(20,8))
Давайте выполним такое же обнаружение аномалии для другого сегмента набора данных об использовании ЦП, захваченного в другое время:
data_train_b = pd.read_csv('cpu-train-b.csv', parse_dates=[0], infer_datetime_format=True) data_test_b = pd.read_csv('cpu-test-b.csv', parse_dates=[0], infer_datetime_format=True) plt.figure(figsize=(20,8)) plt.plot(data_train_b['datetime'], data_train_b['cpu'], color='black') plt.ylabel('CPU %') plt.title('CPU Utilization')
Теперь давайте сопоставим эти данные с моделью:
model_b = pf.ARIMA(data=data_train_b, ar=11, ma=11, integ=0, target='cpu') x = model_b.fit("M-H")
Запуск 1:
Приемлемость Metropolis-Hastings = 0.0
Запуск 2:
Приемлемость Metropolis-Hastings = 0.016
Запуск 3:
Приемлемость Metropolis-Hastings = 0.1344
Запуск 4:
Приемлемость Metropolis-Hastings = 0.21025
Запуск 5:
Приемлемость Metropolis-Hastings = 0.23585
Обучение завершено! Запуск на выборке:
Приемлемость Metropolis-Hastings = 0.34395
model_b.plot_predict(h=60,past_values=100,figsize=(20,8))
Мы можем визуализировать аномалию, которая возникает через короткое время после периода обучения, поскольку наблюдаемые значения попадают в диапазоны низкой достоверности, поэтому это вызовет предупреждение об аномалии.
Надеюсь, вам понравилась эта статья об обнаружении аномалий с помощью модели ARIMA.