Aprendizaje incremental para el modelo de series de tiempo LOESS

9

Actualmente estoy trabajando en algunos datos de series temporales, sé que puedo usar el modelo LOESS / ARIMA.

Los datos se escriben en un vector cuya longitud es 1000, que es una cola, que se actualiza cada 15 minutos,

Por lo tanto, los datos antiguos aparecerán mientras los nuevos datos ingresan en el vector.

Puedo volver a ejecutar todo el modelo en un planificador, por ejemplo, volver a entrenar el modelo cada 15 minutos, es decir, usar todo el valor 1000 para entrenar el modelo LOESS, sin embargo, es muy ineficiente, ya que cada vez que solo se inserta un valor mientras se usan otros 999 valores sigue igual que la última vez.

Entonces, ¿cómo puedo lograr un mejor rendimiento?

Muchas gracias

zhang
fuente
3
¿Qué es un "modelo LOESS / ARIMA"? ¿Se refería a una tendencia de tiempo no lineal con errores ARIMA donde la tendencia no lineal se estima usando LOESS?
Rob Hyndman
lo siento, me refiero al modelo LOESS o ARIMA. Por ejemplo, uso LOESS para encontrar los residuales como: residuales (loess (x ~ time)). porque los datos x son vectores con 1000 valores, que se actualizan cada 15 minutos. ¿Cómo puedo obtener eficientemente los residuos, pero no volver a ejecutar todo el conjunto de datos como entrada cada vez? como solo 1 actualización de valor cada vez, los otros 999 valores siguen siendo los mismos que la última vez.
zhang
un método posible, puede usar los primeros 1000 valores para predecir los siguientes 1000 valores (aunque LOESS solo admite predecir 4 valores), luego calcular el residual como la diferencia entre el valor real y el valor de predicción correspondiente. Luego, vuelva a entrenar el modelo cada 1000 valores Sin embargo, este no es el modelo LOESS original que quiero en absoluto :-(
zhang

Respuestas:

1

Permítanme reformular esto en algo más familiar para mí. El ARIMA es una aproximación análoga a PID. Yo es integral. MA es P. el AR puede expresarse como ecuaciones de diferencia que son el término D. LOESS es un análogo al ajuste de mínimos cuadrados (hermano mayor de alta tecnología realmente).

Entonces, si quisiera mejorar un modelo de segundo orden (PID), ¿qué podría hacerse?

  • Primero, podría usar un filtro de Kalman para actualizar el modelo con una sola pieza de información nueva.
  • También podría ver algo llamado "árboles impulsados ​​por gradiente". Usando un análogo de ellos, haría un segundo modelo ARIMA cuyas entradas son las dos entradas sin procesar alimentadas al primero, aumentadas con los errores del primero.
  • Consideraría mirar el PDF de los errores para múltiples modos. Si pudiera agrupar los errores, entonces podría querer dividir modelos, o usar un modelo de Mezcla para separar las entradas en submodelos. Los submodelos podrían ser mejores para manejar la fenomenología local mejor que un solo modelo a gran escala.

Una de las preguntas que no he podido hacer es "¿qué significa el rendimiento?". Si no tenemos una medida de bondad claramente establecida, entonces no hay forma de saber si un método candidato "mejora". Parece que desea un mejor modelado, un tiempo de cómputo más corto y un uso más eficiente de la información. Tener efemérides sobre los datos reales también puede informar esto. Si está modelando el viento, puede saber dónde buscar modelos de aumento o encontrar transformaciones para sus datos que sean útiles.

Estudiante
fuente
1

Esta es una pregunta diferente dependiendo de si está utilizando un modelo loess o ARIMA. Contestaré solo la pregunta de loess por ahora, ya que sospecho que hay pocas eficiencias posibles en el caso de ARIMA además de tener un buen conjunto de valores iniciales.

Un modelo loess funciona ajustando una regresión ponderada a diferentes subconjuntos de datos. Solo se utiliza una proporción de los datos para cada ajuste. Por lo tanto, cada vez que vuelva a colocar el modelo después de haber dejado un punto de datos en un extremo y agregado otro en el extremo opuesto, técnicamente solo necesita ajustar las regresiones locales que usan el primer y el último punto. Todas las regresiones locales intermedias serán las mismas. La cantidad exacta de estas regresiones locales sin impacto dependerá de su parámetro de suavizado en el loess.

Podrías hackear cualquier paquete que estés usando para ajustar tu modelo para que pueda tomar la mayoría de las regresiones locales de un ajuste anterior, y solo ajustar las que se necesitan al principio y al final de los datos.

Sin embargo, me parece que esto solo valía la pena si el costo en tiempo de programación adicional es materialmente menor que el costo en tiempo de computadora de solo ajustar el modelo desde cero cada 15 minutos. Con solo 1000 puntos de datos, seguramente no es tan importante adaptar el modelo desde cero cada vez.

Peter Ellis
fuente