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?
- ¿Tiene que ser un tren cronológico / validación / división de prueba?
- ¿Haría entonces un ajuste de hiperparámetro con el tren y el conjunto de validación?
- ¿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.
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.
fuente
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.
fuente
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)
fuente