Una serie de tiempo es una secuencia de observaciones de una variable aleatoria periódica. Ejemplos de ello son la demanda mensual de un producto, la matrícula anual de primer año en un departamento de la universidad y los flujos diarios en un río. Las series temporales son importantes para la investigación operativa porque son a menudo los impulsores de los modelos de decisión. Un modelo de inventario requiere estimaciones de las demandas futuras, un modelo de programación y dotación de personal para un departamento universitario requiere estimaciones del flujo futuro de estudiantes y un modelo para proporcionar advertencias a la población en una cuenca requiere estimaciones de flujos fluviales para el futuro inmediato. El análisis de series temporales proporciona herramientas para seleccionar un modelo que describe las series temporales y utilizar el modelo para predecir eventos futuros. Modelar la serie temporal es un problema estadístico porque los datos observados se utilizan en procedimientos computacionales para estimar los coeficientes de un supuesto modelo. Los modelos suponen que las observaciones varían aleatoriamente sobre un valor medio subyacente que es una función del tiempo. En estas páginas, se restringe la atención al uso de datos de series de tiempo históricas para estimar un modelo dependiente del tiempo. Los métodos son apropiados para el pronóstico automático a corto plazo de la información de uso frecuente donde las causas subyacentes de la variación del tiempo no están cambiando marcadamente en el tiempo. En la práctica, los pronósticos derivados de estos métodos son posteriormente modificados por analistas humanos que incorporan información no disponible a partir de los datos históricos. Nuestro objetivo principal en esta sección es presentar las ecuaciones para los cuatro métodos de pronóstico utilizados en el complemento de predicción: promedio móvil, suavizado exponencial, regresión y suavizado exponencial doble. Estos son llamados métodos de suavizado. Los métodos no considerados incluyen la predicción cualitativa, regresión múltiple, y métodos autorregresivos (ARIMA). Aquellos interesados en una cobertura más extensa deben visitar el sitio de los Principios de Pronóstico o leer uno de los varios excelentes libros sobre el tema. Utilizamos el libro Previsión. Por Makridakis, Wheelwright y McGee, John Wiley amp Sons, 1983. Para utilizar el libro de Ejemplos de Excel, debe tener instalado el complemento de Pronóstico. Elija el comando Relink para establecer los vínculos al complemento. Esta página describe los modelos utilizados para la predicción simple y la notación utilizada para el análisis. Este método de pronóstico más simple es el pronóstico del promedio móvil. El método simplemente promedios de las últimas m observaciones. Es útil para series de tiempo con una media que cambia lentamente. Este método considera todo el pasado en su pronóstico, pero pesa la experiencia reciente más fuertemente que menos reciente. Los cálculos son simples porque sólo la estimación del período anterior y los datos actuales determinan la nueva estimación. El método es útil para series de tiempo con una media que cambia lentamente. El método del promedio móvil no responde bien a una serie cronológica que aumenta o disminuye con el tiempo. Aquí incluimos un término de tendencia lineal en el modelo. El método de regresión se aproxima al modelo construyendo una ecuación lineal que proporciona el ajuste de mínimos cuadrados a las últimas m observaciones. En la práctica, el promedio móvil proporcionará una buena estimación de la media de la serie temporal si la media es constante o cambia lentamente. En el caso de una media constante, el mayor valor de m dará las mejores estimaciones de la media subyacente. Un período de observación más largo promediará los efectos de la variabilidad. El propósito de proporcionar un m más pequeño es permitir que el pronóstico responda a un cambio en el proceso subyacente. Para ilustrar, proponemos un conjunto de datos que incorpora cambios en la media subyacente de la serie temporal. La figura muestra las series temporales utilizadas para la ilustración junto con la demanda media a partir de la cual se generó la serie. La media comienza como una constante en 10. Comenzando en el tiempo 21, aumenta en una unidad en cada período hasta que alcanza el valor de 20 en el tiempo 30. Entonces se vuelve constante otra vez. Los datos se simulan sumando a la media un ruido aleatorio de una distribución Normal con media cero y desviación estándar 3. Los resultados de la simulación se redondean al entero más próximo. La tabla muestra las observaciones simuladas utilizadas para el ejemplo. Cuando usamos la tabla, debemos recordar que en cualquier momento dado, sólo se conocen los datos pasados. Las estimaciones del parámetro del modelo, para tres valores diferentes de m se muestran junto con la media de las series temporales de la siguiente figura. La figura muestra la media móvil de la estimación de la media en cada momento y no la previsión. Las previsiones cambiarían las curvas de media móvil a la derecha por períodos. Una conclusión es inmediatamente aparente de la figura. Para las tres estimaciones, la media móvil se queda por detrás de la tendencia lineal, con el retardo aumentando con m. El retraso es la distancia entre el modelo y la estimación en la dimensión temporal. Debido al desfase, el promedio móvil subestima las observaciones a medida que la media aumenta. El sesgo del estimador es la diferencia en un tiempo específico en el valor medio del modelo y el valor medio predicho por el promedio móvil. El sesgo cuando la media está aumentando es negativo. Para una media decreciente, el sesgo es positivo. El retraso en el tiempo y el sesgo introducido en la estimación son funciones de m. Cuanto mayor sea el valor de m. Mayor es la magnitud del retraso y sesgo. Para una serie cada vez mayor con tendencia a. Los valores de retraso y sesgo del estimador de la media se dan en las ecuaciones siguientes. Las curvas de ejemplo no coinciden con estas ecuaciones porque el modelo de ejemplo no está aumentando continuamente, sino que comienza como una constante, cambia a una tendencia y luego vuelve a ser constante de nuevo. También las curvas de ejemplo se ven afectadas por el ruido. El pronóstico de media móvil de los períodos en el futuro se representa desplazando las curvas hacia la derecha. El desfase y sesgo aumentan proporcionalmente. Las ecuaciones a continuación indican el retraso y sesgo de los períodos de previsión en el futuro en comparación con los parámetros del modelo. Nuevamente, estas fórmulas son para una serie de tiempo con una tendencia lineal constante. No debemos sorprendernos de este resultado. El estimador del promedio móvil se basa en el supuesto de una media constante, y el ejemplo tiene una tendencia lineal en la media durante una parte del período de estudio. Dado que las series de tiempo real rara vez obedecerán exactamente las suposiciones de cualquier modelo, debemos estar preparados para tales resultados. También podemos concluir de la figura que la variabilidad del ruido tiene el efecto más grande para m más pequeño. La estimación es mucho más volátil para el promedio móvil de 5 que el promedio móvil de 20. Tenemos los deseos en conflicto de aumentar m para reducir el efecto de la variabilidad debido al ruido y disminuir m para hacer que el pronóstico más sensible a los cambios En promedio El error es la diferencia entre los datos reales y el valor previsto. Si la serie temporal es verdaderamente un valor constante, el valor esperado del error es cero y la varianza del error está compuesta por un término que es una función de y un segundo término que es la varianza del ruido. El primer término es la varianza de la media estimada con una muestra de m observaciones, suponiendo que los datos provienen de una población con una media constante. Este término se minimiza haciendo m tan grande como sea posible. Un m grande hace que el pronóstico no responda a un cambio en la serie temporal subyacente. Para hacer que el pronóstico responda a los cambios, queremos que m sea lo más pequeño posible (1), pero esto aumenta la varianza del error. La predicción práctica requiere un valor intermedio. Previsión con Excel El complemento de previsión implementa las fórmulas de promedio móvil. El siguiente ejemplo muestra el análisis proporcionado por el complemento para los datos de muestra en la columna B. Las primeras 10 observaciones se indexan -9 a 0. En comparación con la tabla anterior, los índices de período se desplazan en -10. Las primeras diez observaciones proporcionan los valores iniciales para la estimación y se utilizan para calcular la media móvil para el período 0. La columna MA (10) (C) muestra las medias móviles calculadas. El parámetro de la media móvil m está en la celda C3. La columna Fore (1) (D) muestra un pronóstico para un período en el futuro. El intervalo de pronóstico está en la celda D3. Cuando el intervalo de pronóstico se cambia a un número mayor, los números de la columna Fore se desplazan hacia abajo. La columna Err (1) (E) muestra la diferencia entre la observación y el pronóstico. Por ejemplo, la observación en el tiempo 1 es 6. El valor pronosticado a partir de la media móvil en el tiempo 0 es 11.1. El error entonces es -5.1. La desviación estándar y la media media de la desviación (MAD) se calculan en las celdas E6 y E7 respectivamenteplete guía para crear una serie de tiempo de predicción (con códigos en Python) Introducción Series temporales (conocido como TS a partir de ahora) es considerado uno de los menos conocidos Habilidades en el espacio de análisis (Incluso tuve pocas pistas sobre ello un par de días atrás). Pero como ustedes saben nuestro Mini Hackathon inaugural se basa en él, me puse en un viaje para aprender los pasos básicos para resolver un problema de la serie de tiempo y aquí estoy compartiendo iguales con usted. Estos definitivamente le ayudarán a conseguir un modelo decente en nuestro hackathon hoy. Antes de pasar por este artículo, recomiendo leer un tutorial completo sobre la serie de tiempo de modelado en R. que es como una precuela de este artículo. Se centra en los conceptos fundamentales y se basa en R e I se centrará en el uso de estos conceptos en la solución de un problema de extremo a extremo, junto con los códigos en Python. Existen muchos recursos para TS en R pero muy pocos están allí para Python por lo que I8217ll estar utilizando Python en este artículo. Hacia fuera viajará a través de los pasos siguientes: ¿Qué hace la serie de tiempo especial de carga y manipulación de series de tiempo en pandas Cómo comprobar Stationarity de una serie de tiempo Cómo hacer una serie de tiempo estacionaria Predicción de una serie de tiempo 1. Lo que hace serie de tiempo especial Como el nombre Sugiere, TS es una colección de puntos de datos recogidos a intervalos de tiempo constantes. Estos se analizan para determinar la tendencia a largo plazo con el fin de predecir el futuro o realizar alguna otra forma de análisis. Pero lo que hace que un TS diferente de decir un problema regular de regresión Hay dos cosas: Es dependiente del tiempo. Por lo tanto, la hipótesis básica de un modelo de regresión lineal que las observaciones son independientes no es válida en este caso. Junto con una tendencia creciente o decreciente, la mayoría de los TS tienen alguna forma de tendencias estacionales. Es decir, variaciones específicas de un marco de tiempo particular. Por ejemplo, si usted ve las ventas de una chaqueta de lana con el tiempo, invariablemente encontrará mayores ventas en las estaciones de invierno. Debido a las propiedades inherentes de un TS, hay varios pasos involucrados en analizarlo. Estas se discuten en detalle a continuación. Comencemos por cargar un objeto TS en Python. We8217ll utilizará el popular conjunto de datos AirPassengers que se puede descargar aquí. Tenga en cuenta que el objetivo de este artículo es familiarizarle con las diversas técnicas utilizadas para TS en general. El ejemplo considerado aquí es sólo para ilustración y me centraré en la cobertura de una amplia gama de temas y no hacer un pronóstico muy preciso. 2. Loading and Handling Time Series en Pandas Pandas tiene bibliotecas dedicadas para manejar objetos TS, en particular la clase datatime64ns que almacena información de tiempo y nos permite realizar algunas operaciones muy rápido. Comenzaremos disparando las bibliotecas necesarias: Ahora, podemos cargar el conjunto de datos y ver algunas filas iniciales y tipos de datos de las columnas: Los datos contienen un mes en particular y el número de pasajeros que viajan en ese mes. Pero esto todavía no se lee como un objeto TS, ya que los tipos de datos son 8216object8217 y 8216int8217. Para leer los datos como series temporales, tenemos que pasar argumentos especiales al comando readcsv: Let8217s entienden los argumentos uno por uno: parsedates. Esto especifica la columna que contiene la información de fecha y hora. Como decimos arriba, el nombre de la columna es 8216Month8217. Indexcol: Una idea clave detrás de usar Pandas para los datos de TS es que el índice tiene que ser la variable que representa la información de fecha y hora. Así que este argumento le dice a los pandas que usen la columna 8216Month8217 como índice. Dateparser: Especifica una función que convierte una cadena de entrada en variable datetime. Sea por defecto Pandas lee datos en formato 8216AAA-MM-DD HH: MM: SS8217. Si los datos no están en este formato, el formato debe definirse manualmente. Algo similar a la función del dataparse definida aquí se puede utilizar para este propósito. Ahora podemos ver que los datos tienen objeto de tiempo como índice y pasajeros como la columna. Podemos cruzar el tipo de datos del índice con el siguiente comando: Observe el dtype8217datetimens8217 que confirma que es un objeto de fecha y hora. Como una preferencia personal, convertiría la columna en un objeto de la serie para evitar referir a los nombres de las columnas cada vez que utilizo el TS. Por favor, siéntase libre de usar como un marco de datos es que funciona mejor para usted. St data8216Passengers8217 ts. head (10) Antes de ir más lejos, I8217ll discutir algunas técnicas de indexación de datos TS. Comencemos seleccionando un valor particular en el objeto Series. Esto se puede hacer de dos maneras: Ambos devolverá el valor 82161128217 que también se puede confirmar de la salida anterior. Supongamos que queremos todos los datos hasta mayo de 1949. Esto se puede hacer de dos maneras: Ambos darían resultado siguiente: Hay 2 cosas a tener en cuenta aquí: A diferencia de la indexación numérica, el índice final se incluye aquí. Por ejemplo, si indexamos una lista como a: 5, entonces devolveremos los valores en los índices 8211 0,1,2,3,4. Pero aquí el índice 82161949-05-018217 se incluyó en la salida. Los índices tienen que ser ordenados para que los rangos funcionen. Si azar aleatoriamente el índice, este trabajo won8217t. Considere otra instancia donde necesita todos los valores del año 1949. Esto se puede hacer como: La parte del mes se omitió. Del mismo modo si todos los días de un mes en particular, la parte del día se puede omitir. Ahora, vamos a pasar a analizar el TS. 3. Cómo comprobar la estacionariedad de una serie temporal Se dice que un TS es estacionario si sus propiedades estadísticas tales como la media, la varianza permanecen constantes en el tiempo. Pero, ¿por qué es importante? La mayoría de los modelos de TS trabajan sobre la suposición de que el TS está parado. Intuitivamente, podemos sentar que si un TS tiene un comportamiento particular con el tiempo, hay una probabilidad muy alta de que seguirá lo mismo en el futuro. Además, las teorías relacionadas con las series estacionarias son más maduras y fáciles de implementar en comparación con las series no estacionarias. La estacionariedad se define utilizando criterios muy estrictos. Sin embargo, para fines prácticos podemos suponer que la serie es estacionaria si tiene propiedades estadísticas constantes en el tiempo, es decir. El siguiente: varianza constante media constante una autocovariancia que no depende del tiempo. I8217ll saltar los detalles, ya que está muy claramente definido en este artículo. Vamos a pasar a las formas de probar la estacionariedad. En primer lugar es simple trazar los datos y analizar visualmente. Los datos se pueden representar siguiendo el siguiente comando: Es evidente que existe una tendencia general en aumento de los datos junto con algunas variaciones estacionales. Sin embargo, tal vez no siempre sea posible hacer tales inferencias visuales (veremos más adelante estos casos). Así que, más formalmente, podemos comprobar la estacionariedad usando lo siguiente: Trazado Estadísticas de balanceo: Podemos trazar el promedio móvil o variación en movimiento y ver si varía con el tiempo. Mediante la media móvil / varianza, quiero decir que en cualquier instante 8216t8217, tomamos la media / varianza del último año, es decir, los últimos 12 meses. Pero de nuevo esto es más una técnica visual. Prueba Dickey-Fuller: Esta es una de las pruebas estadísticas para verificar la estacionariedad. Aquí la hipótesis nula es que el TS es no estacionario. Los resultados de la prueba comprenden una estadística de prueba y algunos valores críticos para los niveles de confianza de la diferencia. Si la 8216Test Statistic8217 es menor que el 8216Critical Value8217, podemos rechazar la hipótesis nula y decir que la serie es estacionaria. Consulte este artículo para obtener más información. Estos conceptos pueden no sonar muy intuitivos en este momento. Recomiendo pasar por el artículo precuela. Si usted está interesado en algunas estadísticas teóricas, puede referirse a Introducción a series de tiempo y pronósticos por Brockwell y Davis. El libro es un poco stats-pesado, pero si tienes la habilidad de leer entre líneas, puedes entender los conceptos y tocar tangencialmente las estadísticas. De nuevo a la comprobación de stationarity, we8217ll usar las parcelas estadísticas de balanceo junto con los resultados Dickey-Fuller prueba mucho así que he definido una función que toma un TS como entrada y los generó para nosotros. Observe por favor que I8217ve dibujó la desviación estándar en vez de la varianza para mantener la unidad similar a la media. El código es bastante sencillo. Por favor, siéntase libre de discutir el código en los comentarios si usted se enfrenta a retos en comprenderlo. Let8217s ejecutarlo para nuestra serie de entrada: Aunque la variación en la desviación estándar es pequeña, la media está aumentando claramente con el tiempo y esto no es una serie estacionaria. Además, la estadística de la prueba es mucho más que los valores críticos. Tenga en cuenta que los valores firmados deben compararse y no los valores absolutos. A continuación, discutiremos las técnicas que pueden utilizarse para llevar a esta TS hacia la estacionariedad. 4. Cómo hacer una serie de tiempo inmóvil Aunque la asunción de la estacionariedad se toma en muchos modelos de TS, prácticamente ninguna de las series temporales prácticas es estacionaria. Así que los estadísticos han descubierto maneras de hacer series estacionarias, que discutiremos ahora. En realidad, es casi imposible hacer una serie perfectamente estacionaria, pero tratamos de tomar lo más cerca posible. Permite entender lo que está haciendo un TS no estacionario. Hay dos razones principales detrás de la no-stationaruty de un TS: 1. Tendencia 8211 que varía medio con el tiempo. Por ejemplo, en este caso vimos que en promedio, el número de pasajeros estaba creciendo con el tiempo. 2. Estacionalidad 8211 variaciones en marcos temporales específicos. Por ejemplo, la gente podría tener una tendencia a comprar coches en un mes en particular debido a incremento de pago o festivales. El principio subyacente es modelar o estimar la tendencia y la estacionalidad en la serie y eliminar los de la serie para obtener una serie estacionaria. Entonces se pueden implementar técnicas de predicción estadística en esta serie. El paso final sería convertir los valores pronosticados en la escala original aplicando restricciones de tendencia y estacionalidad. Nota: Estaré discutiendo una serie de métodos. Algunos podrían funcionar bien en este caso y otros no. Pero la idea es conseguir una caída de todos los métodos y no centrarse sólo en el problema en cuestión. Let8217s empezar por trabajar en la parte de la tendencia. Estimación del amplificador Eliminación de la tendencia Uno de los primeros trucos para reducir la tendencia puede ser la transformación. Por ejemplo, en este caso podemos ver claramente que hay una tendencia positiva significativa. Así podemos aplicar la transformación que penaliza valores más altos que valores más pequeños. Éstos pueden tomar un registro, raíz cuadrada, raíz del cubo, etc. Deja para tomar una transformación del registro aquí para la simplicidad: En este caso más simple, es fácil ver una tendencia delantera en los datos. Pero no es muy intuitivo en presencia de ruido. Así que podemos usar algunas técnicas para estimar o modelar esta tendencia y luego eliminarla de la serie. Puede haber muchas maneras de hacerlo y algunas de las más usadas son: Agregación 8211 tomando promedio para un período de tiempo como medias mensuales / semanales Suavizado 8211 tomando promedios de rodadura Polinómico Ftting 8211 encajar un modelo de regresión Voy a discutir el alisamiento aquí y usted debe Probar otras técnicas también que podría funcionar para otros problemas. Suavizado se refiere a tomar estimaciones de rotación, es decir, teniendo en cuenta las instancias pasadas. Hay pueden ser varias maneras pero discutiré dos de ésos aquí. Media móvil En este enfoque, tomamos un promedio de 8216k8217 valores consecutivos dependiendo de la frecuencia de las series temporales. Aquí podemos tomar el promedio de los últimos 1 año, es decir, los últimos 12 valores. Pandas tiene funciones específicas definidas para determinar las estadísticas de balanceo. La línea roja muestra la media de balanceo. Vamos a restar esto de la serie original. Tenga en cuenta que dado que estamos tomando el promedio de los últimos 12 valores, la media de rodadura no está definida para los primeros 11 valores. Esto se puede observar como: Observe que los primeros 11 son Nan. Permite eliminar estos valores de NaN y comprobar las parcelas para probar la estacionariedad. Esto parece una serie mucho mejor. Los valores de rodadura parecen variar ligeramente, pero no hay una tendencia específica. Además, la estadística de la prueba es menor que los 5 valores críticos, por lo que podemos decir con 95 confianza que ésta es una serie estacionaria. Sin embargo, un inconveniente en este enfoque particular es que el período de tiempo tiene que ser estrictamente definido. En este caso podemos tomar medias anuales, pero en situaciones complejas como la previsión de un precio de las acciones, es difícil llegar a un número. Así que tomamos una 8216 media móvil ponderada 8217 donde los valores más recientes se les da un peso más alto. Puede haber muchas técnicas para asignar pesos. Uno popular es el promedio móvil ponderado exponencial donde los pesos se asignan a todos los valores anteriores con un factor de desintegración. Encuentre los detalles aquí. Esto se puede implementar en Pandas como: Tenga en cuenta que aquí el parámetro 8216halflife8217 se utiliza para definir la cantidad de decaimiento exponencial. Esto es sólo una suposición aquí y dependería en gran medida del dominio del negocio. Otros parámetros como el span y el centro de masa también se pueden usar para definir decaimiento que se discuten en el enlace compartido anteriormente. Ahora, elimine esto de la serie y compruebe la estacionariedad: Este TS tiene variaciones aún menores en la media y la desviación estándar en magnitud. Además, la estadística de prueba es menor que el valor crítico 1. Que es mejor que el caso anterior. Tenga en cuenta que en este caso no habrá valores perdidos ya que todos los valores desde el inicio se dan pesos. Así que funcionará incluso sin valores previos. Eliminación de la tendencia y la estacionalidad Las técnicas simples de reducción de tendencias antes discutidas no funcionan en todos los casos, particularmente las de alta estacionalidad. Debemos discutir dos maneras de eliminar la tendencia y la estacionalidad: Diferenciar 8211 tomando la diferencia con un desfase temporal determinado 8211 modelando tanto la tendencia como la estacionalidad y eliminándolas del modelo. Diferenciación Uno de los métodos más comunes de lidiar con la tendencia y la estacionalidad es la diferenciación. En esta técnica, tomamos la diferencia de la observación en un instante particular con la del instante anterior. Esto generalmente funciona bien en mejorar la estacionariedad. Diferencia de primer orden se puede hacer en Pandas como: Esto parece haber reducido la tendencia considerablemente. Permite verificar utilizando nuestras parcelas: Podemos ver que las variaciones media y estándar tienen pequeñas variaciones con el tiempo. Además, la estadística de la prueba Dickey-Fuller es menor que el valor crítico 10. Por lo tanto el TS es estacionario con confianza 90. También podemos tener diferencias de segundo o tercer orden que podrían obtener resultados aún mejores en ciertas aplicaciones. Les dejo a ustedes que los prueben. Descomposición En este enfoque, la tendencia y la estacionalidad se modelan por separado y se devuelve el resto de la serie. I8217ll saltar las estadísticas y llegar a los resultados: Aquí podemos ver que la tendencia, la estacionalidad se separan de los datos y podemos modelar los residuos. Permite verificar la estacionariedad de los residuos: La estadística de la prueba Dickey-Fuller es significativamente menor que el valor crítico 1. Así que esta TS está muy cerca de estacionaria. También puede probar técnicas avanzadas de descomposición que pueden generar mejores resultados. Además, debe tener en cuenta que la conversión de los residuos en valores originales para los datos futuros en muy poco intuitivo en este caso. 5. Predicción de una serie de tiempo Vimos diferentes técnicas y todas ellas funcionaron razonablemente bien para hacer que la TS estacionaria. Permite hacer modelo en el TS después de diferenciar ya que es una técnica muy popular. Además, es relativamente más fácil añadir ruido y estacionalidad a los residuos previstos en este caso. Habiendo realizado las técnicas de estimación de tendencia y estacionalidad, puede haber dos situaciones: Una serie estrictamente estacionaria sin dependencia entre los valores. Este es el caso fácil en el que podemos modelar los residuos como ruido blanco. Pero esto es muy raro. Serie con dependencia significativa entre valores. En este caso necesitamos utilizar algunos modelos estadísticos como ARIMA para pronosticar los datos. Permítanme darles una breve introducción a ARIMA. No voy a entrar en los detalles técnicos, pero usted debe entender estos conceptos en detalle si desea aplicarlos de manera más eficaz. ARIMA es la sigla de Auto-Regressive Integrated Moving Averages. La predicción de ARIMA para una serie temporal estacionaria no es más que una ecuación lineal (como una regresión lineal). Los predictores dependen de los parámetros (p, d, q) del modelo ARIMA: Número de términos AR (Auto-Regresivo) (p): Los términos AR son sólo rezagos de la variable dependiente. Por ejemplo, si p es 5, los predictores para x (t) serán x (t-1) 8230.x (t-5). Número de términos MA (Media Móvil) (q): Los términos MA son errores de pronóstico rezagados en la ecuación de predicción. Por ejemplo, si q es 5, los predictores para x (t) serán e (t-1) 8230.e (t-5) donde e (i) es la diferencia entre la media móvil en el i-ésimo instante y el valor real. Número de diferencias (d): Éstas son el número de diferencias no estacionales, es decir, en este caso tomamos la diferencia de primer orden. Así que bien podemos pasar esa variable y poner d0 o pasar la variable original y poner d1. Ambos generarán los mismos resultados. Una cuestión de importancia aquí es cómo determinar el valor de 8216p8217 y 8216q8217. Usamos dos parcelas para determinar estos números. Vamos a discutirlos primero. Función de Autocorrelación (ACF): Es una medida de la correlación entre el TS con una versión retardada de sí mismo. Por ejemplo, con el retardo 5, la ACF compararıa la serie en el instante de tiempo 8216t1821782308217t28217 con la serie en el instante 8216t1-5821782308217t2-58217 (siendo t1-5 y t2 puntos finales). Función de Autocorrelación Parcial (PACF): Mide la correlación entre el TS con una versión retardada de sí mismo pero después de eliminar las variaciones ya explicadas por las comparaciones intermedias. Por ejemplo, en el retraso 5, comprobará la correlación pero eliminará los efectos ya explicados por los retornos 1 a 4. Las gráficas ACF y PACF para el TS después de la diferenciación se pueden representar como: En este gráfico, las dos líneas punteadas a ambos lados de 0 Son los intervalos de confianza. Éstos se pueden utilizar para determinar los valores 8216p8217 y 8216q8217 como: p 8211 El valor de retraso en el que el gráfico PACF cruza el intervalo de confianza superior por primera vez. Si observa de cerca, en este caso p2. Q 8211 El valor de retraso en el que el gráfico ACF cruza el intervalo de confianza superior por primera vez. Si observa de cerca, en este caso q2. Ahora, vamos a hacer 3 diferentes modelos ARIMA teniendo en cuenta tanto los efectos individuales como combinados. También imprimiré el RSS de cada uno. Tenga en cuenta que aquí RSS es para los valores de los residuos y no series reales. Necesitamos cargar primero el modelo ARIMA: Los valores p, d, q se pueden especificar usando el argumento de orden de ARIMA que toma una tupla (p, d, q). Vamos a modelar los 3 casos: Modelo AR Modelo MA Modelo Combinado Aquí podemos ver que los modelos AR y MA tienen casi el mismo RSS pero combinado es significativamente mejor. Ahora, nos quedamos con un último paso, es decir, llevando estos valores a la escala original. Tomándolo de nuevo a la escala original Ya que el modelo combinado dio el mejor resultado, permite escalar de nuevo a los valores originales y ver lo bien que se realiza allí. El primer paso sería almacenar los resultados previstos como una serie independiente y observarlo. Tenga en cuenta que estos comienzan desde 82161949-02-018217 y no el primer mes. ¿Por qué esto es porque tomamos un retraso de 1 y el primer elemento doesn8217t tiene nada antes de restar. La manera de convertir la diferencia a la escala de registro es agregar estas diferencias consecutivamente al número de base. Una forma fácil de hacerlo es determinar primero la suma acumulada en el índice y luego añadirla al número base. La suma acumulada se puede encontrar como: Puede hacer rápidamente algunos cálculos de atrás de la mente utilizando la salida anterior para comprobar si son correctos. Luego we8217ve para agregarlos al número de base. Para esto permite crear una serie con todos los valores como número base y añadir las diferencias a ella. Esto se puede hacer de la siguiente manera: Aquí el primer elemento es el número de base en sí mismo y de allí los valores añadidos acumulativamente. El último paso es tomar el exponente y compararlo con la serie original. Finalmente tenemos un pronóstico en la escala original. No es un pronóstico muy bueno diría, pero tienes la idea correcta Ahora, dejo a usted para refinar la metodología más lejos y hacer una mejor solución. Notas finales A través de este artículo he tratado de darle un enfoque estándar para resolver problemas de series temporales. Este couldn8217t han venido en un mejor momento como hoy es nuestro Mini DataHack que le desafiará a resolver un problema similar. Hemos cubierto conceptos de estacionariedad, cómo tomar una serie temporal más cercana a la estacionariedad y finalmente predecir los residuos. Fue un viaje largo y he omitido algunos datos estadísticos que le animo a que se refiera usando el material sugerido. Si no desea copiar y pegar, puede descargar el portátil iPython con todos los códigos de mi repositorio GitHub. Espero que este artículo le ayude a lograr una buena primera solución hoy. Todos los mejores chicos Te gustó el artículo ¿Qué tan útil fue en el hackathon de hoy Algo que te molesta que desea discutir más Por favor, siéntase libre de publicar un comentario y I8217ll será más que feliz de discutir. Comparta esto: Los inviernos de Holt (por lo menos el modelo aditivo) son un caso especial del modelo del arima (un modelo arima estacional). Esto sería un arima (p, d, q) (P, D, Q) donde el segundo paréntesis contiene los efectos estacionales. También recomendaría revisar cualquiera de los trabajos de Rob Hyndman8217s en el modelado arima, me parece muy accesible. Hola Gracias. Para un artículo informativo. Estoy ansioso por saber lo siguiente: a) ¿cómo podemos identificar lo que debería ser valor nlags para probar con lagacf acf (tslogdiff, nlags20) lagpacf pacf (tslogdiff, nlags20, method8217ols8217) b) ¿Cómo podemos pronosticar para futuros puntos de tiempo 12 puntos por delante). ¿Podemos usar las predicciones seguidas de followingsARIMAlog pd. Series (tslog. ix0, indextslog. index) prediccionesARIMAlog prediccionesARIMAlog. add (prediccionesARIMAdiffcumsum, fillvalue0) tslog no está disponible para puntos futuros. C) En uno de los artículos (A Complete Tutorial on Time Series Modeling in R,) referido por usted, mientras realiza adf dice adf. test (diff (log (AirPassengers)), alternative8221stationary8221, k0) What is k. Y como podemos identificar el valor de k durante la realización de la prueba .. mientras se realiza ARIMA dice: fit lt - arima (log (AirPassengers), c (0, 1, 1), lista estacional (orden c (0, 1, 1 ), Período 12))) Podemos identificar las (p, d, q) de ACF PACF parcelas. Por favor, explique el parámetro de la lista estacional (orden c (0, 1, 1) ¿Qué valores debemos pasar en el parámetro estacional y la forma de identificarlo. Será útil si usted guía en la parte superior. Gracias en la anticipación. Aarshay Jain dice: Por favor, encuentre mis respuestas a continuación: a) Así que los nlags no afectan a los valores de salida. Sólo especifica cuántos valores se mostrarán. Así que puede comenzar con un número pequeño y si no encuentra el punto de cruce dentro de eso, puede aumentar el máximo hasta el número de observaciones en los datos. B) ARIMA tiene una función específica para la predicción de valores. La variable resultsARIMA aquí es del tipo ARIMAresults que tiene una función de predicción. Puede comprobar los detalles como statsmodels. sourceforge. net/devel/generated/statsmodels. tsa. arimamodel. ARMAResults. predict. htmlstatsmodels. tsa. arimamodel. ARMAResults. predict Por favor, no dude en ponerse en contacto conmigo en caso de que enfrente retos en la implementación esta. También puede iniciar un hilo en el foro de discusión que permitirá más libertad de expresión al discutir c) Im no muy experimentado con R así que permítanme leer la sintaxis del código. Voy a volver a usted en esto. Chirag Bhatia dice: Hola Aarshay Estoy tratando de predecir los valores futuros en los mismos datos AirPassenger pero no estoy recibiendo los resultados correctos. Puedo perder algunos parámetros mientras predice. Por favor, ayúdame. Estoy atascado de los últimos 2 días. Mi código es: import pandas as pd import numpy como np de statsmodels. tsa. arimamodel importación ARIMA import matplotlib. pylab como plt data1 pd. readcsv (8216AirPassengers. csv8217) avg data18216Passengers8217 avglist (avg) res pd. Series (avg, indexpd. (Ts1) () () () () () () () () () () () () t) ) Pred r. predict (start82171961-018242, end82171970-018242) fechas pd. daterange (82161961-018242,82171970-018242, freq8217M8217) predicciones de fechas de impresión prediccionesARIMAdiff pd. Series (pred, copyTrue) prediccionesARIMAdiffcumsum prediccionesARIMAdiff. cumsum () prediccionesARIMAlog pd. Series (Ts. ix0) prediccionesARIMAlogpredictionsARIMAlog. add (prediccionesARIMAdiffcumsum, fillvalue0) prediccionesARIMA np. exp (prediccionesARIMAlog) plt. plot (res) plt. plot (prediccionesARIMA) plt. title (8216RMSE: .4f8217 np. sqrt (sum (predictionsARIMA-ts1 ) 2) / len (ts))) plt. show () imprimir prediccionesARIMA. head () print ts. head () Aarshay Jain dice: Supongo que ha iniciado un hilo de discusión por separado para su consulta 8216c8217. Vamos a continuar la discusión allí. Para otros que están leyendo esto y están interesados en explorar más lejos, por favor, echa un vistazo a este enlace: 8230 Guía completa para crear una serie de tiempo (con códigos en Python) Series temporales (conocido como TS a partir de ahora) es considerado uno de los menos conocidos Habilidades en el espacio de análisis (Incluso tuve pocas pistas sobre ello un par de días atrás). Pero como ustedes saben nuestro Mini Hackathon inaugural se basa en él, me puse en un viaje para aprender los pasos básicos para resolver un problema de la serie de tiempo y aquí estoy compartiendo iguales con usted. Estos definitivamente le ayudarán a conseguir un modelo decente en nuestro hackathon hoy. 8230 8230 Dado que ya estaba decidido que el problema estaría sobre la serie de tiempo 8211 me aseguré de que estuviera bien equipado con conocimientos y paquetes sobre la serie temporal. De hecho, incluso escribí una guía de Time Series en Python. 8230 8230 Leer tutorial Por Aarshay Jain Fuente: analyticsvidhya 8230 Gracias Aarshay por este escribir. También se recomienda no ir para los modelos combinados como p amp q utilizados juntos anulará su impacto en el modelo, por lo tanto, es un promedio móvil o correlación automática junto con las diferencias, pero aquí el modelo combinado ha dado los mejores resultados. ¿Puede usted por favor corregir mi comprensión alrededor de modelos combinados. Aarshay Jain dice: I haven8217t leer que p 038 q no se debe combinar. It8217s realmente aparece contra intuitivo porque si este era el caso entonces ARIMA no debería existir en el primer lugar. ¿Puedes arrojar alguna luz sobre por qué crees que anulan el efecto de los demás Aayush Kumar Singha dice: Hola El artículo es el mejor disponible en la serie de tiempo con Python con grandes enlaces externos también para aquellos que quieren entender el stat detrás además. Quisiera solicitar por favor ampliar este artículo para predecir el rango de datos fuera de la muestra también con diferentes modelos para representar los mejores como lo hiciste para eliminar la tendencia (teniendo promedio y ewma). Eso hará que todo sea un artículo de series de tiempo completo. Gracias por adelantado. Aarshay Jain dice: Hola Ayush Gracias por su valiosa retroalimentación. Sí, creo que ese componente es necesario. Pero en lugar de extender este artículo, probablemente escribiré un post separado tomando otro estudio de caso. I8217m un poco crunched para el ancho de banda, pero se puede esperar en algún momento de este mes. Estén atentos Gracias por el excelente artículo. Tengo 2 aclaraciones 1) En el paso Estimating amp Eliminating Trend, tengo números negativos. ¿Podría decirme por favor qué transformaciones podría aplicar? Log y Sqrt devuelve NAN 2) Además, testingtationarity (tslogdecompose, nlags10) durante la ejecución especifica nlags no definido. Gracias por adelantado. Aarshay Jain dice: Gracias por llegar. Respecto a sus consultas: 1. Puede intentar escalar sus valores y luego aplicar transformaciones. Además, es posible que desee comprobar si la transformación de registro es realmente necesario en su caso. También puede probar una raíz cúbica. 2. Elimine el argumento nlags y, a continuación, ejecute el código. I8217ve actualizado el código de arriba también. Welch dice: Buen artículo, rara vez se ve esta gama de modelos discutidos en un solo lugar y de una manera tan práctica. For anyone doing seasonal decomposition in Python, I8217d like to shamelessly plug my seasonal package (PyPI or github/welch/seasonal ) in addition to statsmodels seasonaldecompose. seasonal offers some richer and more robust detrending possibilities, and will also estimate your model8217s periodicity for you (convenient in a dev-ops setting with thousands of streams at hand). It also includes a robust periodogram for visualizing the periodicities in your data. Aarshay Jain says: Thanks Will for sharing your library. It8217ll be helpful for everyone. If test static (-2.287864) is greater than critical value (-3.46, -2.57, -2.87) then we can8217t reject the null hypothesis, the series is stationary. That said it is still non-stationary. If you increase the i value in ARIMA model, perhaps above condition may meet and you may get the good forecast values. I really enjoyed this but running on python 3, I8217ve encountered a couple errors on the last portion. 8220plt. title(8216RSS: .4f8217 sum((resultsMA. fittedvalues-tslogdiff)2)) pandastslib. pyx in pandas. tslib. Timestamp. radd (pandastslib. c:14048)() pandastslib. pyx in pandas. tslib. Timestamp. add (pandastslib. c:19022)() ValueError: Cannot add integral value to Timestamp without offset.8217 Googling around it seems that its a bug in statsmodel but if I was wondering perhaps if you or someone else ported it to python 3 Prakhar Shrivastava says: Satya Chandu says: This is a very good blog and very useful. I could follow the entire process. But I did not understand how to forecast for next 12 months from the last value. In the current case the last value is 1960-12, I need to forecast till 1961-12 (12 values). How can I do that in the following code It would be great if you kindly add that process and update this article. predictionsARIMAlog pd. Series(tslog. ix0, indextslog. index) predictionsARIMAlog predictionsARIMAlog. add(predictionsARIMAdiffcumsum, fillvalue0) First of all thanks for this brilliant post. I am following a similar approach for forecasting a minute8217s data using previous hours data. I am using forecast function in statsmodels along with ARIMA model. Calculating the P, Q and D using the approach you mentioned in your post. However, I am facing a few problems: 1. At times the ARIMA throws an error for AR or MA parameter . 2. ARIMA in python takes a lot of time. Similar code in R takes less than 30 minutes for forecasting a months data. Am I missing something or ARIMA in python is inherently slow 3. I get MLE not converging Warning almost every-time, why is that so. 4. ARIMA does not allow D value more than two, however, at times adfuller results in d value more than two. What should be done in this case. Looking forward to your suggestions. Satya Chandu says: This is very useful article. I got a small doubt about forecasting values. How can I get the forecast values from the following code Suppose I want to print for next 1 year, how can I do that predictionsarimalog pd. Series(tslog. ix0, indextslog. index) predictionsarimalog predictionsarimalog. add(predictionsarimadiffcumsum, fillvalue0) Shantanu Saha says: Thank you for such a detailed post. I was wondering what if the data was in Country-level How can we deal with such time series data then For this code line: data pd. readcsv(8216AirPassengers. csv8217, parsedates8217Month8217, indexcol8217Month8217,dateparserdateparse) Does it work I got error message in my Anaconda Python 2.7 because Python can8217t identify 8216Month8217 as a list of Month column value for parameter parsedates, so I changed to 8216Month8217, It works. Could anyone confirm it in Python 3 Thanks. Michael Francis says: 8220ValueError: Cannot add integral value to Timestamp without offset.8221 i keep getting this error whenever I use the ARIMA function and I was wondering if you could tell me what this means and how i could fix it. Im using the same data and steps as the example above. Thanks for this great article, it greatly helped me get started with time series forecasting. What would be the additional steps if you wanted to make a more accurate forecast Really nice post, My question is how would different would the second part of the problem be if you were to use decomposing instead of differecing for forecasting the time-series Shreyak Tiwari says: Can someone please explain while creating ARIMA models you are using tslog ( just a log time series) but while calculating RSS you are using tslogdiff. Am i missing something here mayank satnalika says: Hey I8217m a newbie in machine learning and wanted sort out an issue: What type of problems can be classified under time forecasting problem. Many tutorials begin with predicting stock prices for next few days, so is it a time forecast problem. Also is the Bike sharing Demand question from Kaggle a part of time forecasting question as we are given the demand for some dates and we need to predict demand for upcoming days. How to select which model is better one for our data Is there any parameters in data to select models This is literally the BEST article I8217ve ever seen on time-series analysis with Python. Very well explained. I wish the statsmodels documentation was this good (they give you the tools but don8217t show you how to use them). I am very confused about ACF and PACF and how to read the charts to determine the proper P an Q. You concluded that p and q are both 2 and you mention 8220upper confidence level8221. I don8217t see the lines crossing the upper-confidence level dashed line at point 2 in ACF or PACF. Is this a typo If not a typo, can you explain I wonder what your thoughts are on doing a decomposition, then performing ARIMA forecasting on each component (trend, seasonality, residual), then re-scaling back. Is this a sound method/approach I did this and the prediction line looks like what I8217d expect. I8217m just wondering if this is a common practice. Hi Aarshey. great article. I have tested the code and working fine, however, I am not getting the years in X axis, I tried different date parse methods, but no luck. How did you get year values in X axis where as parse method converting Month column as string in Y-m-d format I got confused on many points: 1- we do many transformations to get stationarity data and every transformation we get data with good stationarity and on the example, you got the best stationary after applying the Decomposing, then why did you use the tslogdiff and tslog data with ACF, PACF and ARIMA instead of using the Decomposing data. 2- I did see many styles for ACF and PACF one like continuous graph and another one like pins, which one I should go for it 3- what is the best and easiest way to detect AR and MA by ACF and PACF some tutorials mention about every ARIMA model has a special ACF and PACF pattern and others mention about the intersection between the lags and the confidence upper line 4-is there any way to automate the step of getting the AR and MA instead of trying to investigate the ACF and PACF plots Alex Debie says: thanks alot for the information, i learned a ton. Im just a little confused now that i have this model how to use it to predict the next point in time dwiti basu says: Hi I am getting this error when I am writing the following codes, can anyone help date1 lambda dates: pd. datetime. strptime(dates, 8216Y-m8217) dataset pd. readcsv(8216AirPassangers. csv8217, parsedates8217Month8217, indexcol8217Month8217,dateparserdate1) This is what I am getting: date1 lambda dates: pd. datetime. strptime(dates, 8216Y-m-d8217) dataset pd. readcsv(8216AirPassangers. csv8217, parsedates8217Month8217, indexcol8217Month8217,dateparserdate1) Traceback (most recent call last): File 82208221, line 1, in dataset pd. readcsv(8216AirPassangers. csv8217, parsedates8217Month8217, indexcol8217Month8217,dateparserdate1) File 8220C:Usersdwiti. bAppDataLocalContinuumAnaconda2libsite-packagespandasioparsers. py8221, line 562, in parserf return read(filepathorbuffer, kwds) File 8220C:Usersdwiti. bAppDataLocalContinuumAnaconda2libsite-packagespandasioparsers. py8221, line 315, in read parser TextFileReader(filepathorbuffer, kwds) File 8220C:Usersdwiti. bAppDataLocalContinuumAnaconda2libsite-packagespandasioparsers. py8221, line 645, in init self. makeengine(self. engine) File 8220C:Usersdwiti. bAppDataLocalContinuumAnaconda2libsite-packagespandasioparsers. py8221, line 799, in makeengine self. engine CParserWrapper(self. f, self. options) File 8220C:Usersdwiti. bAppDataLocalContinuumAnaconda2libsite-packagespandasioparsers. py8221, line 1202, in init ParserBase. init(self, kwds) File 8220C:Usersdwiti. bAppDataLocalContinuumAnaconda2libsite-packagespandasioparsers. py8221, line 893, in init kwds. pop(8216parsedates8217, False)) File 8220C:Usersdwiti. bAppDataLocalContinuumAnaconda2libsite-packagespandasioparsers. py8221, line 873, in validateparsedatesarg raise TypeError(msg) TypeError: Only booleans, lists, and dictionaries are accepted for the 8216parsedates8217 parameter
No comments:
Post a Comment