Estoy trabajando en un pequeño proyecto en el que intentamos predecir los precios de los productos básicos (petróleo, aluminio, estaño, etc.) para los próximos 6 meses. Tengo 12 variables para predecir y tengo datos de abril de 2008 a mayo de 2013.
¿Cómo debo ir sobre predicción? He hecho lo siguiente:
- Datos importados como un conjunto de datos de Timeseries
- La estacionalidad de todas las variables tiende a variar con la tendencia, por lo que voy al modelo multiplicativo.
- Tomé el registro de la variable para convertirla en modelo aditivo
- Para cada variable descompuesta los datos usando STL
Estoy planeando utilizar el suavizado exponencial de Holt Winters, ARIMA y la red neuronal para pronosticar. Dividí los datos como entrenamiento y pruebas (80, 20). Planeando elegir el modelo con menos MAE, MPE, MAPE y MASE.
¿Lo estoy haciendo bien?
También una pregunta que tuve fue, antes de pasar a ARIMA o red neuronal, ¿debo suavizar los datos? En caso afirmativo, ¿usando qué? Los datos muestran tanto la estacionalidad como la tendencia.
EDITAR:
Adjuntando el diagrama y los datos de la serie
Year <- c(2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009, 2009,
2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2010,
2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
2012, 2012, 2013, 2013)
Month <- c(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2)
Coil <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000,
29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500,
33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500,
33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700,
40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500,
40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300,
39300, 39300, 39300, 39300, 39800)
coil <- data.frame(Year = Year, Month = Month, Coil = Coil)
EDIT 2: Una pregunta, ¿podría decirme si mis datos tienen alguna estacionalidad o tendencia? Y también, por favor, dame algunos consejos sobre cómo identificarlos.
fuente
Respuestas:
Debe usar el paquete de pronóstico , que admite todos estos modelos (y más) y hace que ajustarlos sea muy fácil:
Aconsejaría no suavizar los datos antes de ajustar su modelo. Su modelo intentará inherentemente suavizar los datos, por lo que el preajuste solo complica las cosas.
Edición basada en nuevos datos:
En realidad, parece que Arima es uno de los peores modelos que podría elegir para este conjunto de entrenamiento y prueba.
Guarde sus datos en una llamada de archivo
coil.csv
, los cargué en R y los dividí en un conjunto de entrenamiento y prueba:A continuación, me ajusto a un montón de modelos de series de tiempo: arima, suavizado exponencial, red neuronal, tbats, murciélagos, descomposición estacional y series de tiempo estructurales:
Luego hice algunos pronósticos y los comparé con el conjunto de prueba. Incluí un pronóstico ingenuo que siempre predice una línea plana y horizontal:
Como puede ver, el modelo arima se equivoca en la tendencia, pero me gusta el aspecto del "Modelo estructural básico"
Finalmente, medí la precisión de cada modelo en el conjunto de prueba:
Las métricas utilizadas se describen en Hyndman, RJ y Athanasopoulos, G. (2014) "Predicción: principios y práctica" , quienes también son los autores del paquete de predicción. Le recomiendo que lea su texto: está disponible de forma gratuita en línea. La serie de tiempo estructural es el mejor modelo por varias métricas, incluida MASE, que es la métrica que tiendo a preferir para la selección del modelo.
Una última pregunta es: ¿tuvo suerte el modelo estructural en este conjunto de pruebas? Una forma de evaluar esto es mirar los errores del conjunto de entrenamiento. Los errores del conjunto de entrenamiento son menos confiables que los errores del conjunto de prueba (porque pueden ser demasiado ajustados), pero en este caso el modelo estructural sigue siendo el primero:
(Tenga en cuenta que la red neuronal se sobreajusta, con un rendimiento excelente en el conjunto de entrenamiento y mal en el conjunto de prueba)
Finalmente, sería una buena idea hacer una validación cruzada de todos estos modelos, tal vez entrenando en 2008-2009 / probando en 2010, entrenando en 2008-2010 / probando en 2011, entrenando en 2008-2011 / probando en 2012, entrenando en 2008-2012 / pruebas en 2013, y promediando errores en todos estos períodos de tiempo. Si deseas seguir esa ruta, tengo un paquete parcialmente completo para la validación cruzada de modelos de series temporales en github que me encantaría que pruebe y me envíe comentarios / solicitudes de extracción sobre:
Edición 2: ¡Veamos si recuerdo cómo usar mi propio paquete!
En primer lugar, instale y cargue el paquete desde github (ver arriba). Luego, realice una validación cruzada de algunos modelos (utilizando el conjunto de datos completo):
(Tenga en cuenta que reduje la flexibilidad del modelo de red neuronal, para tratar de ayudar a evitar que se ajuste demasiado)
Una vez que hayamos ajustado los modelos, podemos compararlos por MAPE (cv.ts aún no admite MASE):
Ay. Parece que nuestro pronóstico estructural tuvo suerte. A largo plazo, el pronóstico ingenuo hace los mejores pronósticos, promediados en un horizonte de 12 meses (el modelo arima sigue siendo uno de los peores modelos). Comparemos los modelos en cada uno de los 12 horizontes de pronóstico y veamos si alguno de ellos supera al modelo ingenuo:
De manera reveladora, el modelo de suavizado exponencial siempre elige el modelo ingenuo (la línea naranja y la línea azul se superponen al 100%). En otras palabras, el pronóstico ingenuo de "los precios de la bobina del próximo mes será el mismo que los precios de la bobina de este mes" es más preciso (en casi todos los horizontes de pronóstico) que 7 modelos de series temporales extremadamente sofisticados. A menos que tenga alguna información secreta que el mercado de bobinas aún no conoce, superar el ingenuo pronóstico del precio de la bobina será extremadamente difícil .
Nunca es la respuesta que alguien quiere escuchar, pero si su objetivo es la precisión del pronóstico, debe usar el modelo más preciso. Usa el modelo ingenuo.
fuente
El enfoque que ha tomado es razonable. Si eres nuevo en el pronóstico, te recomendaría los siguientes libros:
El primer libro es un clásico que recomiendo encarecidamente. El segundo libro es un libro de código abierto que puede consultar para conocer los métodos de pronóstico y cómo se aplica utilizando el pronóstico del
R
paquete de software de código abierto . Ambos libros proporcionan buenos antecedentes sobre los métodos que he usado. Si se toma en serio la predicción, entonces recomendaría Principios de predicción de Armstrong, que es una recopilación de una enorme cantidad de investigación en predicción que los profesionales pueden encontrar muy útil.Al llegar a su ejemplo específico en la bobina, me recuerda un concepto de capacidad de predicción que la mayoría de los libros de texto a menudo ignoran. Algunas series, como su serie, simplemente no se pueden pronosticar porque es un patrón menos, ya que no exhibe tendencias o patrones estacionales o cualquier variación sistemática. En ese caso, clasificaría una serie como menos predecible. Antes de aventurarse en los métodos de extrapolación, me gustaría ver los datos y hacer la pregunta, es mi serie predecibles? En este ejemplo específico, una simple extrapolación como paseo aleatorio pronóstico que utiliza el último valor de la previsión se ha encontrado para ser más preciso .
También un comentario adicional sobre la red neuronal: se sabe que las redes neuronales fallan en las competiciones empíricas . Probaría métodos estadísticos tradicionales para series de tiempo antes de intentar usar redes neuronales para tareas de pronóstico de series de tiempo.
Intenté modelar sus datos
R's forecast package
, espero que los comentarios se expliquen por sí mismos.Usando MAE en los datos retenidos, elegiría ARIMA para el pronóstico a corto plazo (1 - 12 meses). a largo plazo, confiaría en el pronóstico de caminata aleatoria. Tenga en cuenta que ARIMA eligió un modelo de caminata aleatoria con deriva (0,1,0) + deriva que tiende a ser mucho más precisa que el modelo de caminata aleatoria pura en este tipo de problemas específicamente a corto plazo. Ver abajo la tabla. Esto se basa en la función de precisión como se muestra en el código anterior.
Respuestas específicas a sus preguntas específicas: También una pregunta que tuve fue, antes de pasar a ARIMA o red neuronal, ¿debo suavizar los datos? En caso afirmativo, ¿usando qué?
Los datos muestran tanto la estacionalidad como la tendencia.
Consejos prácticos para mejorar la precisión:
Combine una variedad de métodos de pronóstico: - Puede intentar usar métodos que no sean de extrapolación, como el pronóstico por analogía , el pronóstico crítico u otras técnicas, y combinarlos con sus métodos estadísticos para proporcionar predicciones precisas. Vea este artículo para conocer los beneficios de combinar. Intenté combinar los 5 métodos anteriores, pero la predicción no fue precisa como métodos individuales, una posible razón es que los pronósticos individuales son similares. Usted cosecha los beneficios de combinar pronósticos cuando combina diversos métodos, como pronósticos estadísticos y críticos.
Detectar y comprender valores atípicos: - Los datos del mundo real están llenos de valores atípicos. Identificar y tratar adecuadamente los valores atípicos en series de tiempo. Recomiendo leer esta publicación . Al mirar los datos de su bobina, ¿la caída anterior a 2009 es un valor atípico?
Editar
Los datos parecen estar siguiendo algún tipo de tendencias macroeconómicas. Mi conjetura es que la tendencia a la baja vista antes de 2009 sigue a la caída de la economía vista entre 2008 y 2009 y comienza a recuperarse después de 2009. Si este es el caso, entonces evitaría usar métodos de extrapolación y en su lugar confiaría en una teoría sólida sobre cómo Estas tendencias económicas se comportan como la referenciada por @GraemeWalsh.
Espero que esto ayude
fuente