Автокорреляционная функция временных рядов с Python
Автокорреляция является числовым отражениям связи между лаговыми значениями временного ряда. Рассмотрим, особенности ее подсчета и практической реализации в библиотеке Statsmodels.
Сначала скачаем тренировочный набор данных:
import pandas as pd import pmdarima as pm import numpy as np ts = pm.datasets.load_airpassengers(as_series=True) ts.index = pd.date_range('1949', '1961', freq='M') ts.plot()
Автокорреляцию между ts и его сдвигом на k можно посчитать так:
Числовые коэффициенты в числителе и знаменателе считают по-разному, так как у основного ряда T членов, а лагового - (T-k). Кроме того, часто полагают, что ряд стационарный, соответственно, матожидания и дисперсии исходного ряда и его смещения можно считать равными. С учетом этих допущений формулу можно упростить до:
Проверим уравнение на практике. Воспользуемся функцией acf из модуля statsmodels.tsa.stattools:
from statsmodels.tsa.stattools import acf acfs = acf(ts) display(acfs[:5])
for k in range(5): display(((ts-ts.mean())*(ts.shift(k)-ts.mean())).mean()*(len(ts)-k)/len(ts)/(ts.var(ddof=0)))
Результаты совпадают. С параметром adjusted=True в acf формула примет вид:
from statsmodels.tsa.stattools import acf acfs = acf(ts, adjusted=True) display(acfs[:5])
for k in range(5): display(((ts-ts.mean())*(ts.shift(k)-ts.mean())).mean()/(ts.var(ddof=0)))