Esta guía le ayudará a saber si Prophet es adecuado o no para su proyecto de previsión, dándole una opinión crítica basada en el objetivo de un proyecto real. Lo hemos probado en 3 dimensiones principales: ingeniería y modelización de características, interpretabilidad y mantenimiento.
Hemos probado Prophet en un proyecto del mundo real, en 3 aspectos principales: ingeniería de características, interpretabilidad y uso en producción y mantenimiento, y he aquí nuestras conclusiones:
Ingeniería de características y modelado:
Interpretabilidad:
Estabilidad de los resultados / Mantenimiento:
Introducción
Recientemente, un artículo señaló que Facebook Profeta funcionaba mal en algunos casos extremos. De hecho, este paquete es tan popular que tiende a ser considerado como LA herramienta a la que acudir para cualquier caso de uso de la previsión. Esto lanzó un debate dentro de la comunidad y incluso su creador reaccionó.
Existe mucha literatura sobre cómo hacer una previsión única con Prophet. Pero faltan comentarios empíricos sobre cómo se comporta en producción, cuando hay que proporcionar previsiones a diario. Hemos probado y comprobado esta herramienta durante 6 meses en un proyecto empresarial real. He aquí algunas conclusiones.
Utilizamos Prophet para prever las llegadas de llamadas en centros de llamadas para una de las mayores empresas de telecomunicaciones de Europa, con el fin de optimizar la calidad del servicio al cliente.
Aplicamos el Marco GLADS para redactar nuestro planteamiento data:
Una limitación importante era la necesidad de interpretabilidad de resultados. De hecho, nuestras predicciones son consumidas por planificadores humanos cuyo objetivo es mantener un SLA (X% de llamadas deben ser contestadas en un periodo determinado) minimizando los costes. Su trabajo consta de 3 misiones:
Principal conductores de llamada difieren en función de las SKU. Por ejemplo, los controladores de asistencia comercial incluyen:
Nuestras series temporales tienen fuertes estacionalidades y siguen los ciclos económicos. No son estacionarias. En este caso, Prophet es una elección adecuada. Optamos por probarlo, así como otros algoritmos ML utilizados frecuentemente para esta tarea.
Ingeniería de características y modelado
Prophet tiene muchas ventajas innegables que son especialmente útiles para un proyecto de previsión orientado a los negocios, y que justifican plenamente su popularidad.
Una de ellas es su facilidad de uso. Sólo unas pocas líneas de código y casi ninguna ingeniería de funciones son necesarios para tener una buena línea de base. Para saber más sobre cómo funciona y cómo utilizarlo, lea este hilo de Twitter de su creador, así como esta excelente entrada de blog (con código).
Características del tiempo, como la tendencia y la estacionalidad se crean de forma nativa, sin las medias móviles, los retardos y otras características complicadas que requieren los modelos basados en árboles de aprendizaje automático (ML).
Sin embargo, puede resultar bastante engorroso realizar el ajuste fino si varios eventos perturban la señal.
Tendencia
Una gran ventaja en comparación con los modelos autorregresivos (por ejemplo, ARIMA) es que Prophet no requiere series temporales estacionarias: se genera un componente de tendencia de forma nativa.
Por estas razones, el Profeta funciona bastante bien para las predicciones a medio plazo (lo probamos en el horizonte M+5), aunque el intervalo de confianza es bastante grande.
La tendencia puede estimarse correctamente sin ningún data externo (como el número de clientes). Esto es bastante potente, porque cuando predice la llegada de llamadas, no sabe cuántos clientes tendrá dentro de 5 meses, por lo que no puede utilizar esta función.
Por ejemplo, este gráfico muestra el número de clientes de Internet de fibra óptica (FIO) a lo largo del tiempo (un mercado en crecimiento para nuestra empresa de telecomunicaciones), comparado con el componente de tendencia aprendido por Prophet sobre el volumen de llamadas. Existe una fuerte correlación (coeficiente de Pearson: 0,988) entre el volumen de llamadas y el número de clientes. Así que el modelo aprende bien la tendencia, y sólo de la propia serie temporal.
Hemos identificado algunos consejos y trucos para hacer de la tendencia un beneficio real en su previsión basada en Profetas.
Tendencia: Vigile sus puntos de cambio
Uno de los puntos fuertes de Prophet es también un punto débil para la estabilidad de los resultados y el rendimiento: El componente de tendencia tiende a explicar la gran mayoría de la predicción — alrededor de 90% para nuestro caso de estudio. Por lo tanto, si la tendencia no está bien estimada, el rendimiento caerá drásticamente y puede perder más de 20 puntos de MAPE por predecir por exceso o por defecto a lo largo del tiempo. Dispone de varios parámetros para ayudar a Prophet a ajustar la tendencia, entre ellos el `changepoint_prior_scale` y el `changepoint_range`.
Encontrar el valor correcto de changepoint_prior_scale es esencial, porque este parámetro establece la flexibilidad de la tendencia. Cuanto más alto sea, más flexible será la tendencia. Nuestra estrategia consiste en buscar en la cuadrícula este parámetro con estos valores (en escala logarítmica) [0.001, 0.01, 0.1, 0.5]. Tener valores relativamente pequeños conducirá generalmente a una mejor generalización.
Tendencia: Saque el máximo partido al data más reciente
Siguiente punto de atención: por defecto, Prophet tiene en cuentasólo el primer 80% de la historia a aproximar la tendencia especificando 25 puntos de cambio potenciales. Comprobamos que aumentar este valor de 80% cambiando el parámetro changepoint_range mejoraba el rendimiento. De hecho, esto también tendrá en cuenta los últimos data, que son más importantes para explicar el nivel de llamadas en nuestro caso. Por ejemplo, en este gráfico puede ver que 2021 data es importante porque tiene una tendencia decreciente. Elegimos tener en cuenta todo el conjunto de entrenamiento excepto los últimos 7 días en lugar de 80%.
Tendencia: Limpie sus valores atípicos
Otra cosa a tener en cuenta es el sensibilidad a los valores atípicos. La documentación oficial recomienda retirarlas: “Prophet es capaz de manejar los valores atípicos del historial, pero sólo ajustándolos con cambios de tendencia”.
Estacionalidades
Componentes de estacionalidad, como la diaria y la anual, se estiman con series de Fourier. Dado que nuestras series temporales tienen fuertes ciclos económicos estacionales, comprobamos que Prophet funciona bastante bien.
Pero cuando profundizamos un poco, descubrimos que la modelización semanal de la estacionalidad es limitada. Nuestra serie temporal tenía unos sábados muy bajos en comparación con el resto de la semana (y ningún valor los domingos). Dedicamos mucho tiempo y tuvimos muchos problemas intentando mejorar nuestras predicciones sobre este día concreto de la semana.
Finalmente tuvimos que utilizar una solución provisional: apilando dos modelos, incluyendo nuestro modelo Profeta y un modelo estadístico calculando predicciones basadas en el peso medio de los días de la semana durante las últimas 6 semanas. Y ello a pesar de haber intentado cambiar todos los parámetros de la estacionalidad semanal de Prophet.
A nuestro entender: En una estacionalidad de 7 días (6 en nuestro caso sin domingos), aumentar el orden de Fourier no es tan útil, porque el intervalo entre 0 y 2pi sólo se divide en unos pocos segmentos (6 ó 7). Y un orden de Fourier bajo significa que no puede ajustarse a valores extremos y cambios rápidos en estacionalidad, como los sábados en el ejemplo anterior.
Algunos otros trucos para afinar las estacionalidades:
Eventos y regresores adicionales
Para acontecimientos y extraregresores así Profeta puede ser útil.
Puede añadir extra-regresores, ya sea continua o categórica, proporcionando otra serie temporal (valores y fechas) al modelo con la función add_regressor método. Los acontecimientos se gestionan como regresores categóricos (el valor es 0 - el acontecimiento no se produce en ese día u hora - o 1 - el acontecimiento se produce).
Añadir nuevos eventos es fácil: sólo tiene que proporcionar a Prophet un dataframe que contenga las fechas y los nombres de los eventos.
Funcionó bastante bien con los días festivos, las vacaciones y otros acontecimientos. Y tiende a dan mejores resultados que los modelos basados en árboles.
Además de eso, Prophet utiliza el programa Python vacaciones para permitirle utilizar únicamente el id del país (EE.UU. o FRA) para añadir días festivos relacionados como característica.
Como ocurre con muchos otros algoritmos de predicción de series temporales, a menudo es difícil saber si un acontecimiento recurrente ya está incluido en la estacionalidad del profeta o si es necesario marcarlo manualmente para ayudar al algoritmo. Un ejemplo sencillo es el periodo de Navidad y Año Nuevo: el mismo periodo, aproximadamente el mismo efecto, todos los años. Uno complicado son las vacaciones francesas de primavera. En Francia, en torno al mes de abril, hay dos semanas de vacaciones escolares con fechas cambiantes de un año a otro, y divididas por zonas geográficas (no toda Francia se va de vacaciones al mismo tiempo).
Aunque la estacionalidad anual es baja durante este periodo, el efecto de un evento de “vacaciones de primavera” es positivo en las predicciones de los volúmenes de llamadas. Y el modelo funciona mejor con este evento. Así que el efecto de este evento es incoherente con otras vacaciones y con la estacionalidad que observamos, pero tiene un efecto en el entrenamiento del modelo y en las predicciones que mejora el rendimiento... ¿Debemos añadirlo o no?
Observamos cuestiones similares con diversos días festivos que se desplazan cada año, y a veces hemos tenido que apilar Prophet con un modelo estadístico para ajustar mejor los efectos de las vacaciones. Sin embargo, no tenemos ninguna solución coherente que ofrecer.
Los cruces de características llevan mucho tiempo y a menudo están sobredimensionados
Como Profeta es un modelo aproximadamente lineal en la forma en que gestiona las funciones adicionales y los eventos, el cruce de funciones no es automático. Esto significa que Prophet no puede inferir que una combinación de valores de diferentes características tendrá un impacto exponencialmente mayor o menor en la predicción, mientras que es algo que los algoritmos basados en árboles y el Deep Learning pueden inferir muy bien.
Ejemplo: supongamos que tiene un impacto en su serie temporal en el día laborable + 1 después de un día festivo (HBD+1). A continuación, proporcionar a Prophet un evento “HBD+1” permitirá ajustarse mejor a este efecto. Pero aquí, el impacto depende en gran medida de si el día HBD+1 es un lunes, un sábado, etc. Y no es lineal ni multiplicativo. Por lo tanto, tendrá que añadir todas las características “HBD+1_monday”, “HBD+1_diario”,…
Al cruzar rasgos, su número crece exponencialmente y le va a costar a ambos tiempo para calcularlos, una pérdida de interpretabilidad y probablemente una caída del rendimiento.si añade demasiadas de estas características.
Interpretabilidad
Una de las principales ventajas de Prophet sobre otros modelos es su interpretabilidad.
La descomposición nativa de la previsión en componentes de tendencia, estacionalidad, eventos y extra-regresores es significativa para los perfiles de baja tecnología.
Profeta es un modelo aditivo : la suma de cada componente es igual a la predicción. La importancia de cada componente se expresa directamente en la unidad de destino(a diferencia de Valores SHAP). Y proporciona una explicabilidad tanto local como global.
En consecuencia, es realmente facilidad para trazar la predicción / el impacto de cada componente en la previsión. Si decide cambiar a un modo multiplicativo, en el que cada componente se expresa como porcentaje de la tendencia, tendrá un poco más de trabajo, pero sigue siendo muy fácil de trazar.
Por desgracia, todos estos componentes sólo proporcionan alrededor de 10% de la predicción, el resto 90% que se prevé en la tendencia... que resulta casi inexplicable. Su trabajo consistirá en intentar explicar la tendencia utilizando regresores externos que no puede utilizar como características para Prophet, como el crecimiento de la base de clientes, las tasas de contacto y los cambios en los comportamientos de los clientes de nuestro caso práctico. Para ello, necesitará disponer de los valores reales asociados a cada una de estas características: de ahí que sólo sea posible analizar su tendencia cuando mire hacia atrás, hacia las predicciones realizadas en el pasado.
Rendimiento y mantenibilidad en producción
Rendimiento
Prophet tiene muy rápidamente un buen rendimiento, en comparación con el tiempo de desarrollo. En otras palabras, ofrece una buena línea de base rápidamente, ya que no tiene que elaborar características de tiempo.
Prophet permite prever series temporales con casi ninguna ingeniería de funciones y un buen nivel de rendimiento, en un tiempo récord.
Entrena rápido: tarda menos de 1 minuto por modelo, con validación cruzada, en un conjunto de data con ~3 años de data en un macbook Air con chip M1 y 8 Go de memoria.
En producción, a medida que llega el nuevo data es necesario volver a ajustar el modelo. Una forma de acelerar el entrenamiento es iniciar en caliente el ajuste, utilizando los parámetros del modelo anterior. También puede utilizar esta función para acelerar el proceso de validación cruzada. Consulte la sección “Actualización de modelos ajustados”.” en la documentación para ir más lejos.
Prophet necesita al menos dos años de data para calcular la estacionalidad anual, pero recomendamos tener al menos 3 años de historial data tener buenas actuaciones.
Alcanzamos un rendimiento de ~15% MAPE tras unas cuantas iteraciones. Sin embargo, afinar los resultados fue todo un reto y fue difícil panificar este techo. Tuvimos que desarrollar algunas correcciones personalizadas en la salida para lograr un MAPE de ~10%.
En nuestro proyecto, Prophet y XGboost presentan métricas de rendimiento similares en los horizontes M+1 y M+2. Sin embargo, los rendimientos en M+3 y M+4 tienden a degradarse más en Prophet en comparación con XGboost. Esto se debe a que la tendencia no se estimó correctamente. Aunque no afecta a las predicciones a corto plazo, las previsiones a largo plazo se ven muy afectadas por la dirección de la tendencia, ya que ésta sigue creciendo o disminuyendo con el tiempo, lo que conduce a una predicción por exceso o por defecto. Utilizar otro enfoque para las previsiones a largo plazo es probablemente más seguro.
Interesante, a veces añadir más data histórico puede ser contraproducente y provocar un descenso de la precisión de la previsión. Prophet no permite dar más peso a las observaciones más recientes, por lo que más data puede conducir a una disminución de la precisión de la previsión.
Aquí el consejo sería realizar experimentos con varias longitudes del histórico data y seleccionar la que dé mejores resultados.
Estabilidad de los resultados
A pesar de algunas ventajas innegables, Prophet no es un modelo plug-and-play. Requiere cierto tiempo para ponerlo a punto y aumentar su rendimiento. Algunos puntos débiles hacen difícil confiar en su estabilidad en producción.
Para evaluar con qué frecuencia tendríamos que volver a entrenar el modelo, comparamos 2 estrategias. Generamos previsiones en diferentes meses y medimos los resultados:
Volver a entrenar el modelo cada mes dio mejores resultados. En conclusión, a pesar de la validación cruzada temporal, los hiperparámetros no eran estables a lo largo del tiempo. Para XGboost no es necesario realizar este reentrenamiento con frecuencia. Sin embargo, estos resultados deben tratarse con cautela, ya que los volúmenes se vieron afectados por la crisis de COVID en el momento en que realizamos esta prueba comparativa. También en este caso nuestra intuición para explicar el resultado fue que la tendencia es difícil de estimar correctamente.
Escalabilidad
Uno de los inconvenientes de este modelo univariante es que necesita un modelo por SKU, en comparación con los enfoques basados en árboles, en los que se puede utilizar el mismo modelo para muchos productos.
Suele dar lugar a mejores actuaciones, como señaló Pierre-Yves Mousset en su proyecto. Sin embargo, tener muchos modelos puede ser un reto de ingeniería y una pesadilla de mantener.
Conclusión
La facilidad de uso de Prophet lo convirtió en un modelo de referencia muy bueno cuando sus series temporales se descomponen fácilmente en componentes temporales simples. Sin embargo, si su señal es ruidosa, afinar el rendimiento del modelo puede ser un engorro.
Gracias a su desglose nativo de la previsión en componentes temporales, las decisiones del modelo son fáciles de interpretar. Sin embargo, no es lo suficientemente preciso como para utilizarlo para medir el impacto de un acontecimiento externo, porque nunca se sabe si el efecto del acontecimiento ya se ha tenido en cuenta en los componentes temporales nativos.
Si su serie temporal sigue algunos ciclos económicos, puede obtener rápidamente un rendimiento muy decente, sin una ingeniería de funciones intensiva. Sin embargo, el componente de tendencia no siempre está bien estimado, y esto puede crear desviaciones significativas en el rendimiento. Por esta razón, este modelo puede requerir un seguimiento cuidadoso e intervenciones humanas frecuentes.
Si desea proporcionar cierta explicabilidad y construir un modelo decente de forma fácil y rápida, Prophet es una opción a considerar. Sin embargo, si le importa la estabilidad y la precisión de las previsiones, considere la posibilidad de utilizar otro tipo de algoritmo, como los modelos basados en árboles, Órbita o DeepAR.

BLOG















