Modelo de serie temporal: una guía
Ya sea que deseemos predecir las tendencias del mercado financiero o el consumo de electricidad, el tiempo es un factor importante que debe tenerse en cuenta en nuestros modelos. Por ejemplo, sería interesante pronosticar a qué hora es el pico de consumo de electricidad. Esto podría ser útil para ajustar el precio o la producción de electricidad.
Introduzca la serie temporal. Una serie temporal es una serie de puntos de datos ordenados en el tiempo. En una serie de tiempo, el tiempo suele ser la variable independiente y el objetivo suele ser hacer un pronóstico para el futuro.
Sin embargo, hay otros aspectos que entran en juego cuando se trata de series temporales.
En esta publicación, presentaré diferentes características de las series temporales y cómo podemos modelarlas para obtener pronósticos lo más precisos posibles.
De manera informal, la autocorrelación es la similitud entre las observaciones en función del tiempo que transcurre entre ellas.
Arriba hay un ejemplo de un gráfico de autocorrelación. Si observa de cerca, verá que el primer valor y el valor 24 tienen una autocorrelación alta. De manera similar, las observaciones 12 y 36 están altamente correlacionadas. Esto significa que encontraremos un valor muy similar cada 24 unidades de tiempo.
Observe cómo la gráfica se ve como una función sinusoidal. Este es un indicio de estacionalidad.,y puedes encontrar su valor encontrando el período en la gráfica de arriba, lo que daría 24 horas.
Más sobre ciencia de datosUna guía para redes neuronales recurrentes: comprensión de las redes RNN y LSTM
La estacionalidad se refiere a las fluctuaciones periódicas. Por ejemplo, el consumo de electricidad es alto durante el día y bajo durante la noche, o las ventas en línea aumentan durante la Navidad antes de volver a disminuir.
Como puede ver arriba, hay una estacionalidad diaria. Todos los días, ves un pico hacia la noche, y los puntos más bajos son el comienzo y el final de cada día.
Recuerde que la estacionalidad también se puede derivar de un gráfico de autocorrelación si tiene una forma sinusoidal. Basta con mirar el período, y da la duración de la temporada.
La estacionariedad es una característica importante de las series de tiempo. Se dice que una serie de tiempo es estacionaria si sus propiedades estadísticas no cambian con el tiempo. En otras palabras, tiene una media y una varianza constantes, y su covarianza es independiente del tiempo.
Mirando la misma gráfica, vemos que el proceso anterior es estacionario. La media y la varianza no varían con el tiempo.
A menudo, los precios de las acciones no son un proceso estacionario. Podríamos ver una tendencia creciente, o su volatilidad podría aumentar con el tiempo (lo que significa que la varianza está cambiando).
Idealmente, nos gustaría tener una serie de tiempo estacionaria para modelar. Por supuesto, no todos son estacionarios, pero podemos hacer diferentes transformaciones para hacerlos estacionarios.
Es posible que haya notado que el título de la trama anterior es "Dickey-Fuller". Esta es la prueba estadística que ejecutamos para determinar si una serie de tiempo es estacionaria o no.
Sin entrar en detalles técnicos, la prueba de Dickey-Fuller prueba la hipótesis nula para determinar si existe una raíz unitaria.
Si lo es, entonces p > 0 y el proceso no es estacionario.
En caso contrario, p = 0, se rechaza la hipótesis nula y se considera que el proceso es estacionario.
Por ejemplo, el siguiente proceso no es estacionario. Observe cómo la media no es constante a través del tiempo.
Hay muchas formas de modelar una serie de tiempo para hacer predicciones. Las formas más populares incluyen:
El modelo de promedio móvil es probablemente el enfoque más ingenuo para el modelado de series de tiempo. Este modelo simplemente establece que la siguiente observación es la media de todas las observaciones anteriores.
Si bien es simple, este modelo puede ser sorprendentemente efectivo y representa un buen punto de partida.
De lo contrario, el promedio móvil se puede usar para identificar tendencias interesantes en los datos. Podemos definir una ventana para aplicar el modelo de promedio móvil para suavizar la serie temporal y resaltar diferentes tendencias.
En el gráfico anterior, aplicamos el modelo de promedio móvil a una ventana de 24 horas. La línea verde suaviza la serie temporal y podemos ver que hay dos picos en un período de 24 horas.
Por supuesto, cuanto más larga sea la ventana, más suave será la tendencia. A continuación se muestra un ejemplo de una media móvil en una ventana más pequeña.
El suavizado exponencial usa una lógica similar al promedio móvil, pero esta vez, se asigna un peso decreciente diferente a cada observación. En otras palabras, se le da menos importancia a las observaciones a medida que nos alejamos del presente.
Matemáticamente, el suavizado exponencial se expresa como:
Aquí, alfa es un factor de suavizado que toma valores entre cero y uno. Determina qué tan rápido disminuye el peso de las observaciones anteriores.
En el gráfico anterior, la línea azul oscuro representa el suavizado exponencial de la serie temporal con un factor de suavizado de 0,3, mientras que la línea naranja usa un factor de suavizado de 0,05.
Como puede ver, cuanto menor sea el factor de suavizado, más suave será la serie temporal. Esto tiene sentido, porque a medida que el factor de suavizado se acerca a cero, nos acercamos al modelo de promedio móvil.
El suavizado exponencial doble se usa cuando hay una tendencia en la serie de tiempo. En ese caso, usamos esta técnica, que es simplemente un uso recursivo del suavizado exponencial dos veces.
Matemáticamente:
Aquí, beta es el factor de suavizado de tendencias y toma valores entre cero y uno.
A continuación, puede ver cómo los diferentes valores de alfa y beta afectan la forma de la serie temporal.
Este método extiende el suavizado exponencial doble agregando un factor de suavizado estacional. Por supuesto, esto es útil si observa estacionalidad en su serie temporal.
Matemáticamente, el suavizado exponencial triple se expresa como:
Donde gamma es el factor de suavizado estacional y L es la duración de la temporada.
Más sobre ciencia de datosComprender el algoritmo K-Nearest Neighbor (KNN)
SARIMA es en realidad la combinación de modelos más simples que crean un modelo complejo que puede presentar una serie de tiempo que exhibe propiedades no estacionarias y estacionalidad.
Primero, tenemos la modelo de autorregresión, AR(p). Esto es básicamente una regresión de la serie temporal sobre sí misma. Aquí, asumimos que el valor actual depende de sus valores anteriores con cierto retraso. Toma un parámetro p, que representa el retraso máximo. Para encontrarlo, observamos el gráfico de autocorrelación parcial e identificamos el retraso después del cual la mayoría de los retrasos no son significativos.
En el siguiente ejemplo, pserían cuatro.
A continuación, agregaremos el modelo de media móvil MA(q). Esto toma un parámetro qque representa el mayor retraso después del cual otros retrasos no son significativos en el gráfico de autocorrelación.
abajo qserían cuatro.
Después de eso, agregaremos el orden de integración I(d). El parámetro drepresenta el número de diferencias necesarias para que la serie sea estacionaria.
Finalmente, agregaremos el componente final: estacionalidad S(P, D, Q, s), donde s es simplemente la duración de la temporada. Este componente requiere los parámetros P y Q que son lo mismo que p y q, pero para el componente estacional. Finalmente, D.es el orden de integración estacional que representa el número de diferencias necesarias para eliminar la estacionalidad de la serie.
Combinando todo, obtenemos el SARIMA (p, d, q)(P, D, Q, s)modelo.
La conclusión principal es la siguiente: antes de modelar con SARIMA, debemos aplicar transformaciones a nuestra serie temporal para eliminar la estacionalidad y cualquier comportamiento no estacionario.
Esa fue mucha teoría para envolver nuestra cabeza. Apliquemos las técnicas discutidas anteriormente en nuestro primer proyecto.
Intentaremos predecir el precio de las acciones de una empresa específica. Ahora, predecir los precios de las acciones es prácticamente imposible. Sin embargo, sigue siendo un ejercicio divertido y será una buena manera de practicar lo que hemos aprendido.
Usaremos el precio histórico de las acciones del New Germany Fund (GF) para intentar predecir el precio de cierre en los próximos cinco días de negociación. (Puede codificar junto con el conjunto de datos y el cuaderno).
Primero, importaremos algunas bibliotecas que serán útiles a lo largo de nuestro análisis. Además, necesitamos definir el error porcentual medio promedio (MAPE), ya que esta será nuestra métrica de error.
Luego, importaremos nuestro conjunto de datos y las primeras diez entradas. Debería obtener:
Como puede ver, tenemos algunas entradas relacionadas con una acción diferente al New Germany Fund (GF). Además, tenemos una entrada relativa a la información intradía, pero solo queremos información al final del día (EOD).
Primero, eliminaremos las entradas no deseadas.
Luego, eliminaremos las columnas no deseadas, ya que solo queremos centrarnos en el precio de cierre de la acción.
Si obtiene una vista previa del conjunto de datos, debería ver:
Ahora, estamos listos para el análisis exploratorio de datos.
Graficaremos el precio de cierre durante todo el período de tiempo de nuestro conjunto de datos.
Deberías obtener:
Claramente, este no es un proceso estacionario y es difícil saber si hay algún tipo de estacionalidad.
Usemos el modelo de promedio móvil para suavizar nuestra serie de tiempo. Para eso, confiaremos en una función auxiliar que ejecutará el modelo de promedio móvil durante una ventana de tiempo específica y trazará la curva suavizada resultante:
Usando una ventana de tiempo de cinco días, obtenemos:
Difícilmente podemos ver una tendencia porque está demasiado cerca de la curva real. Suavicemos el mes anterior y el trimestre anterior para comparar los resultados.
Las tendencias son más fáciles de detectar ahora. Observe cómo las tendencias de 30 y 90 días muestran una curva descendente al final. Esto podría significar que es probable que las acciones bajen en los días siguientes.
Ahora, usemos el suavizado exponencialpara ver si puede tomar una mejor tendencia.
Aquí usamos 0.05 y 0.3 como valores para el factor de suavizado. Siéntase libre de probar otros valores y ver cuáles son los resultados.
Como puede ver, un valor alfa de 0,05 suavizó la curva y recuperó la mayoría de las tendencias alcistas y bajistas.
Ahora, usemos el suavizado exponencial doble.
Y obtienes:
Nuevamente, experimente con diferentes combinaciones alfa y beta para obtener curvas más atractivas.
Como se señaló anteriormente, debemos convertir nuestra serie en un proceso estacionario para poder modelarlo. Por lo tanto, apliquemos la prueba de Dickey-Fuller para ver si es un proceso estacionario:
Debería ver:
Según la prueba de Dickey-Fuller, la serie temporal no es sorprendentemente estacionaria. Además, mirando el gráfico de autocorrelación, vemos que es muy alto y parece que no hay una estacionalidad clara.
Para deshacernos de la alta autocorrelación y hacer que el proceso sea estacionario, tomemos la primera diferencia (línea 23 en el bloque de código). Simplemente restamos la serie de tiempo de sí misma con un retraso de un día y obtenemos:
Nuestra serie ahora es estacionaria y podemos comenzar a modelar.
Ahora, para SARIMA, primero debemos definir algunos parámetros y un rango de valores para otros parámetros para generar una lista de todas las combinaciones posibles de p, q, d, P, Q, D, s.
Ahora, en la celda de código de arriba, tenemos 625 combinaciones diferentes. Probaremos cada combinación y entrenaremos a SARIMA con cada una para encontrar el modelo con mejor desempeño. Esto puede llevar un tiempo dependiendo de la potencia de procesamiento de su computadora.
Una vez hecho esto, imprimiremos un resumen del mejor modelo, y deberías ver:
Finalmente podemos predecir el precio de cierre de los próximos cinco días de negociación y evaluar el error porcentual absoluto medio (MAPE) del modelo.
En este caso tenemos un MAPE de 0,79 por ciento, que es muy bueno.
Más información sobre la ciencia de datos C-Means Clustering explicado
Ahora, para comparar nuestra predicción con datos reales, podemos tomar datos financieros de Yahoo Finance y crear un DataFrame.
Luego, hacemos un gráfico para ver qué tan lejos estábamos de los precios de cierre reales:
Parece que estamos un poco fuera de lugar en nuestras predicciones. De hecho, el precio pronosticado es esencialmente plano, lo que significa que nuestro modelo probablemente no esté funcionando bien.
Nuevamente, esto no se debe a nuestro procedimiento, sino al hecho de que predecir los precios de las acciones es esencialmente imposible.
Desde el primer proyecto, aprendimos todo el procedimiento de hacer una serie de tiempo estacionaria antes de usar SARIMA para modelar. Es un proceso largo y tedioso con muchos ajustes manuales.
Ahora, presentemos al Profeta de Facebook. Es una herramienta de pronóstico disponible tanto en Python como en R. Esta herramienta permite que expertos y no expertos produzcan pronósticos de alta calidad con un esfuerzo mínimo.
El título lo dice todo: Usaremos Prophet para ayudarnos a predecir la calidad del aire. Puede codificar junto con el cuaderno completo y el conjunto de datos.
Como siempre, comenzamos importando algunas bibliotecas útiles. Luego imprimiremos las primeras cinco filas:
Como puede ver, el conjunto de datos contiene información sobre las concentraciones de diferentes gases. Se registraron a cada hora de cada día.
Si explora el conjunto de datos un poco más, notará que hay varias instancias del valor -200. Por supuesto, no tiene sentido tener una concentración negativa, por lo que necesitaremos limpiar los datos antes de modelar.
Por lo tanto, necesitamos limpiar los datos.
Aquí, comenzamos analizando nuestra columna de fecha para convertirla en "fechas".
Luego, convertiremos todas las medidas en flotantes.
Luego, tomaremos el promedio de cada medición para agregar los datos por día.
En este punto, todavía tenemos algo de NaN del que debemos deshacernos. Por lo tanto, eliminamos las columnas que tienen más de ocho NaN. De esa manera, podemos eliminar filas que contengan valores NaN sin perder demasiados datos.
Finalmente, agregamos los datos por semana, porque dará una tendencia más suave para analizar.
Podemos trazar las tendencias de cada químico. Aquí, mostramos el de NOx.
Los óxidos de nitrógeno son muy dañinos, ya que reaccionan para formar smog y lluvia ácida, además de causar la formación de partículas finas y ozono troposférico. Estos tienen efectos adversos para la salud, por lo que la concentración de NOx es una característica clave de la calidad del aire.
Más sobre ciencia de datosLas 10 mejores herramientas de análisis predictivo que debe conocer
Nos centraremos únicamente en modelar la concentración de NOx. Por lo tanto, eliminaremos todas las demás columnas irrelevantes.
Luego, importaremos Prophet.
Prophet requiere que la columna de fecha se llame ds y que la columna de características se llame y, por lo que hacemos los cambios apropiados.
En este punto, nuestros datos se ven así:
Luego, definimos un conjunto de entrenamiento. Para eso, reservaremos las últimas 30 entradas para predicción y validación. Luego, simplemente inicializamos Prophet, ajustamos el modelo a los datos y hacemos predicciones.
Deberías ver lo siguiente:
Aquí, yhat representa la predicción, mientras que yhat_lower y yhat_upper representan el límite inferior y superior de la predicción, respectivamente. Prophet le permite trazar fácilmente el pronóstico, y obtenemos:
Como puede ver, Prophet simplemente usó una línea recta hacia abajo para predecir la concentración de NOx en el futuro.
Luego, podemos verificar si la serie temporal tiene características interesantes, como la estacionalidad:
Aquí, Prophet solo identificó una tendencia a la baja sin estacionalidad.
Al evaluar el rendimiento del modelo mediante el cálculo de su error porcentual absoluto medio (MAPE) y su error absoluto medio (MAE), vemos que el MAPE es 13,86 por ciento y el MAE es 109,32, que no está tan mal. Recuerde que no afinamos el modelo.
Finalmente, solo trazamos el pronóstico con sus límites superior e inferior:
Ahora aprendió cómo analizar y modelar de manera sólida una serie temporal y aplicó su conocimiento en dos proyectos diferentes.
, .