В этой статье мы узнаем о данных временных рядов, их типах и некоторых важных концепциях, связанных с временными рядами.

ВВЕДЕНИЕ

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

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

ТИПЫ ВРЕМЕННЫХ РЯДОВ

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

Тренд — это долгосрочное изменение направления данных. Это наиболее распространенный тип временных рядов, который используется для измерения изменений общего направления данных за определенный период времени.

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

Циклический временной ряд – это временной ряд, который демонстрирует колебания данных в течение определенного периода времени. Этот тип временных рядов полезен для выявления и прогнозирования моделей поведения, которые не являются регулярными.

Типы временных рядов могут быть двух типов:

  1. Одномерный

Одномерные временные ряды — это самая простая форма анализа временных рядов. Он включает в себя анализ одной переменной во времени. Этот тип временных рядов обычно используется в финансовом анализе, экономике и прогнозировании погоды.

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

Вот некоторые примеры использования одномерных временных рядов в реальной жизни:

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

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

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

2. Многовариантный

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

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

Вот некоторые примеры использования многомерных временных рядов в реальной жизни:

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

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

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

ПОНИМАНИЕ НЕКОТОРОЙ ВАЖНОЙ ТЕОРИИ ДО РЕАЛИЗАЦИИ МОДЕЛИ

Перед внедрением модели необходимо знать некоторые важные понятия, которые мы обсудим в этом разделе. Давайте ненадолго обратимся к Python и загрузим наши данные. Мы будем работать с данными Microsoft Stock, которые мы будем импортировать с помощью библиотеки Yahoo Finance Python.

#Importing Dependencies
import yfinance as yf
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
import statsmodels.tsa.stattools as ts
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from sklearn.metrics import mean_squared_error

Мы продолжим и загрузим данные теперь, когда мы импортировали зависимости

# create object 'data' of type Ticker from the yfinance for MSFT
data = yf.Ticker("MSFT")
# Using History method and setting period set to "max" to retrieve all data
df = data.history(period="max")
#printing the data
df

Вот как выглядит фрейм данных:

Теперь, когда у нас есть данные, мы продолжим и предскажем столбец High фрейма данных. Но как это сделать программно? Поскольку модели регрессии здесь не работают, потому что у нас есть только 1 столбец, а модели регрессии не учитывают элемент времени или последовательности данных.

Для решения этой проблемы существует так называемая модель ARMA. AR означает авторегрессию, а MA означает скользящее среднее.

Авторегрессивный

  • Статистическая модель, которая пытается предсказать значения на основе запаздывающих значений, и запаздывание может быть выбрана по желанию.
  • Например. Продажи в 9-м месяце можно спрогнозировать на основе 7-го и 8-го месяцев.

Скользящее среднее

  • Статистическая модель, в которой Скользящее среднее ошибки в сочетании с Средним значением зависимой переменной пытается предсказать целевое значение.
  • На данный момент существует два типа скользящих средних:
  1. Прокручивание — мы используем размер окна и продолжаем прокручивать значения, сохраняя размер окна неизменным. По сути, мы исключаем последнее, а затем включаем следующее значение при переходе к следующему значению.
  2. Рекурсивный. Мы продолжаем добавлять значения, но не исключаем остальные.

Хорошо, но наши данные также, вероятно, имеют какую-то сезонность/тренд, так как же мы можем объяснить такое явление?

Что ж, мы используем модель ARIMA, в которой I обозначает интегрированный порядок и учитывает сезонность, о которой мы только что говорили.

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

Давайте проверим, имеют ли данные какую-либо сезонность или тенденцию или нет. Мы построим высокие значения

plt.figure(figsize=(15,4))
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.xlabel('Years')
plt.title('MSFT High Values', fontsize=20)
plt.plot(df.High)
plt.axhline(df.High.mean(), linestyle='--', color='red')
plt.show()

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

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

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

Если временной ряд является стационарным, среднее значение, дисперсия и автокорреляция должны оставаться постоянными во времени. Если среднее значение, дисперсия или автокорреляция изменяются с течением времени, временной ряд является нестационарным. Давайте воспользуемся расширенным тестом Дики-Фуллера, чтобы выяснить, являются ли данные стационарными или нет.

#Checking the stationarity of the data
result = ts.adfuller(df.High)

#Printing the test results
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():
    print('\t%s: %.3f' % (key, value))

#Interpreting the test results (Significance Level is 5%)
if result[1] <= 0.05:
    print('The variable is stationary')
else:
    print('The variable is not stationary')

Сезонная декомпозиция серии

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

#Creating a seasonal decomposition object
results = seasonal_decompose(df.High, period=365)
#fetching the trend
trend = results.trend
#fetching the sesonality
seasonal = results.seasonal
#Fetching the residuals
residual = results.resid

#Looping through the trend, seasonality and residuals and plot them
properties = [trend, seasonal, residual]
a = 1  # number of rows
b = 3  # number of columns
c = 1  # initialize plot counter
fig = plt.figure(figsize=(18,4))
fig.suptitle('Seasonal Decomposition of Target Variable', fontsize=20)
for i in properties:
    plt.subplot(a, b, c) 
    plt.plot(i)
    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.xlabel('Years')
    plt.ylabel(i.name)
    plt.xticks(rotation=45)
    c = c+1
plt.tight_layout()    
plt.show()

Очевидно, что существует тенденция, и нам необходимо сделать данные стационарными, чтобы можно было использовать модель ARIMA. Мы продолжим и нанесем на график разницу 1-го и 2-го порядка данных, чтобы определить, когда ряд станет стационарным.

# Original Series
fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(15, 10))
ax1.plot(df.High); ax1.set_title('Original Series'); ax1.axes.xaxis.set_visible(False)
ax1.spines['top'].set_visible(False)

# 1st Differencing
ax2.plot(df.High.diff()); ax2.set_title('1st Order Differencing'); ax2.axes.xaxis.set_visible(False)
ax2.spines['top'].set_visible(False)

# 2nd Differencing
ax3.plot(df.High.diff().diff()); ax3.set_title('2nd Order Differencing')
ax3.spines['top'].set_visible(False)

plt.xlabel('Lags')
plt.tight_layou

Очевидно, что ряд становится стационарным, поэтому мы возьмем интегрированный порядок за 1, он же d.

Боковое примечание: модель ARIMA запрашивает порядок при создании модели, и форма, в которой она ожидается, представляет собой кортеж из p, d и q.

Чтобы найти значения p и q, мы можем построить графики автокорреляции (ACF) и частичной автокорреляции (PACF). Из ACF мы получим значение q, а из PACF мы сможем получить значения p.

Функция автоматической корреляции

  • Это статистический метод, используемый для измерения корреляции между заданным временным рядом и его запаздывающей версией за последовательные интервалы времени.
  • Он используется для измерения степени сходства между серией и ее запаздывающими версиями за разные периоды времени.
  • Его можно использовать для обнаружения сезонности и других шаблонов во временном ряду.
  • Дальнейшее отставание будет включать влияние предыдущих отставаний.
  • Используется для расчета задержки в скользящем среднем (q).

Функция частичной автокорреляции

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

Мы можем построить график как для ACF, так и для PACF, и мы узнаем, сколько задержек следует учитывать.

fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(15, 10))
plot_acf(df.High, ax=ax1, auto_ylims=True, lags = 5,title = 'Original Series')
ax1.spines['top'].set_visible(False)

plot_acf(df.High.diff().dropna(), auto_ylims=True, lags = 5, ax=ax2,title = '1st Order Differencing')
ax2.spines['top'].set_visible(False)

plot_acf(df.High.diff().diff().dropna(), auto_ylims=True, lags = 5, ax=ax3, title= '2nd Order Differencing')
ax3.spines['top'].set_visible(False)

plt.tight_layout()
plt.show()

Как правило, количество значений запаздывания, которое следует учитывать, – это количество запаздываний до графика, пересекающего доверительный интервал. Точно так же мы можем построить график для PACF, который даст нам значения p. Мы будем считать p равным 1, а q равным 2, и мы уже пришли к выводу, что d будет равно 1.

Мы продолжим и реализуем модель в следующем уроке. Связь -



ЗАКЛЮЧЕНИЕ

  1. Анализ временных рядов – это мощный инструмент, который используется во многих различных дисциплинах для анализа и прогнозирования поведения данных во времени. Его можно использовать для понимания динамики сложных систем, а также для принятия решений и прогнозов.
  2. Существует несколько типов временных рядов, а именно трендовые, сезонные и циклические. Внутри этих типов существует дополнительная классификация, основанная на количестве используемых переменных: одномерные и многомерные.
  3. Стационарность необходимо проверить, чтобы правильно прогнозировать значения, поскольку алгоритмы машинного обучения могут быть чувствительны к изменениям данных и требовать стабильных данных для создания точных моделей.
  4. Модель ARMA предназначена для случаев, когда ваши данные стационарны, а ARIMA — для случаев, когда данные нестационарны.
  5. График ACF даст нам порядок p, а график PACF даст нам порядок q. dпорядок вычисляется по разнице n-го порядка ряда.

Заключительные мысли и заключительные комментарии

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

Если вам понравилась эта статья, я рекомендую вам пройти Global Certificate in Data Science & AI, потому что этот сертификат будет охватывать ваши основы, алгоритмы машинного обучения и глубокие нейронные сети (базовые для продвижения).