He estado usando el paquete caret en R para construir modelos predictivos para clasificación y regresión. Caret proporciona una interfaz unificada para ajustar los hiperparámetros del modelo mediante validación cruzada o arranque de bandas. Por ejemplo, si está construyendo un modelo simple de 'vecinos más cercanos' para la clasificación, ¿cuántos vecinos debe usar? 2? 10? 100? Caret le ayuda a responder esta pregunta volviendo a muestrear sus datos, probando diferentes parámetros y luego agregando los resultados para decidir cuál produce la mejor precisión predictiva.
Me gusta este enfoque porque proporciona una metodología robusta para elegir hiperparámetros del modelo, y una vez que ha elegido los hiperparámetros finales, proporciona una estimación validada cruzada de cuán "bueno" es el modelo, utilizando la precisión para los modelos de clasificación y RMSE para modelos de regresión.
Ahora tengo algunos datos de series temporales para los que quiero construir un modelo de regresión, probablemente usando 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 de tiempo, ¿cuál es la mejor manera de construir un modelo de conjunto preciso para el análisis de series de tiempo?
Respuestas:
La técnica de "validación cruzada k-times" clásica "se basa en el hecho de que cada muestra en el conjunto de datos disponible se usa (k-1) veces para entrenar un modelo y 1 vez para probarlo. Dado que es muy importante validar los modelos de series temporales en datos "futuros", este enfoque no contribuirá a la estabilidad del modelo.
Una propiedad importante de muchas series de tiempo (¿la mayoría?) Es la correlación entre los valores adyacentes. Como señaló IrishStat, si utiliza lecturas anteriores como variables independientes de su candidato modelo, esta correlación (o falta de independencia) juega un papel importante y es otra razón por la cual la validación cruzada k-times no es una buena idea.
Una forma de superar este problema es "sobremuestrear" los datos y descorrelacionarlos. Si el proceso de descorrelación es exitoso, usar la validación cruzada en series de tiempo se vuelve menos problemático. Sin embargo, no resolverá el problema de validar el modelo utilizando datos futuros
Aclaraciones
validar el modelo en datos futuros me refiero a construir el modelo, esperar nuevos datos que no estuvieron disponibles durante la construcción del modelo, probar, ajustar, etc., y validarlos en esos nuevos datos.
Al sobremuestrear los datos me refiero a recopilar datos de series de tiempo a una frecuencia mucho más alta de lo que prácticamente se necesita. Por ejemplo: muestrear los precios de las acciones cada 5 segundos, cuando realmente le interesan las modificaciones por hora. 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
fuente
http://robjhyndman.com/researchtips/crossvalidation/ contains a quick tip for cross validation of time series. Regarding using random forest for time series data....not sure although it seems like an odd choice given that the model is fitted using bootstrap samples. There are classic time series methods of course (e.g. ARIMA) that can be used, as can ML techniques like Neural Nets (example example pdf). Perhaps some of the time series experts can comment on how well ML techniques work compared to time series specific algorithms.
fuente
Here is some example code for cross-validating time series models. I expanded on this code in my blog, incorporating the foreach package to speed things up and allowing for a possible xreg term in the cross-validation.
Here's a copy of the code from Rob Hyndman's blog:
fuente
If you have time series data then you might have a "degrees of freedom problem" . For example if you have 4 observations taken at hourly intervals and then decide to use 241 observations at 1minute intervals, you have 241 observations but they are not necessarily independent. When you submit these 241 values/measurements to an analytical package, the package might expect that these are 241 independent values as it proceeds to perform it's particular magic. If you have time series data you might have to upgrade your analytics. I don't know the program you refer to but it is a reasonable guess on my part ( I could be wrong ! ) that it's tests ( F tests / T tests ...etc ) probably don't apply to your problem set.
fuente
I can recomend you 2 interesting papers to read that are online 1.Streamed Learning: One-Pass SVMs, by Piyush Rai, Hal Daum´e III, Suresh Venkatasubramanian 2.Streaming k-means approximation, by Nir Ailon
Hope it clarifies you a little your ideas
fuente