¿Cómo manejar el pronóstico de series de tiempo en línea?
9
He estado lidiando con el siguiente problema. Tengo una especie de sistema de tiempo real y cada período de tiempo leo su valor actual, creando una serie de tiempo (como 1, 12, 2, 3, 5, 9, 1, ...). Me gustaría conocer métodos (estadística y aprendizaje automático) para pronosticar el siguiente valor en línea (es decir, cada vez que se lee un nuevo valor). Probé ARIMA de R y SMOreg de Weka, dan buenas predicciones, pero son algo lentas ya que cada vez que aparece un nuevo valor tengo que rehacer las matemáticas.
PD: Sería genial también si el método tuviera un intervalo de confianza.
En su sistema de tiempo real, ¿son los tiempos de observación no homogéneos y los datos no estacionarios? Si desea algo simple y rápido, sugiero utilizar los operadores de tipo EMA no homogéneos:
con un parámetro de suavizado / ajuste. Es una forma simple de estimar una expectativa.τ
También se puede crear una estimación mediana simple en línea a través de la actualización
sgmed += s gn ( newData - med )= ϵ( sg - med )
En la práctica, desea pequeño (o en descomposición con más observaciones). Idealmente, debería depender de qué tan asimétricas sean las actualizaciones; es decir, si realidad es igual a la mediana, entoncesϵϵmedicinasg debe ser uniforme en { - 1 , 1 }. Luego puede extender esto a una profundidadre estructura de tipo de árbol binario equilibrado para obtener 2re+ 1- 1 cuantiles uniformemente espaciados.
La combinación de lo anterior debería proporcionarle una distribución en línea decente de sus datos. El árbol es difícil de entender, tengo implementaciones de ambos en C ++ si estás interesado. Utilizo mucho ambos en la práctica (datos de tick financieros en tiempo real) y han funcionado bien.
Hola murat Creé un hipervínculo al artículo que publicaste y centré tus ecuaciones. Vea el historial de publicaciones si está interesado en ver cómo hacer esto para futuras referencias. También hay algunos botones útiles en la parte superior del cuadro de texto que aparece cuando está escribiendo una respuesta que hará muchas cosas automáticamente por usted (por ejemplo, ingresar imágenes, enlaces, negrita / cursiva y más). (+1, por cierto)
Macro
3
Primero debe hacer una incrustación de sus datos en el tiempo. Por ejemplo, tome como primera entrada [1, 12, 2, 3] y la salida correspondiente [5], y como segunda entrada tome [12, 2, 3, 5] y la salida correspondiente [9]. (Esto está incrustado con el retraso 4, pero puede elegir otro valor que se ajuste mejor).
Ahora tiene un problema de predicción válido. A estos datos puede aplicar los procesos gaussianos en línea . Este es un método de aprendizaje automático que hace exactamente lo que usted describe y proporciona intervalos de confianza.
Si su modelo no es estacionario, puede probar la extensión no estacionaria, el rastreador recursivo de mínimos cuadrados del núcleo . Por cierto, ese documento incluye el código de Matlab para casos estacionarios y no estacionarios.
Estos métodos son razonablemente rápidos: su complejidad computacional es cuadrática en términos de la cantidad de datos que almacena en la memoria (que generalmente es una parte pequeña y representativa de todos los datos procesados). Para métodos más rápidos, recomiendo, por ejemplo, el método de mínimos cuadrados del núcleo, pero su precisión es menor.
El procedimiento que recomendó, ¿informa cuándo se producen cambios de nivel o cambios de tendencia temporal? ¿Detecta cambios en los parámetros o cambios en la variación con el tiempo? ¿Distingue entre la memoria autorregresiva estacional y los dummies estacionales?
IrishStat el
@IrishStat Creo que tu pregunta es retórica. Si un modelo puede tener una recursión simple para actualizar el modelo, no puede tener todas las complejidades que usted describe. A veces es más importante obtener una respuesta correcta en lugar de una respuesta rápida que sea deficiente. ¡Es por eso que en mi respuesta dije que solo lo hiciera si el modelo se ajusta bien a los datos!
Michael R. Chernick
1
@IrishStat Estos métodos son "no paramétricos", lo que significa que no asumen ningún modelo específico de los datos (simplemente "ajustan" los datos). No informan cambios de tendencia. Sin embargo, informan un error de predicción, por lo que si desea encontrar cambios en la tendencia, probablemente pueda simplemente observar cuándo el error de predicción es lo suficientemente grande.
Steven
No estoy familiarizado con los procesos gaussianos dispersos en línea, pero al mirar el artículo vinculado no creo que sea correcto caracterizarlos como "no paramétricos", ya que usan procesos gaussianos para distribuciones anteriores e involucran una serie de parámetros en su "Kalman". -filter-like "recursiona. Parece que alguna estructura modelo debe estar implícita en la formulación. Todavía creo que se aplican los comentarios de IrishStat.
Michael R. Chernick
3
El filtro de Kalman es un algoritmo recursivo. Toma la nueva observación y la combina con la predicción previa. Sería bueno usarlo, pero solo si es un modelo apropiado para sus datos. No estoy seguro de lo fácil que es actualizar el intervalo de predicción.
No sé si intentaste esto, pero en R cuando usas la función Arima puedes especificar el modelo como entrada. Entonces, si inicialmente encontró un modelo de arima, digamos Arima (1,2,1) con sus respectivos componentes de suavizado, puede arreglar el modelo en iteraciones posteriores para que no intente reajustar un modelo. Si sus datos son estacionarios en ese caso, las predicciones pueden ser lo suficientemente buenas para usted y mucho más rápidas.
Primero debe hacer una incrustación de sus datos en el tiempo. Por ejemplo, tome como primera entrada [1, 12, 2, 3] y la salida correspondiente [5], y como segunda entrada tome [12, 2, 3, 5] y la salida correspondiente [9]. (Esto está incrustado con el retraso 4, pero puede elegir otro valor que se ajuste mejor).
Ahora tiene un problema de predicción válido. A estos datos puede aplicar los procesos gaussianos en línea . Este es un método de aprendizaje automático que hace exactamente lo que usted describe y proporciona intervalos de confianza.
Si su modelo no es estacionario, puede probar la extensión no estacionaria, el rastreador recursivo de mínimos cuadrados del núcleo . Por cierto, ese documento incluye el código de Matlab para casos estacionarios y no estacionarios.
Estos métodos son razonablemente rápidos: su complejidad computacional es cuadrática en términos de la cantidad de datos que almacena en la memoria (que generalmente es una parte pequeña y representativa de todos los datos procesados). Para métodos más rápidos, recomiendo, por ejemplo, el método de mínimos cuadrados del núcleo, pero su precisión es menor.
fuente
El filtro de Kalman es un algoritmo recursivo. Toma la nueva observación y la combina con la predicción previa. Sería bueno usarlo, pero solo si es un modelo apropiado para sus datos. No estoy seguro de lo fácil que es actualizar el intervalo de predicción.
fuente
No sé si intentaste esto, pero en R cuando usas la función Arima puedes especificar el modelo como entrada. Entonces, si inicialmente encontró un modelo de arima, digamos Arima (1,2,1) con sus respectivos componentes de suavizado, puede arreglar el modelo en iteraciones posteriores para que no intente reajustar un modelo. Si sus datos son estacionarios en ese caso, las predicciones pueden ser lo suficientemente buenas para usted y mucho más rápidas.
Espero que esto ayude..
fuente