Почему этот трендовый временной ряд является стационарным?

Исследование расширенного Дикки-Фуллера (ADF) тест на странном примере

Фото Ян Хубер on Unsplash

Стационарность — одна из наиболее фундаментальных концепций анализа временных рядов. Как правило, стационарность обеспечивает отличные свойства для моделирования временных рядов различными статистическими методами. Дополненный Дики-Фуллер (ADF) Тест, вероятно, является наиболее широко используемым подходом для проверки стационарности.

В Интернете есть масса статей на эту тему. Я не буду тратить ваше время на базовое введение, такое как определение стационарности, выполнение тестов ADF и т. д. В этом посте я поделюсь своим опытом изучения теста ADF после обнаружения странного случая в приложении.

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

И снова я поделюсь своим кодом на GitHub; наконец, найдите ссылку в справочном разделе.

Начало неожиданного путешествия

На днях я работал с некоторыми временными рядами. На рисунке 1 показан один из них. Не существует двойника, который существует восходящий тренд, и дисперсия также меняется со временем. Благодаря этой четкой визуализации мне не нужно было проверять стационарность. По какой-то причине не помню, я еще попробовал с тестом АПД. Удивительно, но значение p почти равно 0, что означает, что я должен отвергнуть нулевую гипотезу и признать ее стационарной.

Рисунок 1. Временной ряд с трендом (изображение автора)

Странно. Результат теста показался неверным. Я хотел выяснить, что происходит за тестом АПД. Первым шагом, который я попробовал, было воспроизвести эту проблему с помощью синтетических данных. Я сгенерировал некоторые тестовые данные с помощью следующего кода. Код лишь имитировал поведение медленного тренда, но не сезонность.

На рисунке 20,000 представлено 1 0.0005 наблюдений, что означает, что тенденция растет крайне медленно. Я создаю временной ряд с небольшим наклоном 0. Среднее значение временного ряда увеличивается примерно от 0.5 до 1000 после XNUMX наблюдений. Затем давайте проверим это с помощью функции adfuller() из statsmodels.tsa.stattools с параметрами по умолчанию. Значение p равно 0.01, и «проблема» повторяется. На рисунке 2 показан результат. Вы можете игнорировать заголовок и сосредоточиться на восходящем тренде. Позже я объясню, почему у нас есть значения p из трех разных тестов ADF.

Рисунок 2. Синтетический временной ряд с результатами теста ADF (изображение автора)

Математика теста DF

Нам нужно углубиться, чтобы увидеть, что именно делает тест ADF. Оказывается, его математическая подготовка не сложна. Во-первых, тест АПД — это просто расширенная версия Тест Дики-Фуллера, Есть три основных варианта теста DF (из Википедии):

Версия 1: Проверка единичного корня: ∆yᵢ = δyᵢ₋₁ + uᵢ

Версия 2: Проверка единичного корня с константой: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

Версия 3. Проверка единичного корня с постоянной и детерминированной тенденцией: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

В каждой версии нулевая гипотеза состоит в том, что существует единичный корень δ=0.

Пакет Statsmodels поддерживает все три версии с параметром «регрессия».

Для версии 1 регрессия равна «n» (нет константы, нет тенденции).

Для версии 2 регрессия — «c» (только константа); Это значение по умолчанию.

Для версии 3 регрессия имеет вид «ct» (постоянная и трендовая).

Я повторно запускаю тест с тремя разными настройками, и ниже приведены новые результаты.

Для версии 1 значение p составляет 0.09. Мы не должны отвергать нулевую гипотезу.

Для версии 2 значение p составляет 0.01. Мы уже рассматривали это как проблему, поскольку это настройка по умолчанию.

Для версии 3 значение p равно 0.00. Это ожидаемо, поскольку временной ряд действительно стационарный с детерминистическим трендом.

Итак, если мы проверим данные этого примера с версией 1 (регрессия = 'n'), мы не скажем, что они стационарные. Вероятно, нам не следует использовать настройку по умолчанию. Но вы также можете задаться вопросом: почему постоянный термин имел здесь такое большое значение? Давайте копать дальше.

От теста DF к линейной регрессии

Согласно приведенному выше определению, тест DF представляет собой просто линейную регрессию. На рисунке 3 показаны все точки линейной регрессии. Ось Y — это ∆yᵢ, ось X — это yᵢ₋₁, а uᵢ — остаток. Версия 1 означает, что мы должны разместить линию без пересечения (без константы). Версия 2 означает, что мы должны разместить линию с помощью точки пересечения (константы).

Рисунок 3. ∆yᵢ и yᵢ₋₁ (изображение автора)

Skitlearn Линейная регрессия хорошо поддерживает эти два параметра с помощью параметра fit_intercept. Ниже рисунка 4 показаны две подогнанные линии. Как видите, линия с пересечением подходит лучше, чем линия без пересечения. Оценка R-квадрата также ясно подтвердила это. Также обратите внимание, что наклон оранжевой линии меньше наклона синей линии. Другими словами, наклон оранжевой линии ближе к 0.

Рисунок 4. Результат линейной регрессии (изображение автора)

Мы также можем мыслить посредством визуализации: точки не центрированы вокруг (0,0), поэтому подобранная линия регрессии не должна проходить через точку (0,0). Перехват должен быть больше 0. Поскольку 0 — это начальное среднее значение, ∆y должно быть больше 0, поэтому общее среднее значение увеличится. Если мы заставим линию регрессии проходить через (0,0), она не будет соответствовать данным, и наклон станет ближе к 0 из-за влияния (0,0).

Мы увидели, соответствует ли включение воздействий перехвата линейной регрессии. Почему способ установки лески влияет на результаты теста АПД и откуда берется значение p?

От линейной регрессии к значению p

Теперь немного сложнее. Окончательное значение p теста DF не зависит от значения p коэффициентов линейной регрессии. По сути, статистика имеет определенное распределение, известное как таблица Дикки-Фуллера. Затем мы используем приблизительное значение p Маккиннона для тестовой статистики. Подробности вы можете найти в Исходный код моделей статистики.

Поскольку нулевая гипотеза равна δ=0, это означает, что проверка наклона подобранной линии равна 0. Нам не нужно вдаваться в подробности о том, как получить значение p. Логическая цепочка связи между значением p и наклоном (δ в линейной регрессии, а не наклоном тренда) выглядит следующим образом:

Как правило, если наклон далек от 0, значение p должно быть меньше, что с большей вероятностью отвергает нулевую гипотезу и предполагает отсутствие единичного корня и стационарность. Если наклон равен 0 или очень близок к 0, значение p должно быть выше, что с большей вероятностью принимает нулевую гипотезу и предполагает единичный корень и нестационарность. Что касается второго сценария, Википедия говорит: «Тесты имеют низкую статистическую мощность, поскольку они часто не могут отличить истинные процессы с единичным корнем (δ = 0) от процессов, близких к единичному корню (δ близко к 0)». Вот почему у нас есть проблема в первую очередь. Мы имеем дело с процессом, близким к единичному корню. Версия 1 находит корень устройства, а версия 2 не может найти корень устройства.

Почему версия 1 работает для приведенного выше примера?

Версия 1 работает для данных на рисунке 2, поскольку мы приближаем наклон к 0, поэтому значение p становится выше.

Однако мы не можем использовать версию 1 в качестве настройки по умолчанию. Для версии 1 есть два случая (принудительное прохождение строки через (0,0) ):

Случай 1: (0,0) ближе ко всем точкам данных. Если линия должна пройти через (0,0), то линия будет более пологой, а наклон приблизится к 0. Рисунок 4 демонстрирует этот случай. Обратите внимание, что демонстрация на рисунке 4 соответствует только одной переменной yᵢ₋₁, фактический ADF будет соответствовать большему количеству переменных запаздывания.

Случай 2: (0,0) находится далеко от всех точек данных. Если линия должна проходить через точку (0,0), подгонка может оказаться неудачной; по сути, наклон равен 0, что означает, что мы не можем найти линейную зависимость ∆yᵢ и yᵢ₋₁ такую, чтобы линия проходила через (0,0) и охватывала большую часть точек данных. Следовательно, результат теста будет смещен в сторону наличия корневого модуля..

На рисунке 5 ниже показан пример теста версии 1, который не смог отвергнуть нулевую гипотезу (значение p 0.6), а данные стационарны со средним значением 10. Рисунок 6 объясняет причину. Как видите, мы не можем найти линию без точки пересечения (R-квадрат равен 0), поэтому наклон подобранной линии равен 0 (∆yᵢ не зависит от yᵢ₋₁).

Рисунок 5. Версия 1 не смогла распознать стационарный временной ряд (изображение автора)
Рисунок 6. Линейная регрессия не может найти линию без пересечения (проходит (0,0)) (Изображение автора)

От теста DF к тесту ADF

Теперь мы понимаем, что тест DF — это линейная регрессия и как получить значение p из линейной регрессии, давайте перейдем к ADF. Формула АДФ:

Опять линейная регрессия. «Дополненная» часть заключается в том, что нам нужно подогнать больше коэффициентов.

Пакет statsmodels позволяет показать подробную сводку теста AFT. Рисунок 7 — результат.

Рисунок 7. Тест ADF с подробным описанием (изображение автора)

Мы видим «OLS-регрессию» (решение по умолчанию для линейной регрессии) и 17 коэффициентов. Я не указал максимальную задержку, поэтому тест попытается достичь числа, основанного на длине временного ряда, которое равно 17.

Константа (перехват) также устанавливается. Значение составляет 0.0596.

Давайте попробуем реализовать тест ADF, используя линейную регрессию в Scikit-learn. На рисунке 8 показан код и выходные данные.

Рисунок 8. Тест ADF (только часть линейной регрессии) с Scikit-learn (изображение автора)

Пересечение составляет 0.0596, а остальные коэффициенты такие же, как на рисунке 7. Линейная регрессия в Scikit-learn — это просто МНК. Мы делаем то же самое, поэтому неудивительно, что результаты идентичны.

Конец путешествия

После того, как я понял, как установить этот параметр, я протестировал исходный временной ряд на рисунке 1, используя версию 1 (регрессия = 'n'), и получил значение p 0.08, что позволяет предположить, что он нестационарен. Обратите внимание, что данные на рисунке 1 имеют нулевое среднее, поэтому вы можете себе представить, что (0,0) ближе к точкам данных (∆yᵢ, yᵢ₋₁). Нам поможет тест версии 1.

Поскольку наклон тренда на рисунке 1 минимален, мы также можем выполнить повторную выборку временного ряда с шагом, что увеличит наклон. Например, если я проверю его с четырьмя шагами ( value[::4] ), он не пройдет тест ADF с настройкой по умолчанию (значение p равно 0.17 для reгрессии='c').

Задача решена.

Takeaways

Не доверяйте слепо результатам ADF. Визуализация — ваш друг.

Тест ADF представляет собой простую линейную регрессию, а реализация статистических моделей использует OLS для решения проблемы регрессии. Затем он использует таблицу Дики-Фуллера для извлечения значения p, которое подтверждает нулевую гипотезу о том, что коэффициент первой переменной запаздывания из подобранной регрессии равен 0.

Тест ADF имеет ограничения при тестировании процессов, близких к единичному корню (δ близко к 0).

Соответственно, нам необходимо выбрать подходящую версию ADF. Например, если вы видите постоянный тренд и хотите протестировать «стационарный тренд», вам нужно выбрать «ct» в качестве параметра. Если вы собираетесь уловить медленный тренд для сигнала, среднее значение которого должно быть равно 0, как на рисунках 1 и 2, возможно, вам нужно выбрать «n» в качестве параметра, чтобы избежать влияния подбора точки пересечения. Модели статистики также поддерживают количественный тренд с параметром «ctt». Этот расширенный вариант может быть хорошим выбором в некоторых случаях. Если вы хотите копнуть дальше, пожалуйста, обратитесь к Устранение неопределенности относительно включения терминов перехвата и детерминированного временного тренда.

Надеюсь, вы узнали что-нибудь о тесте АПД.

Удачи вам с вашими временными рядами!

Свяжитесь со мной по LinkedIn.

PS: У меня есть опыт и страсть к данным временных рядов. Если вам понравилась эта статья, возможно, вас заинтересуют другие мои статьи. посты о временных рядах.

Рекомендации

Файл блокнота на GitHub

Почему этот трендовый временной ряд является стационарным? Опубликовано из источника https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 через https://towardsdatascience.com/feed

<!–

->

Отметка времени:

Больше от Блокчейн-консультанты