В последних двух статьях мы много обсуждали, как прогнозировать временные ряды - многомерные или одномерные (ссылки ниже !!). Но ждать! А как насчет предварительной обработки?

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

  • Прежде всего преобразуйте столбец Date в тип данных date и установите его в качестве индекса. Возможно, вам могут быть предоставлены разные форматы даты, например, 25.03.1997, 1997.03.25 или 25.03.1997. Как интерпретировать все эти форматы?

Попробуйте strptime (x, format) из библиотеки DateTime. Здесь «x» - это ваш образец, который нужно преобразовать, а «format» - это желаемый формат.

Пример -

если 25.03.1997, формат = ’% d /% m /% Y’

если 1997/03/25, формат = ’% Y /% m /% d’ и т. д.

  • Не забудьте отсортировать данные по столбцу / индексу даты.
  • Самый важный шаг - проверить, является ли временной ряд стационарным.

Почему? проверьте здесь

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

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

  • Самостоятельное различие - его можно рассматривать как разницу между текущей серией и отставленной версией серии. Сдвиг может иметь порядок 1, 2, 3, 4 и т. Д. Для элементов, для которых у нас нет элементов с задержанной версией, принимайте их как NULL.

Пример. Пусть ваш фрейм данных будет «Время», а столбец со значениями будет «Температура», проиндексированный по дате. Таким образом, самодифференцирование может быть выполнено так:

Время [‘Temperature_Diff’] = Время [‘Temperature’] - Время [‘Temperature’]. Shift (1), если используется версия с задержкой, равняется 1

Время [‘Temperature_Diff’] = Время [‘Temperature’] - Время [‘Temperature’]. Shift (2), если используется версия с задержкой, - 2

  • Самодиагностика журнала - Его можно рассматривать как разницу между текущей серией и отставленной версией серии. Но вы можете просто применить преобразование журнала к фактической серии.

И лучший способ следить за этим - использовать:

from statsmodels.tsa.seasonal import seasonal_decompose

Используйте Seasonal_decompose , и он предоставит вам три компонента: тренд, сезонность и остатки. Возьмите эти остатки, и это будет наш стационарный временной ряд для прогнозирования.

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

Если вы не знакомы с проверкой гипотез, проверьте здесь.

Теперь, переходя к математике теста AD Fuller Test, давайте разберемся с результатами и тем, как они помогут нам в нашей задаче.

Для интуитивного понимания теста AD Fuller щелкните здесь.

Используя и ADfuller (), получаем 5 выходов. Мы сконцентрируемся на тестовой статистике и словаре, который мы получим как 5-й результат. В зависимости от уровня значимости теста мы будем сравнивать его с предоставленной статистикой (с критическим значением), и если статистика теста ниже этого, серия будет стационарной, в противном случае - нет.

Как и на приведенной выше иллюстрации, тестовая статистика e больше для даже уровня значимости 10%, следовательно, не является стационарной. Некоторые основные характеристики теста AD Fuller:

  • Временной ряд имеет единичный корень - это нулевая гипотеза
  • auto lag = ’AIC’ - это критерий для выбора из максимально запаздывающих версий серии для использования в тесте. Автоматический журнал может принимать «AIC», «BIC» или, если он не установлен, принимает максимальные флаги, установленные пользователем.

На данный момент у нас есть стационарный временной ряд !!!

Наконец, мы приступаем к прогнозированию.

Я бы пошел с ARIMA и как настроить его параметры. Очень важным моментом является то, что нам нужно настроить 3 параметра, как описано в моих предыдущих статьях (проверьте ниже).

  • P = Использование графика автокорреляции для AR
  • D = для интегрированного термина в AR- I- MA
  • Q = Использование графика частичной автокорреляции для скользящей средней

Информацию о невыполненных вами условиях см. В статьях ниже.

И вот суть -

Что вы должны отметить на картинке выше:

  • Пунктирные линии представляют доверительный интервал (95%).
  • Для 95% доверительного интервала z-оценка составляет + 1,96, -1,96.
  • Постройте эти интервалы, используя коды, использованные выше. Он был разделен на корень из общего числа выборок. Это было сделано потому, что, когда известно количество выборок, мы всегда вычисляем t-оценку, а не z-оценку (нет такого правила, что если меньше 30 выборок, то только t-оценка, иначе z-оценка). .
  • После построения ACF и pacf посмотрите в первый раз, когда синяя линия пересекает пунктирную (доверительный интервал). Как для графика acf, так и для графика pacf это значение примерно равно 1 или 2. Следовательно, P = 1,2 (удар и испытание) Q = 1,2.

Для D нам нужно посмотреть, какая разностная версия с задержкой сделала серию стационарной. Если X - X.shift (1) делает вашу серию X стационарной, D = 1.

И наш прогноз сбылся!

Завершив прогнозирование, не забудьте отследить все преобразования, которые вы сделали в исходный ряд (наиболее распространенная ошибка). Кроме того, в той же обратной последовательности (следовать LIFO, сначала отменяется последнее примененное преобразование). Создайте копию своей серии. Это поможет вам вернуть вещи обратно. Например, если вы сначала применили log (), а затем разность, сначала добавьте то, что было вычтено (используя резервную копию, которую я просил вас сохранить), а затем exp () поверх этого.

Не пропустите другие мои статьи из временных рядов.