Как рассчитать автокорреляцию в Python


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

Его также иногда называют «последовательной корреляцией» или «запаздывающей корреляцией», поскольку он измеряет взаимосвязь между текущими значениями переменной и ее историческими значениями.

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

Как рассчитать автокорреляцию в Python

Предположим, у нас есть следующий временной ряд в Python, который показывает значение определенной переменной в течение 15 различных периодов времени:

#define data
x = [22, 24, 25, 25, 28, 29, 34, 37, 40, 44, 51, 48, 47, 50, 51]

Мы можем рассчитать автокорреляцию для каждого лага во временном ряду, используя функцию acf() из библиотеки statsmodels:

import statsmodels.api as sm

#calculate autocorrelations
sm.tsa.acf(x)

array([ 1. , 0.83174224, 0.65632458, 0.49105012, 0.27863962,
 0.03102625, -0.16527446, -0.30369928, -0.40095465, -0.45823389,
 -0.45047733])

Способ интерпретации вывода следующий:

  • Автокорреляция при задержке 0 равна 1 .
  • Автокорреляция при задержке 1 составляет 0,8317 .
  • Автокорреляция при задержке 2 составляет 0,6563 .
  • Автокорреляция при задержке 3 составляет 0,4910 .

И так далее.

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

sm.tsa.acf(x, nlags= 5 )

array([1.0, 0.83174224, 0.65632458, 0.49105012, 0.27863962, 0.03102625])

Как построить функцию автокорреляции в Python

Мы можем построить функцию автокорреляции для временного ряда в Python, используя функцию tsaplots.plot_acf() из библиотеки statsmodels:

from statsmodels.graphics import tsaplots
import matplotlib.pyplot as plt

#plot autocorrelation function
fig = tsaplots.plot_acf(x, lags=10)
plt.show() 

По оси X отображается количество задержек, а по оси Y — автокорреляция при этом количестве задержек. По умолчанию график начинается с запаздывания = 0, а автокорреляция всегда будет равна 1 при запаздывании = 0.

Мы также можем увеличить первые несколько задержек, выбрав использование меньшего количества задержек с помощью аргумента lags :

from statsmodels.graphics import tsaplots
import matplotlib.pyplot as plt

#plot autocorrelation function
fig = tsaplots.plot_acf(x, lags= 5 )
plt.show() 

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

from statsmodels.graphics import tsaplots
import matplotlib.pyplot as plt

#plot autocorrelation function
fig = tsaplots.plot_acf(x, lags= 5, color='g', title='Autocorrelation function' )
plt.show() 

Вы можете найти больше руководств по Python на этой странице .