Detección de forma para datos de series temporales

8

Tengo una gran colección de series de tiempo: mediciones tomadas cada 15 minutos (96 mediciones en un día) en el transcurso de 1 año en diferentes lugares.

He dividido cada serie de tiempo en 365 series de tiempo más pequeñas, 1 para cada día del año. Mirando estas series de tiempo, ciertamente hay muchas formas distintas para un solo día. Algunos parecen sinusoidales, algunos son constantes, algunos parecen un proceso estocástico aleatorio, algunos parecen parabólicos y otros parecen U's.

Lo que me gustaría hacer es usar un algoritmo que pueda encontrar estas formas comunes. Pensé en la agrupación y en el uso de los centroides del grupo para definir formas comunes, pero quería verificar con la comunidad si esto es correcto. Hasta ahora, he visto Dynamic Time Warp como una métrica, pero parece que esa métrica requiere muchos cálculos. También he encontrado

http://mox.polimi.it/it/progetti/pubblicazioni/quaderni/13-2008.pdf de SE.

También vi ¿Es posible hacer agrupaciones de series de tiempo basadas en la forma de la curva? pero esta pregunta era de 2010 y podría estar desactualizada.

Otra idea que tuve fue tomar descomposiciones propias de matrices formateadas como:

Matriz Mi es una matriz de todas las series de tiempo observadas en el día i. Cada fila de matrizMies una serie temporal de longitud 96. Entonces, haría 365 descomposiciones propias y usaría los vectores propios como formas comunes. ¿Suena esto razonable?

¡Gracias!

JCWong
fuente

Respuestas:

7

No profundizaría demasiado en la agrupación de las series de tiempo basadas en un análisis de curva complejo, ya que probablemente tenga mucho ruido en sus datos y probablemente obtenga grupos extraños (sin sentido).

Creo que una forma más fácil será descubrir el patrón principal de sus datos, que probablemente se basará en las tendencias y la estacionalidad (días de la semana, fines de semana, días festivos ...). Puede encontrarlo trazando algunas estadísticas de cada día (media, tendencia de la mañana, tendencia de la tarde ...) con la hora (día del año, día de la semana, día del mes ...) en el eje x. Esto le dará la línea base de sus datos y, por lo tanto, sus clústeres básicos.

Por ejemplo, en R, si tiene su fecha en la columna 1 y su media en la columna 2, puede trazar fácilmente su línea base del patrón de los días laborables de la siguiente manera:

data[,3] <- as.factor(weekdays(data[,1]))
plot(data[,3],data[,2],main='mean by Day of Week')

El siguiente paso puede ser identificar sus valores atípicos y verificar si puede encontrar patrones allí.

Si prefiere trabajar en orden inverso; ejecutar análisis automáticos como los que sugirió o más series temporales ajustadas como LB_Keogh o kml , está bien. Pero debe volver a la interpretación significativa de los hallazgos con la lógica anterior.

Chico
fuente