¿Por qué esta serie temporal de tendencia es estacionaria?

Un estudio del Dickey-Fuller Aumentado (ADF) prueba de un ejemplo extraño

Foto por Jan Huber on Unsplash

La estacionariedad es uno de los conceptos más fundamentales para el análisis de series de tiempo. Generalmente, la estacionariedad proporcionará excelentes propiedades para modelar series de tiempo con varios métodos estadísticos. Dickey-Fuller aumentado (ADF) La prueba es probablemente el método más utilizado para comprobar la estacionariedad.

Hay toneladas de artículos en línea sobre este tema. No perderé el tiempo con la introducción básica, como la definición de estacionariedad, cómo realizar pruebas de ADF, etc. En esta publicación, compartiré mi viaje de exploración de la prueba de ADF después de encontrar un caso extraño en una aplicación.

La ruta de aprendizaje que mostraré es típica para aprender ciencia de datos. Primero, creemos que entendemos una herramienta o un concepto, pero simplemente reconocemos y recordamos el término. Cuando lo aplicamos a datos reales, podemos encontrar problemas inesperados y desafiantes que nos impulsen a investigar más y comprender más.

Nuevamente, compartiré mi código en GitHub; Por fin encuentre el enlace en la sección de referencia.

El comienzo de un viaje inesperado

El otro día estaba trabajando con algunas series temporales. La figura 1 muestra uno de ellos. No hay doble que un existe una tendencia alcista, y del La varianza también cambia con el tiempo.. Con esta visualización clara, no necesitaba probar la estacionariedad. Por alguna razón que no recuerdo, todavía lo probé con la prueba del ADF. Sorprendentemente, el valor p es casi 0, lo que implica que debería rechazar la hipótesis nula y aceptar que es estacionaria.

Figura 1. Serie de tiempo con tendencia (Imagen del autor)

Eso es extraño. El resultado de la prueba parecía incorrecto. Quería investigar qué sucede detrás de la prueba del ADF. El primer paso que intenté fue replicar este problema con datos sintéticos. Generé algunos datos de prueba con el siguiente código. El código solo imitaba el comportamiento de tendencias lentas pero no la estacionalidad.

Hay 20,000 observaciones en la Figura 1, lo que implica que la tendencia está aumentando extremadamente lentamente. Creo una serie de tiempo con una pequeña pendiente de 0.0005. El valor medio de la serie temporal aumenta de aproximadamente 0 a 0.5 después de 1000 observaciones. Entonces probémoslo con la función adfuller() de statsmodels.tsa.stattools con los parámetros predeterminados. El valor p es 0.01 y el "problema" vuelve a ocurrir. La figura 2 muestra el resultado. Puede ignorar el título y centrarse en la tendencia alcista. Más adelante explicaré por qué tenemos valores p de tres pruebas ADF diferentes.

Figura 2. Serie de tiempo sintética con resultado de prueba ADF (Imagen del autor)

Las matemáticas detrás del examen DF

Debemos profundizar para ver qué está haciendo exactamente la prueba ADF. Resulta que su experiencia en matemáticas no es complicada. Primero, la prueba ADF es solo una versión avanzada de la Prueba de Dickey-Fuller. Existen tres versiones principales de la prueba DF (de Wikipedia):

Versión 1: Prueba de raíz unitaria: ∆yᵢ = δyᵢ₋₁ + uᵢ

Versión 2: Prueba de raíz unitaria con constante: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

Versión 3. Prueba de raíz unitaria con tendencia constante y determinista: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

En cada versión, la hipótesis nula es que existe una raíz unitaria, δ=0.

El paquete Statsmodels admite las tres versiones con el parámetro "regresión".

Para la versión 1, la regresión es 'n' (sin constante, sin tendencia).

Para la versión 2, la regresión es 'c' (solo constante); esta es la configuración predeterminada.

Para la versión 3, la regresión es 'ct' (constante y tendencia).

Vuelvo a ejecutar la prueba con tres configuraciones diferentes y a continuación se muestran los nuevos resultados.

Para la versión 1, el valor p es 0.09. No debemos rechazar la hipótesis nula.

Para la versión 2, el valor p es 0.01. Ya lo hemos tratado como un problema porque esta es la configuración predeterminada.

Para la versión 3, el valor p es 0.00. Esto es de esperarse porque la serie temporal es de hecho estacionario con una tendencia determinista.

Entonces, para los datos de este ejemplo, si los probamos con la versión 1 (regresión='n'), no diremos que son estacionarios. Probablemente no deberíamos usar la configuración predeterminada. Pero también te preguntarás, ¿por qué el término constante marcó una diferencia tan grande aquí? Profundicemos más.

Del test DF a la regresión lineal

Según la definición anterior, la prueba DF es simplemente una regresión lineal. La Figura 3 muestra todos los puntos de la regresión lineal. El eje Y es ∆yᵢ, el eje X es yᵢ₋₁ y uᵢ es el residual. La versión 1 significa que debemos ajustar una línea sin intersección (sin constante). La versión 2 significa que debemos ajustar una línea con intersección (constante).

Figura 3. ∆yᵢ e yᵢ₋₁ (Imagen del autor)

SkitlearnRegresión lineal admite bien esas dos opciones con el parámetro fit_intercept. Debajo de la Figura 4 se muestran las dos líneas ajustadas. Como puede ver, la línea con la intersección se ajusta mejor que la línea sin la intersección. La puntuación R cuadrado también lo confirmó claramente. Además, tenga en cuenta que la pendiente de la línea naranja es menor que la de la línea azul. En otras palabras, la pendiente de la línea naranja está más cerca de 0.

Figura 4. Resultado de la regresión lineal (Imagen del autor)

También podemos pensar mediante visualización: los puntos no están centrados alrededor de (0,0), por lo que la línea de regresión ajustada no debería pasar por (0,0). La intersección debe ser mayor que 0. Como 0 es la media inicial, ∆y debe ser mayor que 0, por lo que la media general aumentará. Si forzamos que la línea de regresión pase por (0,0), los datos no se ajustarán correctamente y la pendiente se acercará más a 0 debido a la influencia de (0,0).

Hemos visto si la inclusión de los impactos interceptados se ajusta a la regresión lineal. ¿Por qué la forma en que se coloca una línea afecta los resultados de la prueba del ADF y de dónde proviene el valor p?

De la regresión lineal al valor p

Ahora es donde se complica un poco. El valor p final de la prueba DF no proviene del valor p de los coeficientes de la regresión lineal. Básicamente, la estadística tiene una distribución específica conocida como tabla de Dickey-Fuller. Luego utilizamos el valor p aproximado de MacKinnon para el estadístico de prueba. Puede encontrar los detalles en el Código fuente de modelos de estadísticas.

Debido a que la hipótesis nula es δ=0, lo que significa que probar la pendiente de la línea ajustada es 0. No necesitamos entrar en detalles sobre cómo obtener el valor p. La cadena lógica de la asociación entre el valor p y la pendiente (δ en regresión lineal, no la pendiente de tendencia) es así:

Generalmente, si la pendiente está lejos de 0, el valor p debería ser menor, lo que probablemente rechaza la hipótesis nula y sugiere que no hay raíz unitaria y es estacionaria. Si la pendiente es 0 o muy cercana a 0, el valor p debería ser mayor, lo que probablemente aceptaría la hipótesis nula y sugeriría raíz unitaria y no estacionaria. Para el segundo escenario, Wikipedia dice: "Las pruebas tienen un poder estadístico bajo porque a menudo no pueden distinguir entre procesos de raíz unitaria verdaderos (δ = 0) y procesos cercanos a raíces unitarias (δ está cerca de 0)". Por eso tenemos el problema en primer lugar. Estamos ante un proceso cercano a la raíz unitaria. La versión 1 encuentra una raíz unitaria y la versión 2 no puede encontrar una raíz unitaria.

¿Por qué funciona la versión 1 para el ejemplo anterior?

La versión 1 funciona con los datos de la Figura 2 porque acercamos la pendiente a 0, por lo que el valor p es mayor.

Sin embargo, no podemos utilizar la versión 1 como configuración predeterminada. Hay dos casos para la versión 1 (obligar a que la línea pase por (0,0)):

Caso 1: (0,0) está más cerca de todos los puntos de datos. Si la línea tiene que pasar por (0,0), entonces la línea será más plana y la pendiente se acercará a 0. La Figura 4 demuestra este caso. Tenga en cuenta que la demostración en la Figura 4 solo se ajusta a una variable yᵢ₋₁, el ADF real se ajustará a más variables de retraso.

Caso 2: (0,0) está lejos de todos los puntos de datos. Si la línea debe pasar por (0,0), es posible que fallemos en el ajuste; Básicamente, la pendiente es 0, lo que significa que no podemos encontrar una relación lineal de ∆yᵢ e yᵢ₋₁ tal que una línea pase por (0,0) y cubra la mayoría de los puntos de datos. Por lo tanto, el resultado de la prueba estará sesgado hacia tener una unidad raíz.

La Figura 5 a continuación muestra un ejemplo de la prueba de la Versión 1 que no rechazó la hipótesis nula (valor p 0.6) y los datos son estacionarios con una media de 10. La Figura 6 explica el motivo. Como puede ver, no podemos encontrar una línea sin intersección (R cuadrado es 0), por lo que la pendiente de la línea ajustada es 0 (∆yᵢ no depende de yᵢ₋₁).

Figura 5. La versión 1 no pudo reconocer una serie temporal estacionaria (Imagen del autor)
Figura 6. La regresión lineal no logra encontrar una recta sin intersección (pasando (0,0)) (Imagen del autor)

De la prueba del DF a la prueba del ADF

Ahora que entendemos que la prueba DF es una regresión lineal y cómo obtener el valor p de la regresión lineal, pasemos a ADF. La fórmula del ADF es:

De nuevo, regresión lineal. La parte "aumentada" es que tenemos que ajustar más coeficientes.

El paquete statsmodels permite mostrar un resumen detallado de la prueba AFT. La figura 7 es el resultado.

Figura 7. Prueba del ADF con un resumen detallado (Imagen del autor)

Vemos 'Regresión MCO' (la solución predeterminada para la regresión lineal) y 17 coeficientes. No especificé el retraso máximo, por lo que la prueba intentará alcanzar un número basado en la duración de la serie temporal, que es 17.

La constante (intersección) también está equipada. El valor es 0.0596.

Intentemos implementar la prueba ADF utilizando regresión lineal en Scikit-learn. La Figura 8 es el código y el resultado.

Figura 8. Prueba ADF (solo la parte de regresión lineal) con Scikit-learn (Imagen del autor)

La intersección es 0.0596 y los demás coeficientes son los mismos que en la Figura 7. La regresión lineal en Scikit-learn es simplemente MCO. Estamos haciendo lo mismo, por lo que no sorprende que los resultados sean idénticos.

El final del viaje

Después de descubrir cómo configurar el parámetro, probé la serie temporal original en la Figura 1 usando la versión 1 (regresión = 'n') y obtuve el valor p de 0.08, lo que sugiere que no es estacionario. Tenga en cuenta que los datos de la Figura 1 tienen media cero, por lo que puede imaginar que (0,0) está más cerca de los puntos de datos (∆yᵢ, yᵢ₋₁). Usar la prueba de la versión 1 nos ayudará.

Debido a que la pendiente de tendencia en la Figura 1 es mínima, también podemos volver a muestrear la serie de tiempo con pasos, lo que aumenta la pendiente. Por ejemplo, si lo pruebo con cuatro pasos ( value[::4] ), no pasará la prueba ADF con la configuración predeterminada (el valor p es 0.17 para regresión='c').

Problema resuelto.

Takeaways

No confíe ciegamente en los resultados del ADF. La visualización es tu amiga.

La prueba ADF es una regresión lineal simple y la implementación de modelos estadísticos utiliza OLS para resolver el problema de regresión. Luego utiliza la tabla Dickey-Fuller para extraer el valor p que valida la hipótesis nula de que el coeficiente de la primera variable de rezago de la regresión ajustada es 0.

La prueba ADF tiene limitaciones cuando se prueban procesos cercanos a la raíz unitaria (δ está cerca de 0).

Necesitamos elegir la versión de ADF adecuada en consecuencia. Por ejemplo, cuando ve una tendencia constante y desea probar la "tendencia estacionaria", debe seleccionar "ct" como parámetro. Si va a detectar una tendencia lenta para una señal cuya media se supone que es 0, como en la Figura 1 y la Figura 2, tal vez necesite seleccionar 'n' como parámetro para evitar el impacto de ajustar la intersección. Los modelos estadísticos también admiten tendencias cuánticas con el parámetro 'ctt'. Esta opción avanzada podría ser una buena opción para algunos casos. En caso de que desee profundizar más, consulte Cómo afrontar la incertidumbre sobre la inclusión de los términos de intersección y tendencia temporal determinista.

Espero que hayas aprendido algo sobre la prueba ADF.

¡Diviértete con tus series temporales!

Contactame en Etiqueta LinkedIn.

PD: Tengo experiencia y pasión por los datos de series temporales. Si te gusta este artículo, puede que te interese mi otro. publicaciones sobre series de tiempo.

Referencias

Archivo de cuaderno en GitHub

¿Por qué esta serie temporal de tendencia es estacionaria? Republicado desde la fuente https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 a través de https://towardsdatascience.com/feed

<!–

->

Sello de tiempo:

Mas de Consultores Blockchain