В этом первом посте мы собираемся найти способы проверки возврата к среднему во временных рядах с использованием языка программирования Python, который даст нам базовый набор инструментов для работы с коинтеграцией в будущих публикациях.

Проверка возврата к среднему

Математически непрерывный временной ряд с обращением к среднему может быть представлен стохастическим дифференциальным уравнением Орнштейна-Уленбека в следующей форме:

Где θ - скорость возврата к среднему значению, μ - среднее значение процесса, σ - дисперсия процесса и, наконец, Wt - это винеровский процесс.
Данное уравнение подразумевает, что изменение временного ряда в следующем периоде пропорционально разнице между средним и текущим значением, при этом добавление гауссовского шума.

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

Расширенные тесты Дики-Фуллера обеспечивают быструю проверку и подтверждающее свидетельство того, что ваш временной ряд является стационарным или нестационарным. Мы должны принять во внимание, что это статистический тест, и как таковой он может использоваться только для определения степени, в которой нулевая гипотеза может быть принята или отклонена. Таким образом, данный результат следует интерпретировать как значимый.

Тест ADF основан на простом наблюдении: если уровень значения выше среднего, следующее движение будет нисходящим, а если значение ниже среднего, следующим будет движение вверх.
Мы можем описать значение изменяется с помощью следующей линейной модели:

где Δy (t) ≡ y (t) - y (t-1), Δy (t-1) ≡ y (t-1) -y (t-2) и так далее.

Функция ADF - проверить, λ = 0. Если гипотеза λ = 0 может быть отклонена, это означает, что следующий ход Δy (t) зависит от текущего уровня y (t-1) И так это не случайное блуждание. Статистика теста представляет собой коэффициент регрессии λ, деленный на стандартную ошибку подгонки регрессии:

Дики и Фуллер уже рассчитали распределение этой тестовой статистики, что позволяет нам определить отклонение гипотезы для любого выбранного процентного критического значения. Поскольку мы ожидаем, что средняя регрессия будет отрицательной, и она должна быть более отрицательной, чем критическое значение, чтобы гипотеза была отклонена.

В этом упражнении мы просто интерпретируем результат, используя значение p из теста. p-значение ниже указанного порога (мы собираемся использовать 5%) предполагает, что мы отвергаем нулевую гипотезу (стационарную), в противном случае p-значение выше порогового значения предполагает мы принимаем нулевую гипотезу (нестационарность).

Здесь показана наивная реализация теста ADF на Python:

Для проверки нашей реализации мы можем сравнить вывод нашей реализации с результатом функции adfuller, включенной в модуль Python statsmodels из экосистемы SciPy. , при использовании с тем же входом.

Показатель Херста

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

Мы можем смоделировать скорость по дисперсии:

где z - значения журнала, τ - произвольное запаздывание, а ‹…› - среднее значение по всем t 's. Для геометрического случайного блуждания мы знаем, что

Это соотношение превращается в равенство с некоторой пропорциональной константой при большом значении τ, но может отклоняться при малом τ. Так что, если временной ряд означает возврат, этого не произойдет.

Теперь нам нужно ввести показатель Херста H:

Для временного ряда с геометрическим поведением случайного блуждания H = 0,5, для ряда с возвратом к среднему значению H ‹0,5 и, наконец, для ряда с тенденциями H ›0,5. H также является индикатором степени возврата к среднему значению или тенденции: по мере того, как H уменьшается до 0, ряд в большей степени возвращается к среднему, а по мере увеличения до 1 - более в тренде.

Это простая реализация, которую я сделал для описанной выше экспоненты Херста. К сожалению, мне не удалось найти подходящую реализацию ни в одной SciPy или стандартной библиотеке, чтобы сравнить ее с:

Из-за конечного размера выборки нам необходимо знать статистическую значимость оценочного значения H, чтобы быть уверенным, что мы можем отклонить нулевую гипотезу о том, что H равно 0,5. Чтобы убедиться в этом, мы воспользуемся тестом коэффициента дисперсии, который можно выразить как

Мы можем выразить это соотношение в следующем коде Python:

Период полураспада среднего обращения

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

Эта мера представляет собой способ интерпретации коэффициента λ в уравнении, которое мы уже видели:

Для этой новой интерпретации мы должны преобразовать этот дискретный временной ряд в дифференциальную форму, игнорируя дрейф βt и запаздывающие различия Δy (t-1)… Δy (tk) и мы получаем следующую формулу Орнштейна-Уленбека для процесса возврата к среднему значению:

Эта форма позволяет нам получить аналитическое решение для ожидаемого значения y (t):

Если λ отрицательно для процесса возврата к среднему, ожидаемое значение значения экспоненциально убывает до значения -μ / λ с периодом полураспада, равным log (2) / λ .

Наконец, чтобы вычислить тест на возврат к среднему значению периода полураспада, мы можем использовать эту простую реализацию на Python:

Вся эта теория и практические примеры на Python помогут нам понять и освоить концепцию коинтеграции, которая будет подробно обсуждена в следующем посте. Будьте на связи!