Понимание того, как работает автокорреляция, важно для новичков, чтобы упростить себе путь в анализе временных рядов.
Я начал свой путь анализа временных рядов два года назад. Изначально я начал изучать видео на YouTube, где наткнулся на автокорреляцию, основную концепцию анализа временных рядов. Согласно нескольким видеороликам, определение автокорреляции - это отношение / корреляция временного ряда с его предыдущими версиями во времени. Мало кто сказал, что, поскольку нам нужны две переменные для вычисления корреляции, но во временном ряду у нас есть только одна переменная, нам нужно вычислить корреляцию временного ряда с k-й отстающей версией самого себя.
Что такое k’th lag?
Это был первый вопрос, который пришел мне в голову. По мере того, как я продолжал, я узнал, что временной ряд (y) с k-м запаздыванием - это его версия, которая отстает на t-k периодов во времени. Временной ряд с запаздыванием (k = 1) - это версия исходного временного ряда, которая отстает на 1 период во времени, то есть y (t-1).
В большинстве этих видеороликов для объяснения анализа временных рядов использовались примеры дневных цен фондового рынка. Эти цены регистрировались ежедневно. Они объяснили, что автокорреляция цен акций - это корреляция текущей цены с отставанием цены «k» периодов во времени. Итак, автокорреляция с запаздыванием (k = 1) - это корреляция с сегодняшней ценой y (t) и вчерашней ценой y (t-1). Точно так же для k = 2 вычисляется автокорреляция между y (t) и y (t-2).
Теперь главный вопрос
Как мы можем вычислить корреляцию (или даже ковариацию в этом отношении) сегодняшней цены со вчерашней ценой? Поскольку корреляцию можно вычислить только между переменными с несколькими значениями. Если я попытаюсь вычислить корреляцию между двумя отдельными значениями, я получу «NaN». Кроме того, две переменные должны иметь одинаковую длину (количество значений), поэтому я не могу даже вычислить корреляцию между y (начальная точка t) и y (начальная точка t-1).
Затем я начал искать теоретическое объяснение автокорреляции и наткнулся на формулу автокорреляции, показанную ниже.
Что такое формула
- Формула автокорреляции похожа (но не в точности такая же) на формулу корреляции.
- Числитель аналогичен ковариации между текущей и запаздывающей версиями временного ряда (но не имеет знаменателя «N-1»). Более внимательное изучение двух компонентов числителя показывает, что из них вычитается среднее значение исходного временного ряда, среднее значение (y), а не среднее значение (y (t)) и среднее значение (y (t-k)), соответственно. Это отличает числитель формулы от ковариации.
- Знаменатель аналогичен квадрату стандартного отклонения (также известного как дисперсия) исходного временного ряда (но не имеет знаменателя "N-1").
Давайте ответим на вопрос, как вычислить автокорреляцию? реализовав его на Python
Мы будем использовать данные о ценах закрытия Nifty (индийский фондовый индекс, отслеживающий 50 акций) с 17 сентября 2007 г. по 30 июля 2021 г. Данные загружаются в формате CSV из Yahoo Finance. Сначала мы подготовим данные для анализа временных рядов.
Мы определим функцию под названием «autocorr», которая возвращает автокорреляцию (acf) для одного запаздывания, принимая в качестве входных данных массив временных рядов и значение k-го запаздывания. Эта функция будет вложена в другую функцию под названием «my_auto_corr», которая возвращает acf для задержек [k, 0], вызывая функцию «autocorr» для вычисления acf для каждого значения задержки.
Давайте вызовем функцию my_auto_corr, передав «отличный» фрейм данных временного ряда и nlags = 10 в качестве аргументов. Мы также сравним вывод функции my_auto_corr с выводом метода acf из statsmodels.
Результаты «my_auto_corr» такие же, как и у метода «acf» для «statsmodels». Давайте еще раз посмотрим на формулу автокорреляции, которую мы видели ранее, и попытаемся понять ее.
- Знаменатель довольно прост, он похож на дисперсию исходного временного ряда, но в знаменателе нет «N-1». Обозначается в коде переменной "знаменатель".
- Как обсуждалось ранее, числитель аналогичен ковариации между текущей и отложенной версиями временного ряда (без N-1 в качестве знаменателя). Давайте разберемся, как вычислить числитель.
- Коричневый прямоугольник представляет собой y (t) в первой части числителя. Оно вычитается из среднего значения исходного временного ряда, mean (y). Первая часть обозначается 'numerator_p1' в коде & y (t) -mean (y) в формуле. y (t) фиксируется внизу, а его верхняя часть перемещается вниз на 1 для каждая единица увеличивает отставание (k).
- Точно так же зеленый прямоугольник представляет y (t-k) во второй части числителя. Оно также вычитается из среднего значения исходного временного ряда, mean (y). Вторая часть обозначается «numerator_p2» в коде & y (t-k) -mean (y) в формуле. y (t-k) фиксируется вверху, а его нижняя часть перемещается вверх на 1 на каждую единицу увеличения запаздывания (k).
Однако, как мы видели ранее, числитель формулы не совсем то же самое, что и ковариация. Однако знаменатель аналогичен дисперсии исходного временного ряда, но без «N-1» в знаменателе. Следовательно, вычисление ковариации коричневого и зеленого прямоугольников и деление ее на дисперсию исходного временного ряда не дает нам коэффициента автокорреляции.
Разбивка формулы автокорреляции на фрагменты и реализация ее на Python помогла нам лучше понять ее. Мы видели, как вычисляется ковариация в числителе между текущей и отсроченной версиями временных рядов. Следовательно, важно знать, что скрывается под капотом, чтобы лучше понять концепцию, будь то алгоритм машинного обучения или концепция в статистике.