Демонстрация эффективности функции auto_arima () pmdarima по сравнению с реализацией традиционной модели ARIMA.
Что такое анализ временных рядов?
Одной из ключевых концепций в науке о данных является анализ временных рядов, который включает в себя процесс использования статистической модели для прогнозирования будущих значений временного ряда (например, финансовых цен, погоды, случаев заражения / смерти COVID-19) на основе прошлых результатов. Некоторые компоненты, которые можно увидеть при анализе временных рядов:
- Тренд: показывает общее направление данных временных рядов за период времени - тренды могут быть увеличивающимися (восходящими), уменьшающимися (нисходящими) или горизонтальными (стационарными).
- Сезонность: этот компонент демонстрирует повторяющуюся тенденцию в отношении времени, величины и направления - например, увеличение продаж мороженого в летние месяцы или увеличение числа пассажиров метро в холодные месяцы.
- Циклический компонент: тренд, у которого нет установленного повторения в течение определенного периода времени. Цикл может быть периодом взлетов и падений, в основном наблюдаемых в деловых циклах - циклы не показывают сезонной тенденции.
- Нерегулярные колебания: колебания данных временных рядов, которые являются беспорядочными, непредсказуемыми и могут / не могут быть случайными.
При проведении анализа временных рядов существует либо одномерный анализ временных рядов, либо многомерный анализ временных рядов. Одномерный используется, когда во времени наблюдается только одна переменная, тогда как многомерный используется, если во времени наблюдаются две или более переменных.
Что такое ARIMA? Зачем использовать Pmdarima?
ARIMA - это аббревиатура от Auto Regressive Integrated Moving Average, способ моделирования данных временных рядов для прогнозирования, которая определяется тремя параметрами порядка (p, d, q):
- AR (p): учитывается динамика роста / снижения данных.
- I (d): скорость изменения роста / снижения учитывается
- MA (q): учитывается шум между временными точками
Существует три типа моделей ARIMA: ARIMA, SARIMA и SARIMAX, которые различаются в зависимости от сезонности и / или использования экзогенных переменных.
Функция auto_arima от Pmdarima чрезвычайно полезна при построении модели ARIMA, поскольку помогает нам определить наиболее оптимальные параметры p, d, q и вернуть подобранную модель ARIMA.
Как новичок в науке о данных, при проведении анализа временных рядов я пошел долгим путем, прежде чем натолкнулся на функцию pmdarima auto_arima для построения высокопроизводительной модели временных рядов. В этой статье я сосредоточусь на одномерном анализе временных рядов, чтобы спрогнозировать количество авиапассажиров (из Kaggle) и обсудить с помощью традиционной реализации ARIMA по сравнению с более эффективным способом auto_arima.
Общие шаги по реализации модели ARIMA:
- Загрузить и подготовить данные
- Проверьте стационарность (при необходимости сделайте данные стационарными) и определите значение d
- Создайте графики ACF и PACF для определения значений p и q
- Подходит для модели ARIMA
- Прогнозирование значений на тестовом наборе
- Рассчитать r²
Сначала я загрузил и подготовил данные, изменив дату на объект datetime, установив дату для индексации с помощью метода set_index и проверив нулевые значения.
df=pd.read_csv('AirPassengers.csv') df=df.rename(columns={'#Passengers':'passengers','Month':'date'}) df['date'] = pd.to_datetime(df['date']) df.set_index(df['date'], inplace=True) df=df.drop(columns=['date']) df.head()
Затем я предварительно посмотрел на среднемесячное количество пассажиров авиакомпаний, которое показало, что данные не были стационарными. Это было дополнительно подтверждено проведением теста Дики-Фуллера, который является тестом единичного корня на стационарность, как показано на изображении ниже:
После двукратного сравнения наших данных наше p-значение было меньше нашего альфа (0,05), поэтому мы смогли отклонить нулевую гипотезу и принять альтернативную гипотезу о том, что данные являются стационарными. Затем мы смоделировали данные временного ряда, установив для параметра d значение 2. Затем я посмотрел на наши графики ACF / PACF, используя данные разности, чтобы визуализировать задержки, которые, вероятно, будут влиять на моделирование числа. пассажиров.
Из наших визуализаций я определил, что наш параметр p равен 0, а параметр q равен 2 - наши параметры p, d, q будут (0 , 2,2) для модели ARIMA. После разделения данных на обучающие и тестовые группы и подгонки модели ARIMA на обучающем наборе для прогнозирования набора тестов мы получили значение r², равное -1,52, что говорит нам о том, что модель вообще не следовала тенденции данных.
Скорее всего, я неправильно рассчитал значения p, d, q, что привело к отрицательному значению r², но пока давайте попробуем построить другую модель ARIMA, используя pmdarima.
Использование pmdarima для модели Auto ARIMA
В предыдущем методе проверка на стационарность, при необходимости делая данные стационарными и определение значений p и q с использованием графиков ACF / PACF, может занять много времени и меньше эффективный. Использование функции auto_arima () pmdarima упрощает для нас эту задачу, устраняя шаги 2 и 3 для реализации модели ARIMA. Давайте попробуем это с текущим набором данных.
После загрузки и подготовки данных мы можем использовать функцию pmdarima ADFTest () для проведения теста Дики-Фуллера.
adf_test=ADFTest(alpha=0.05) adf_test.should_diff(df) # Output (0.01, False)
Этот результат указывает на то, что данные не являются стационарными, поэтому нам нужно использовать концепцию «Integrated (I)» (параметр d), чтобы сделать данные стационарными при построении модели Auto ARIMA.
Затем я разделил набор данных на обучающий и тестовый (80% / 20%) наборы, чтобы построить модель Auto ARIMA на обучающем наборе и сделать прогноз с использованием тестового набора данных.
train=df[:114] test=df[-30:] plt.plot(train) plt.plot(test)
Затем мы строим модель Auto ARIMA с помощью функции auto_arima () pmdarima. Использование функции auto_arima () вызывает небольшие значения p, d, q, которые представляют несезонные компоненты, и значения P, D, Q в верхнем регистре, которые представляют сезонные компоненты. Auto_arima () аналогичен другим методам настройки гиперпараметров и предназначен для нахождения оптимальных значений для p, d, q с использованием различных комбинаций. Окончательные значения p, d, q определяются с учетом более низких параметров AIC и BIC.
model=auto_arima(train,start_p=0,d=1,start_q=0, max_p=5,max_d=5,max_q=5, start_P=0, D=1, start_Q=0, max_P=5,max_D=5, max_Q=5, m=12, seasonal=True, error_action='warn',trace=True, supress_warnings=True,stepwise=True, random_state=20,n_fits=50)
Мы можем просмотреть сводку модели:
Затем мы можем использовать обученную модель, чтобы спрогнозировать количество пассажиров авиакомпании на тестовой выборке и создать визуализацию.
prediction = pd.DataFrame(model.predict(n_periods = 30),index=test.index) prediction.columns = ['predicted_passengers'] plt.figure(figsize=(8,5)) plt.plot(train,label="Training") plt.plot(test,label="Test") plt.plot(prediction,label="Predicted") plt.legend(loc = 'upper left') plt.savefig('SecondPrection.jpg') plt.show()
Модель Auto ARIMA дала нам значение r² 0,65 - эта модель намного лучше справлялась с захватом тенденции в данных по сравнению с моей первой реализацией модели ARIMA.
В этой статье я продемонстрировал традиционную реализацию модели ARIMA по сравнению с моделью Auto ARIMA с помощью auto_arima (). В то время как традиционная реализация ARIMA требует выполнения дифференцирования и построения графиков ACF и PACF, модель Auto ARIMA, использующая функцию auto_arima () pmdarima, более эффективна для определения оптимальных значений p, d, q.
Дополнительные сведения о функции auto_arima () pmdarima см. В следующей документации.
Спасибо за чтение! Весь код доступен на моем GitHub :)