Приведение временного ряда к стационарности

Модели ARIMA в Python

James Fulton

Climate informatics researcher

Обзор

  • Статистические тесты на стационарность
  • Приведение набора данных к стационарности
Модели ARIMA в Python

Расширенный тест Дики-Фуллера

  • Тесты на нестационарность по тренду
  • Нулевая гипотеза: временной ряд нестационарен
Модели ARIMA в Python

Применение теста adfuller

from statsmodels.tsa.stattools import adfuller

results = adfuller(df['close'])
Модели ARIMA в Python

Интерпретация результата теста

print(results)
(-1.34, 0.60, 23, 1235, {'1%': -3.435, '5%': -2.913, '10%': -2.568}, 10782.87)
  • Элемент 0 — тестовая статистика (-1.34)
    • Чем отрицательнее значение, тем вероятнее стационарность
  • Элемент 1 — p-значение: (0.60)
    • Малое p-значение $\rightarrow$ отвергаем нулевую гипотезу. Отвергаем нестационарность.
  • Элемент 4 — критические значения теста
Модели ARIMA в Python

Интерпретация результата теста

print(results)
(-1.34, 0.60, 23, 1235, {'1%': -3.435, '5%': -2.863, '10%': -2.568}, 10782.87)
  • Элемент 0 — тестовая статистика (-1.34)
    • Чем отрицательнее значение, тем вероятнее стационарность
  • Элемент 1 — p-значение: (0.60)
    • Малое p-значение $\rightarrow$ отвергаем нулевую гипотезу. Отвергаем нестационарность.
  • Элемент 4 — критические значения теста
1 https://www.statsmodels.org/dev/generated/statsmodels.tsa.stattools.adfuller.html
Модели ARIMA в Python

Зачем строить графики

  • Визуализация временного ряда помогает избежать ошибочных предположений
Модели ARIMA в Python

Зачем строить графики

Модели ARIMA в Python

Приведение временного ряда к стационарности

Модели ARIMA в Python

Взятие разности

Разность: $\Delta y_t = y_t - y_{t-1}$

Модели ARIMA в Python

Взятие разности

df_stationary = df.diff()
            city_population
date                       
1969-09-30              NaN
1970-03-31        -0.116156
1970-09-30         0.050850
1971-03-31        -0.153261
1971-09-30         0.108389
Модели ARIMA в Python

Взятие разности

df_stationary = df.diff().dropna()
            city_population
date                       
1970-03-31        -0.116156
1970-09-30         0.050850
1971-03-31        -0.153261
1971-09-30         0.108389
1972-03-31        -0.029569
Модели ARIMA в Python

Взятие разности

Модели ARIMA в Python

Другие преобразования

Примеры других преобразований

  • Логарифм
    • np.log(df)
  • Квадратный корень
    • np.sqrt(df)
  • Относительное изменение
    • df.shift(1)/df
Модели ARIMA в Python

Давайте потренируемся!

Модели ARIMA в Python

Preparing Video For Download...