¿Cómo dividir el conjunto de datos para la predicción de series temporales?


22

Tengo datos históricos de ventas de una panadería (diariamente, durante 3 años). Ahora quiero construir un modelo para predecir ventas futuras (usando características como día de la semana, variables climáticas, etc.).

¿Cómo debo dividir el conjunto de datos para ajustar y evaluar los modelos?

  1. ¿Tiene que ser un tren cronológico / validación / división de prueba?
  2. ¿Haría entonces un ajuste de hiperparámetro con el tren y el conjunto de validación?
  3. ¿Es la validación cruzada (anidada) una mala estrategia para un problema de series temporales?


EDITAR

Aquí hay algunos enlaces que encontré después de seguir la URL sugerida por @ ene100:

  • Rob Hyndman describe el "origen del pronóstico continuo" en teoría y en la práctica (con código R)
  • otros términos para el origen del pronóstico continuo son "optimización de avance" ( aquí o aquí ), "horizonte variable" u "origen móvil"
  • parece que estas técnicas no se integrarán en scikit-learn en el futuro cercano, porque "la demanda y la seminalidad de estas técnicas no está clara" (se indica aquí ).

Y esta es otra sugerencia para la validación cruzada de series temporales.

Respuestas:


8

Este enlace del blog de Rob Hyndman tiene información que puede ser útil: http://robjhyndman.com/hyndsight/crossvalidation/

En mi experiencia, dividir datos en conjuntos cronológicos (año 1, año 2, etc.) y verificar la estabilidad de los parámetros a lo largo del tiempo es muy útil para construir algo que sea robusto. Además, si sus datos son estacionales o tienen otra forma obvia de dividirse en grupos (por ejemplo, regiones geográficas), verificar la estabilidad de los parámetros en esos subgrupos también puede ayudar a determinar qué tan robusto será el modelo y si tiene sentido adaptarse modelos separados para categorías separadas de datos.

Creo que las pruebas estadísticas pueden ser útiles, pero el resultado final también debe pasar la "prueba de olor".


3

1) Técnicamente hablando, no necesita realizar pruebas fuera de la muestra si usa AIC y criterios similares porque ayudan a evitar el sobreajuste.

3) No veo cómo puedes hacer el CV estándar porque implica entrenar un modelo de serie temporal con algunos valores faltantes. En su lugar, intente usar una ventana móvil para el entrenamiento y prediga la respuesta en uno o más puntos que siguen a la ventana.


3
AIC en series de tiempo a menudo se basa en un error de pronóstico de un período por delante. No dice mucho sobre el rendimiento dinámico del pronóstico del período n por delante. Por lo tanto, no es suficiente.
Aksakal

¿Podría proporcionar una referencia?
James

1

A menudo abordo los problemas desde una perspectiva bayesiana. En este caso, consideraría usar la sobreimputación como estrategia. Esto significa configurar una probabilidad para sus datos, pero omita algunos de sus resultados. Trate esos valores como faltantes y modele esos resultados faltantes utilizando sus correspondientes covariables. Luego gire a través del cual se omiten los datos. Puede hacer esto dentro de, por ejemplo, un procedimiento CV de 10 veces.

Cuando se implementa dentro de un programa de muestreo, esto significa que en cada paso dibuja un valor candidato de su valor de datos omitido (junto con sus parámetros) y evalúa su probabilidad con respecto a su modelo propuesto. Después de lograr la estacionariedad, tiene valores muestreados contrafactuales dado su modelo que puede usar para evaluar el error de predicción: estas muestras responden a la pregunta "¿cómo se vería mi modelo en ausencia de estos valores?" Tenga en cuenta que estas predicciones también heredarán la incertidumbre de la incertidumbre presente en las estimaciones de coeficientes, por lo que cuando recopile todos sus valores pronosticados para, por ejemplo, el 1 de marzo de 2010, tendrá una distribución de predicciones para esa fecha.

El hecho de que estos valores estén muestreados significa que aún puede usar términos de error que dependen de tener disponible una serie de datos completa (por ejemplo, promedio móvil), ya que tiene un valor de resultado muestreado disponible en cada paso.


1

En tu caso no tienes muchas opciones. Parece que solo tienes una panadería. Por lo tanto, para ejecutar una prueba fuera de la muestra, su única opción es la separación de tiempo, es decir, la muestra de entrenamiento sería desde el principio hasta algún momento reciente, y la retención sería desde ese punto hasta hoy.

yt=F(t)+εtF(t)ys<t


Suena prometedor. ¿Cuál es el subíndice "s" en y_s <= t?
tobip

tyss<t

Creo que mis ventas de panadería dependen más bien de factores exógenos. No creo que sea un modelo de serie temporal estrictamente dinámico como, por ejemplo, los precios de las acciones. En mis datos, el error promedio promedio con un CV habitual de 5 veces es solo ligeramente mayor que un CV de serie temporal de 5 veces que conserva el orden cronológico de los pliegues como se describe aquí (por ejemplo, 30.7 frente a 33.8 para un ExtraTreesRegressor) . ¿No está seguro de si esta es una forma válida de probar empíricamente un modelo dinámico?
tobip

Algo así como ARIMA sería un modelo dinámico. Las ventas suelen ser persistentes, es decir, las ventas de hoy son como las de ayer.
Aksakal

0

Descargo de responsabilidad: El método descrito aquí no se basa en una lectura exhaustiva de la literatura. Es mi mejor intento de improvisar un método CV K-fold para un análisis de series de tiempo multivariadas con ventanas de entrada relativamente cortas (suponiendo que no exista / poca dependencia en períodos de tiempo más largos), donde hubo un problema con la presencia no homogénea de fuentes de datos durante El período de recopilación de datos.

Primero, la serie de observaciones se transforma en una serie de ventanas de historial de observación de longitud ventana_longitud y con el paso 1 entre ventanas (sin zancadas). Entonces, el principio es dividir el conjunto de datos de la ventana en "fragmentos" muchas veces más que la longitud de la ventana (pero mucho más que el número de instancias del modelo), y repartir los fragmentos (como las cartas de juego) como datos de validación para separar las instancias del modelo. Para mantener los modelos más limpios, se excluye una ventana de cuarentena de window_length al comienzo de cada fragmento de todo entrenamiento.

Los modelos están entrenados en todos los fragmentos, excepto en los suyos, y la validación se realiza en sus propios fragmentos. La validación de la colección / conjunto de modelos se realiza sumando el error de validación sobre todos los fragmentos, donde cada fragmento es manejado por su submodelo correspondiente. Las pruebas en datos no vistos se pueden hacer usando un promedio (u otra combinación adecuada) de los resultados de todos los modelos entrenados.

Este método está destinado a reducir la dependencia del sistema (y las fuentes de datos) que son las mismas durante todo el período de recopilación de datos. También se pretende dar a cada parte aproximada de los datos la misma influencia en el modelo. Tenga en cuenta que para no permitir que las ventanas de cuarentena perjudiquen el entrenamiento, es un punto que la longitud del fragmento no se alinea demasiado bien con los períodos que (se espera que aparezcan) en los datos, como (típicamente) ciclos diarios, semanales y anuales.

El modelo de conjunto tal vez pueda manejar mal datos completamente nuevos. (No lo sé todavía)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.