40 votos

Análisis de series temporales de validación cruzada

He estado usando el paquete de caretas en R para construir modelos predictivos de clasificación y regresión. Caret proporciona una interfaz unificada para afinar los hiperparámetros del modelo mediante validación cruzada o con el método de arranque. Por ejemplo, si está construyendo un modelo simple de "vecinos más cercanos" para la clasificación, ¿cuántos vecinos debe utilizar? 2? 10? 100? Caret le ayuda a responder a esta pregunta volviendo a muestrear sus datos, probando diferentes parámetros y, a continuación, agregando los resultados para decidir cuál es el que ofrece la mejor precisión predictiva.

Me gusta este enfoque porque proporciona una metodología robusta para elegir los hiperparámetros del modelo y, una vez elegidos los hiperparámetros finales, proporciona una estimación validada cruzada de lo "bueno" que es el modelo, utilizando la precisión para los modelos de clasificación y el RMSE para los modelos de regresión.

Ahora tengo algunos datos de series temporales para los que quiero construir un modelo de regresión, probablemente utilizando un bosque aleatorio. ¿Cuál es una buena técnica para evaluar la precisión predictiva de mi modelo, dada la naturaleza de los datos? Si los bosques aleatorios no se aplican realmente a los datos de series temporales, ¿cuál es la mejor manera de construir un modelo de conjunto preciso para el análisis de series temporales?

4 votos

Caret admite ahora la validación cruzada de series temporales - r-bloggers.com/validación-cruzada-de-series-de-tiempo-5

1 votos

@Zach Este es un post antiguo, pero me pregunto si tienes alguna idea nueva. ¿Conoces algún trabajo reciente sobre validación secuencial de modelos?

12voto

Omar Shahine Puntos 886

La técnica "clásica" de validación cruzada de k veces se basa en que cada muestra del conjunto de datos disponible se utiliza (k-1)-veces para entrenar un modelo y 1 vez para probarlo. Dado que es muy importante validar los modelos de series temporales con datos "futuros", este enfoque no contribuye a la estabilidad del modelo.

Una propiedad importante de muchas (¿la mayoría?) series temporales es la correlación entre los valores adyacentes. Como señala IrishStat, si utiliza lecturas anteriores como variables independientes de su modelo candidato, esta correlación (o falta de independencia) desempeña un papel importante y es otra razón por la que la validación cruzada de k veces no es una buena idea.

Una forma de superar este problema es "sobremuestrear" los datos y decorrelacionarlos. Si el proceso de descorrelación tiene éxito, el uso de la validación cruzada en las series temporales resulta menos problemático. Sin embargo, no resolverá el problema de la validación del modelo con datos futuros.

Aclaraciones

por validar el modelo con datos futuros me refiero a construir el modelo, esperar nuevos datos que no estaban disponibles durante la construcción del modelo, probarlos, afinarlos, etc. y validarlo con ellos nuevo datos.

Por sobremuestreo de los datos me refiero a la recopilación de datos de series temporales con una frecuencia muy superior a la necesaria en la práctica. Por ejemplo: muestrear los precios de las acciones cada 5 segundos, cuando lo que realmente interesa son las alteraciones horarias. Aquí, cuando digo "muestreo" no me refiero a "interpolar", "estimar", etc. Si los datos no pueden medirse con mayor frecuencia, esta técnica no tiene sentido

0 votos

¿Cuál es la forma "clásica" de validar un modelo con datos futuros? ¿Qué quiere decir "sobremuestreo"? Gracias.

1 votos

Cabe señalar que las propiedades estadísticas de los datos de series temporales del mundo real (especialmente los datos financieros) pueden variar en función de la frecuencia de muestreo. En el caso de muchas series temporales financieras, no existe una frecuencia de muestreo sencilla. $\sqrt{T}$ relación entre las desviaciones típicas muestreadas con periodo $p$ y con periodo $pT$ . De hecho, la desviación típica tiende a aumentar a medida que aumenta la frecuencia de muestreo. Del mismo modo, la correlación disminuye a medida que aumenta la frecuencia de muestreo (esto se conoce comúnmente como la Efecto Epps )

0 votos

@bgbg Estoy enfrentando un problema muy similar y acabo de encontrar tu post. ¿Puedes citar algunas referencias sobre el sobremuestreo y la descorrelación de datos de series temporales? Creo que si la memoria de la serie temporal es lo suficientemente corta (podría demostrarse ajustando un arima), uno podría simplemente tomar muestras "no solapadas" y hacer la validación cruzada habitual. Se agradece cualquier idea.

11voto

Psycho Bob Puntos 661

http://robjhyndman.com/researchtips/crossvalidation/ contiene un consejo rápido para la validación cruzada de series temporales. En cuanto a la utilización de bosques aleatorios para datos de series temporales.... no estoy seguro, aunque parece una opción impar dado que el modelo se ajusta utilizando muestras bootstrap. Por supuesto, hay métodos clásicos de series temporales (por ejemplo, ARIMA) que pueden utilizarse, al igual que las técnicas de ML como las redes neuronales (ejemplo ejemplo pdf ). Quizás alguno de los expertos en series temporales pueda comentar qué tal funcionan las técnicas de ML en comparación con los algoritmos específicos de series temporales.

3 votos

Esto da en el clavo. Estoy intentando averiguar cómo aplicar técnicas de aprendizaje automático al análisis de series temporales.

1 votos

Ya he utilizado con éxito bosques aleatorios para hacer previsiones. Echa un vistazo: biomedcentral.com/1471-2105/15/276

8voto

Boris Tsirelson Puntos 191

Aquí hay algunos código de ejemplo para la validación cruzada de modelos de series temporales. I ampliado este código en mi blog incorporando el para cada paquete para acelerar las cosas y permitir un posible término xreg en la validación cruzada.

Aquí hay una copia del código del blog de Rob Hyndman:

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

Results

0 votos

Hola Zach. He implementado una versión ligeramente diferente del código de Hyndman para detectar el número adecuado de términos para un modelo de regresión con series temporales. Desgraciadamente, el gráfico de error CV mostraba varios mínimos locales que me hicieron cuestionarme cómo seleccionar correctamente el número de términos. El problema completo se describe aquí . ¿Se ha enfrentado antes a algo similar?

5voto

Owen Fraser-Green Puntos 642

Si tiene datos de series temporales, es posible que tenga un "problema de grados de libertad". Por ejemplo, si tiene 4 observaciones tomadas a intervalos de una hora y luego decide utilizar 241 observaciones a intervalos de un minuto, tiene 241 observaciones, pero no son necesariamente independientes. Cuando se envían estos 241 valores/medidas a un paquete analítico, el paquete podría esperar que se tratara de 241 valores independientes al proceder a realizar su magia particular. Si tiene datos de series temporales, es posible que tenga que actualizar sus análisis. No conozco el programa al que se refiere, pero creo que sus pruebas (pruebas F, pruebas T, etc.) probablemente no se apliquen a su conjunto de problemas.

1voto

Assaf Lavie Puntos 207

Te puedo recomendar 2 documentos interesantes para leer que están en línea 1.Streamed Learning: One-Pass SVMs, por Piyush Rai, Hal Daum'e III, Suresh Venkatasubramanian 2.Aproximación de k-means en streaming, por Nir Ailon

Espero que te aclare un poco tus ideas

1 votos

Zach aquí está la primera snowbird.djvuzone.org/2008/abstracts/180.pdf y el otro es www1.cs.columbia.edu/~rjaiswal/ajmNIPS09.pdf . Espero que sea de ayuda

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X