Pregunta: Quiero estar seguro de algo, ¿el uso de la validación cruzada k-fold con series de tiempo es sencillo o hay que prestar especial atención antes de usarlo?
Antecedentes: estoy modelando una serie temporal de 6 años (con cadena semi-markov), con una muestra de datos cada 5 min. Para comparar varios modelos, estoy usando una validación cruzada de 6 veces al separar los datos en 6 años, por lo que mis conjuntos de entrenamiento (para calcular los parámetros) tienen una duración de 5 años, y los conjuntos de prueba tienen una longitud de 1 año. No estoy teniendo en cuenta el orden de tiempo, por lo que mis diferentes conjuntos son:
- pliegue 1: entrenamiento [1 2 3 4 5], prueba [6]
- pliegue 2: entrenamiento [1 2 3 4 6], prueba [5]
- pliegue 3: entrenamiento [1 2 3 5 6], prueba [4]
- pliegue 4: entrenamiento [1 2 4 5 6], prueba [3]
- pliegue 5: entrenamiento [1 3 4 5 6], prueba [2]
- pliegue 6: entrenamiento [2 3 4 5 6], prueba [1].
Estoy haciendo la hipótesis de que cada año son independientes entre sí. ¿Cómo puedo verificar eso? ¿Hay alguna referencia que muestre la aplicabilidad de la validación cruzada k-fold con series de tiempo?
fuente
Respuestas:
Las series de tiempo (u otros datos ordenados intrínsecamente) pueden ser problemáticos para la validación cruzada. Si surge algún patrón en el año 3 y permanece durante los años 4-6, entonces su modelo puede retomarlo, a pesar de que no fue parte de los años 1 y 2.
Un enfoque que a veces tiene más principios para las series de tiempo es el encadenamiento hacia adelante, donde su procedimiento sería algo como esto:
Eso modela con mayor precisión la situación que verá en el momento de la predicción, donde modelará sobre datos pasados y pronosticará sobre datos prospectivos. También le dará una idea de la dependencia de su modelado en el tamaño de los datos.
fuente
El método que uso para validar mi modelo de series temporales es la validación cruzada de forma continua. Comience con un pequeño subconjunto de datos para fines de capacitación, pronostique los puntos de datos posteriores y luego verifique la precisión de los puntos de datos pronosticados. Los mismos puntos de datos pronosticados se incluyen como parte del próximo conjunto de datos de entrenamiento y se pronostican los puntos de datos posteriores.
Para hacer las cosas intuitivas, aquí hay una imagen para lo mismo:
Un código R equivalente sería:
fuente
La forma "canónica" de hacer una validación cruzada de series temporales (al menos como lo describe @Rob Hyndman) es "pasar" por el conjunto de datos.
es decir:
Básicamente, su conjunto de entrenamiento no debe contener información que ocurra después del conjunto de prueba.
fuente
No hay nada de malo en usar bloques de datos "futuros" para la validación cruzada de series temporales en la mayoría de las situaciones. En la mayoría de las situaciones, me refiero a los modelos de datos estacionarios, que son los modelos que usamos habitualmente. Por ejemplo, cuando ajusta un , con a una serie, toma diferencias de la serie y ajusta un modelo para datos estacionarios a los residuos.d > 0 dARIMA(p,d,q) d>0 d
Para que la validación cruzada funcione como una herramienta de selección de modelo, necesita una independencia aproximada entre la capacitación y los datos de la prueba. El problema con los datos de series temporales es que los puntos de datos adyacentes a menudo son altamente dependientes, por lo que la validación cruzada estándar fallará. El remedio para esto es dejar un espacio entre la muestra de prueba y las muestras de entrenamiento, a ambos lados de la muestra de prueba . La razón por la que también debe dejar un espacio libre antes de la muestra de prueba es que la dependencia es simétrica cuando avanza o retrocede en el tiempo (piense en la correlación).
Este enfoque se denomina validación cruzada (dejar fuera, eliminar las observaciones a ambos lados de la muestra de prueba) y se describe en este documento. En su ejemplo, esto se vería así:v hhv v h
Donde h indica que h las observaciones de la muestra de entrenamiento se eliminan en ese lado.
fuente
Como comentó @thebigdog, "Sobre el uso de la validación cruzada para la evaluación de predictores de series de tiempo" por Bergmeir et al. analiza la validación cruzada en el contexto de series temporales estacionarias y determina que el encadenamiento directo (propuesto por otros respondedores) no es útil. Tenga en cuenta que el encadenamiento directo se denomina Evaluación de último bloque en este documento:
" Evaluación de modelos de predicción de series temporales: un estudio empírico sobre métodos de estimación del rendimiento " por Cerqueira et al. está de acuerdo con esta evaluación. Sin embargo, para series de tiempo no estacionarias, recomiendan usar una variación en Hold-Out, llamada Rep-Holdout. En Rep-Holdout,
a
se elige un punto en la serie temporalY
para marcar el comienzo de los datos de prueba. Sea
determina que el punto está dentro de una ventana. Esto se ilustra en la siguiente figura:Este documento mencionado es extenso y prueba exhaustivamente casi todos los otros métodos mencionados en las respuestas a esta pregunta con código disponible públicamente . Esto incluye la afirmación de @Matthias Schmidtblaicher de incluir vacíos antes y después de los datos de prueba. Además, solo he resumido el artículo. ¡La conclusión real del documento implica un árbol de decisión para evaluar modelos de series temporales!
fuente