Прогнозирование временных рядов — это метод прогнозирования будущих значений на основе исторических данных, которые записываются во времени через регулярные промежутки времени (например, ежедневно, ежемесячно или ежегодно). Цель состоит в том, чтобы выявить закономерности и тенденции в данных, чтобы мы могли делать прогнозы о том, что может произойти в будущем.

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

Этапы прогнозирования временных рядов:

  1. Сбор данных. Первым шагом является сбор данных за определенный период времени. Это может быть что угодно, что меняется со временем, например температура, количество продаж или посещаемость веб-сайта.
  2. Визуализация данных: когда у нас есть данные, мы можем нанести их на график. Глядя на график, мы можем увидеть такие закономерности, как сезонность (повторяющиеся закономерности) или тренды (восходящие или нисходящие движения).
  3. Предварительная обработка данных. Данные временных рядов могут содержать отсутствующие значения или неточности. Нам нужно очистить данные и сделать их согласованными для точного прогнозирования.
  4. Выбор модели. Существуют различные математические модели для анализа и прогнозирования данных временных рядов. Одной из популярных моделей является модель ARIMA (авторегрессивная интегрированная скользящая средняя), которая учитывает прошлые значения, различия между наблюдениями и скользящие средние значения.
  5. Обучение модели: мы разделяем наши данные на обучающий набор (прошлые данные) и тестовый набор (будущие данные). Затем модель обучается на тренировочном наборе, чтобы извлечь уроки из прошлых моделей и отношений.
  6. Создание прогнозов: после обучения модель готова делать прогнозы. Он использует шаблоны и отношения, которые он изучил во время обучения, для прогнозирования будущих значений.
  7. Оценка модели. Чтобы узнать, насколько хорошо работает модель, мы сравниваем ее прогнозы с фактическими значениями в тестовом наборе. Такие показатели, как MAPE (средняя абсолютная ошибка в процентах) или RMSE (среднеквадратичная ошибка), помогают нам измерить точность прогноза.
  8. Настройка модели: если точность модели неудовлетворительна, мы можем настроить параметры модели или попробовать разные модели, пока не получим более точный прогноз.

Некоторые ключевые концепции и методы прогнозирования временных рядов:

1. Тренд: тренд представляет долгосрочное движение или направление данных во времени. Он показывает, увеличиваются ли значения в целом, уменьшаются или остаются относительно постоянными.

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

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

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

5. Скользящее среднее (MA). Скользящее среднее — это метод, используемый для сглаживания колебаний данных и выявления тенденций. Он включает в себя вычисление среднего фиксированного числа последовательных точек данных.

6. Авторегрессия (AR): модель авторегрессии использует прошлые значения временного ряда для прогнозирования будущих значений. Предполагается, что текущее значение является линейной комбинацией его прошлых значений и случайного члена ошибки.

7. Оценка модели. Чтобы оценить точность модели прогнозирования временных рядов, мы используем такие показатели, как средняя абсолютная ошибка в процентах (MAPE), среднеквадратическая ошибка (RMSE), средняя абсолютная ошибка (MAE) и другие. Эти показатели помогают нам понять, насколько хорошо работает модель, и сравнить разные модели.

Модель АРИМА

ARIMA расшифровывается как AutoRegressive Integrated Moving Average. Это популярная и мощная модель прогнозирования временных рядов, которая может помочь нам предсказать будущие значения на основе прошлых данных.

Что означает ARIMA:

Авторегрессия (AR):

  • «Авто» означает «я» или «собственный». В этом контексте это относится к взаимосвязи между точкой данных и ее предыдущими точками данных.
  • Часть AR ARIMA использует прошлые значения временного ряда для прогнозирования будущих значений.
  • Например, если у нас есть набор данных о дневной температуре, часть AR рассматривает, как вчерашняя температура влияет на сегодняшнюю температуру.

Интегрированный (I):

  • «Интегрированная» часть предназначена для того, чтобы сделать данные стационарными, что означает, что статистические свойства остаются постоянными во времени.
  • Нестационарные данные могут иметь тенденции или сезонность, что может затруднить прогнозирование. Итак, часть I преобразует данные, чтобы удалить эти шаблоны.
  • Это преобразование часто выполняется путем получения разницы между последовательными точками данных.

Скользящая средняя (MA):

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

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

# importing our libraries

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_absolute_percentage_error

# loading our dataset

currency = pd.read_csv('data/currency.csv')
currency.head()

# changing our time column to datetime format

currency['Time'] = pd.to_datetime(currency['Time'])
currency.set_index('Time', inplace=True)

# ploting our data

plt.figure(figsize=(12, 6))
plt.plot(currency['GEMS_GEMS_SPENT'])
plt.xlabel('Date')
plt.ylabel('GEMS_GEMS_SPENT')

plt.show()

# Split the data into train and test sets

train_data = currency[:'2017-12-24']
test_data = currency['2018-02-24':]

# Fit the ARIMA model

model = ARIMA(train_data, order=(5, 1, 0))
model_fit = model.fit()

# Make predictions

predictions = model_fit.predict(start='2018-02-24', end='2020-12-01', dynamic=False)

# Plot the predicted values along with the original data

plt.figure(figsize=(10, 6))
plt.plot(train_data, label='Training Data')
plt.plot(test_data, label='Test Data')
plt.plot(predictions, label='Predictions')
plt.xlabel('Time')
plt.ylabel('GEMS_GEMS_SPENT')
plt.legend()

plt.show()

# calculate the MAPE

actual_values = test_data.to_numpy().flatten()
predicted_values = predictions.to_numpy()
mape = np.mean(np.abs((predicted_values - actual_values) / actual_values)) * 100

print('Mean Absolute Percentage Error (MAPE):', mape)

Заключение

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

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