Saltar al contenido

Previsión de la serie de tiempo con el profeta en Python

26 de agosto de 2020

El pronóstico de las series cronológicas puede ser difícil, ya que hay muchos métodos diferentes que se pueden utilizar y muchos hiperparámetros diferentes para cada método.

La biblioteca del Profeta es una biblioteca de código abierto diseñada para hacer pronósticos de conjuntos de datos de series temporales univariadas. Es fácil de usar y está diseñada para encontrar automáticamente un buen conjunto de hiperparámetros para el modelo en un esfuerzo por hacer pronósticos hábiles para datos con tendencias y estructura estacional por defecto.

En este tutorial, descubrirá cómo utilizar la biblioteca de Facebook Profeta para la previsión de series temporales.

Después de completar este tutorial, lo sabrás:

  • Prophet es una biblioteca de código abierto desarrollada por Facebook y diseñada para el pronóstico automático de datos de series de tiempo univariadas.
  • Cómo encajar los modelos de Prophet y usarlos para hacer pronósticos dentro y fuera de la muestra.
  • Cómo evaluar un modelo de Profeta en un conjunto de datos de retención.

Empecemos.

Previsión de la serie de tiempo con el profeta en Python

Previsión de la serie de tiempo con el profeta en Python
Foto de Rinaldo Wurglitsch, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en tres partes; son:

  1. Biblioteca de Previsión de Profeta
  2. Conjunto de datos de ventas de coches
    1. Cargar y resumir el conjunto de datos
    2. Conjunto de datos de carga y de parcela
  3. Previsión de ventas de coches con Prophet
    1. Modelo de Profeta en forma
    2. Haga un pronóstico en la muestra
    3. Haga un pronóstico fuera de la muestra
    4. Modelo de previsión de evaluación manual

Biblioteca de Previsión de Profeta

Profeta, o «Profeta de Facebookes una biblioteca de código abierto para el pronóstico de series temporales univariadas (una variable) desarrollada por Facebook.

Prophet implementa lo que ellos llaman un modelo aditivo de predicción de series de tiempo, y la implementación apoya las tendencias, la estacionalidad y los días festivos.

Implementa un procedimiento para pronosticar datos de series temporales basado en un modelo aditivo en el que las tendencias no lineales se ajustan a la estacionalidad anual, semanal y diaria, además de los efectos de las vacaciones

– Paquete ‘profeta’, 2019.

Está diseñado para ser fácil y completamente automático, por ejemplo, apuntarlo a una serie temporal y obtener un pronóstico. Como tal, está destinado a uso interno de la empresa, como la previsión de ventas, capacidad, etc.

Para una gran visión general de Prophet y sus capacidades, ver el post:

La biblioteca proporciona dos interfaces, incluyendo R y Python. Nos centraremos en la interfaz de Python en este tutorial.

El primer paso es instalar la biblioteca del Profeta usando Pip, de la siguiente manera:

A continuación, podemos confirmar que la biblioteca se instaló correctamente.

Para ello, podemos importar la biblioteca e imprimir el número de versión en Python. El ejemplo completo se muestra a continuación.

Ejecutando el ejemplo se imprime la versión instalada de Prophet.

Deberías tener la misma versión o una más alta.

Ahora que tenemos Prophet instalado, seleccionemos un conjunto de datos que podamos usar para explorar usando la biblioteca.

Conjunto de datos de ventas de coches

Usaremos el conjunto de datos mensuales de ventas de coches.

Se trata de un conjunto de datos estándar de series temporales univariadas que contiene tanto una tendencia como una estacionalidad. El conjunto de datos tiene 108 meses de datos y un pronóstico de persistencia ingenuo puede lograr un error absoluto medio de alrededor de 3.235 ventas, proporcionando un límite de error inferior.

No hay necesidad de descargar el conjunto de datos ya que lo descargaremos automáticamente como parte de cada ejemplo.

Cargar y resumir el conjunto de datos

Primero, carguemos y resumamos el conjunto de datos.

Prophet requiere que los datos estén en los DataFrames de Pandas. Por lo tanto, cargaremos y resumiremos los datos usando Pandas.

Podemos cargar los datos directamente desde la URL llamando a la función de Pandas read_csv(), luego resumir la forma (número de filas y columnas) de los datos y ver las primeras filas de datos.

El ejemplo completo figura a continuación.

En el ejemplo se informa primero del número de filas y columnas y luego se enumeran las cinco primeras filas de datos.

Podemos ver que, como esperábamos, hay 108 meses de datos y dos columnas. La primera columna es la fecha y la segunda es el número de ventas.

Obsérvese que la primera columna de la salida es un índice de filas y no forma parte del conjunto de datos, sino que es una útil herramienta que Pandas utiliza para ordenar las filas.

Conjunto de datos de carga y de parcela

Un conjunto de datos de series temporales no tiene sentido para nosotros hasta que lo trazamos.

Trazar una serie temporal nos ayuda a ver si hay una tendencia, un ciclo estacional, valores atípicos y más. Nos da una idea de los datos.

Podemos trazar los datos fácilmente en Pandas llamando al plot() en el DataFrame.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo se crea una trama de la serie de tiempo.

Podemos ver claramente la tendencia de las ventas a lo largo del tiempo y un patrón estacional mensual de las ventas. Estos son patrones que esperamos que el modelo de pronóstico tenga en cuenta.

Parcela de la línea de datos de ventas de coches

Parcela de la línea de datos de ventas de coches

Ahora que estamos familiarizados con el conjunto de datos, exploremos cómo podemos usar la biblioteca del Profeta para hacer pronósticos.

Previsión de ventas de coches con Prophet

En esta sección, exploraremos el uso del Profeta para pronosticar el conjunto de datos de las ventas de coches.

Empecemos por ajustar un modelo en el conjunto de datos

Recomendado:  ¿Qué hace que algunos tengan más miedo al cambio que otros?

Modelo de Profeta en forma

Para usar a Prophet para hacer pronósticos, primero, un Profeta. se define y configura el objeto, luego se ajusta al conjunto de datos llamando al fit() y pasar los datos.

El Profeta. El objeto toma argumentos para configurar el tipo de modelo que desea, como el tipo de crecimiento, el tipo de estacionalidad, y más. Por defecto, el modelo trabajará duro para calcular casi todo automáticamente.

El fit() La función toma una DataFrame de datos de series de tiempo. El DataFrame debe tener un formato específico. La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre de »La primera columna debe tener el nombre deds…y contienen las fechas y horas. La segunda columna debe tener el nombrey…y contienen las observaciones.

Esto significa que cambiamos los nombres de las columnas en el conjunto de datos. También requiere que la primera columna se convierta en objetos de fecha y hora, si no lo son ya (por ejemplo, esto puede ser bajado como parte de la carga del conjunto de datos con los argumentos correctos para read_csv).

Por ejemplo, podemos modificar nuestro conjunto de datos de ventas de coches cargados para tener esta estructura esperada, de la siguiente manera:

El ejemplo completo de la adaptación de un modelo de Profeta en el conjunto de datos de ventas de coches se enumera a continuación.

Ejecutando el ejemplo se carga el conjunto de datos, se prepara el DataFrame en el formato esperado y se ajusta a un modelo de Profeta.

De forma predeterminada, la biblioteca proporciona una gran cantidad de salida verbosa durante el proceso de ajuste. Creo que es una mala idea en general ya que entrena a los desarrolladores para ignorar la salida.

No obstante, el resultado resume lo que ocurrió durante el proceso de ajuste del modelo, específicamente los procesos de optimización que se llevaron a cabo.

No reproduciré esta salida en las secciones siguientes cuando encajemos el modelo.

A continuación, hagamos un pronóstico.

Haga un pronóstico en la muestra

Puede ser útil hacer un pronóstico sobre los datos históricos.

Es decir, podemos hacer un pronóstico sobre los datos utilizados como entrada para entrenar el modelo. Idealmente, el modelo ha visto los datos antes y haría una predicción perfecta.

Sin embargo, no es así, ya que el modelo trata de generalizar en todos los casos en los datos.

Esto se llama hacer un pronóstico en la muestra (en la muestra del juego de entrenamiento) y revisar los resultados puede dar una idea de lo bueno que es el modelo. Es decir, lo bien que aprendió los datos de entrenamiento.

Se hace un pronóstico llamando al predecir() y pasar una función DataFrame que contiene una columna llamada ‘dsy filas con fechas y horas para todos los intervalos a predecir.

Hay muchas maneras de crear esto…PrevisiónDataFrame. En este caso, haremos un bucle sobre un año de fechas, por ejemplo, los últimos 12 meses en el conjunto de datos, y crearemos una cadena para cada mes. Luego convertiremos la lista de fechas en un DataFrame y convertir los valores de la cadena en objetos de fecha y hora.

Este DataFrame puede entonces proporcionarse a la predecir() para calcular un pronóstico.

El resultado de la función predict() es una DataFrame que contiene muchas columnas. Tal vez las columnas más importantes son la fecha y la hora de la previsión (‘ds«), el valor pronosticado (‘yhaty los límites inferior y superior del valor predicho (‘yhat_lowery…yhat_upper…que proporcionan la incertidumbre del pronóstico.

Por ejemplo, podemos imprimir las primeras predicciones de la siguiente manera:

Prophet también proporciona una herramienta incorporada para visualizar la predicción en el contexto del conjunto de datos de entrenamiento.

Esto puede lograrse llamando al plot() función en el modelo y pasándole un resultado DataFrame. Creará un gráfico del conjunto de datos de entrenamiento y superpondrá la predicción con los límites superior e inferior de las fechas de pronóstico.

A continuación se presenta un ejemplo completo de cómo hacer una previsión dentro de la muestra.

Ejecutando el ejemplo se pronostican los últimos 12 meses del conjunto de datos.

Los primeros cinco meses de la predicción se reportan y podemos ver que los valores no son muy diferentes de los valores reales de venta en el conjunto de datos.

A continuación, se crea una trama. Podemos ver que los datos de entrenamiento se representan como puntos negros y el pronóstico es una línea azul con límites superiores e inferiores en un área sombreada en azul.

Podemos ver que los 12 meses pronosticados coinciden con las observaciones reales, especialmente cuando se tienen en cuenta los límites.

Gráfica de series de tiempo y pronóstico en la muestra con el profeta

Gráfica de series de tiempo y pronóstico en la muestra con el profeta

Haga un pronóstico fuera de la muestra

En la práctica, realmente queremos un modelo de pronóstico para hacer una predicción más allá de los datos de entrenamiento.

Esto se llama un pronóstico fuera de muestra.

Podemos lograrlo de la misma manera que una previsión dentro de la muestra y simplemente especificar un período de previsión diferente.

En este caso, un período más allá del final del conjunto de datos de entrenamiento, a partir de 1969-01.

A continuación se muestra el ejemplo completo.

Recomendado:  El Fondo Patrimonial de Abu Dhabi reúne al equipo de Japón en busca de nuevas áreas de crecimiento

Ejecutando el ejemplo se hace un pronóstico fuera de muestra para los datos de ventas de automóviles.

Las primeras cinco filas del pronóstico están impresas, aunque es difícil tener una idea de si son sensatas o no.

Se crea una trama para ayudarnos a evaluar la predicción en el contexto de los datos de entrenamiento.

El nuevo pronóstico de un año parece sensato, al menos a simple vista.

Gráfica de series de tiempo y pronóstico fuera de muestra con el profeta

Gráfica de series de tiempo y pronóstico fuera de muestra con el profeta

Modelo de previsión de evaluación manual

Es fundamental desarrollar una estimación objetiva del rendimiento de un modelo de previsión.

Esto puede lograrse reteniendo algunos datos del modelo, como los últimos 12 meses. Luego, ajustando el modelo a la primera porción de los datos, usándolo para hacer predicciones sobre la porción retenida, y calculando una medida de error, como el error absoluto medio a través de las predicciones. Por ejemplo, una predicción simulada fuera de la muestra.

La puntuación da una estimación de lo bien que podríamos esperar que el modelo funcionara en promedio al hacer un pronóstico fuera de la muestra.

Podemos hacer esto con los datos de las muestras creando un nuevo DataFrame para el entrenamiento con los últimos 12 meses quitados.

Entonces se puede hacer un pronóstico sobre los últimos 12 meses de fecha-hora.

Podemos entonces recuperar los valores de pronóstico y los valores esperados del conjunto de datos original y calcular una métrica de error absoluto medio utilizando la biblioteca scikit-learn.

También puede ser útil trazar los valores esperados frente a los pronosticados para ver cómo la predicción fuera de la muestra coincide con los valores conocidos.

Relacionando todo esto, el siguiente ejemplo demuestra cómo evaluar un modelo de Profeta en un conjunto de datos de retención.

Ejecutando el ejemplo primero se reportan las últimas filas del conjunto de datos de entrenamiento.

Confirma que el entrenamiento termina en el último mes de 1967 y que 1968 se utilizará como conjunto de datos de retención.

A continuación, se calcula un error absoluto medio para el período de previsión.

En este caso podemos ver que el error es de aproximadamente 1.336 ventas, lo que es mucho más bajo (mejor) que un modelo de persistencia ingenuo que logra un error de 3.235 ventas en el mismo período.

Finalmente, se crea un gráfico que compara los valores reales con los previstos. En este caso, podemos ver que el pronóstico es un buen ajuste. El modelo tiene una habilidad y un pronóstico que parece sensato.

Parcela de valores reales vs. Predichos para los últimos 12 meses de ventas de coches

Parcela de valores reales vs. Predichos para los últimos 12 meses de ventas de coches

La biblioteca del Profeta también proporciona herramientas para evaluar automáticamente los modelos y trazar los resultados, aunque esas herramientas no parecen funcionar bien con datos de más de un día de resolución.