Incursionando en predicción de series de tiempo

  • Artículos
  • Data Science & IA

Introducción

A principios de este semestre, comenzamos un proyecto que buscaba mejorar la proyección de ventas con un método más robusto que el actual. El objetivo era estimar las ventas del canal digital para el año 2023, para los cuatro mercados en los cuales tenía presencia este cliente, planteando desafíos dadas las distintas realidades de cada país y los esfuerzos de coordinación con los cuatro responsables del presupuesto durante el año venidero.

Antes de pasar a la parte técnica/práctica del proyecto quiero hacer un paréntesis. En el tiempo que llevo trabajando, he participado en proyectos de corte más estratégico, principalmente enfocados en ayudar al cliente a gestionar, diseñar y desarrollar iniciativas. Por lo que, antes de entrar a este proyecto, no había tenido la oportunidad de desarrollar algoritmos avanzados de predicción. Sin embargo, me uní a este proyecto dada mi experiencia previa con el cliente y conocimiento del negocio que un nuevo recurso que se uniera en ese momento no hubiera tenido. En este contexto me enfrentaba al gran desafío de incursionar por primera vez en un proyecto de corte más marcadamente técnico. Gracias a la ayuda del tremendo equipo en Brain Food logramos sacarlo adelante y aprendí muchas cosas “blandas” en el camino (escribí sobre eso en un post pasado) y otras cosas técnicas que quiero detallar a continuación.

Disclaimer: este post no busca ser un tutorial de cómo hacer predicciones de serie de tiempo.

Conversando y consultando con distintas personas en Brain Food sobre cuál era la mejor forma de abordar este desafío, determinamos tomar un enfoque top-down, para aprovechar la relación jerárquica existente en los conjuntos de datos. Esto implicó usar series de tiempo (las series de tiempo son conjuntos de datos de observaciones de cierto fenómeno que se encuentran estructurados por una fecha continua), tasas de conversión y reconciliación en base a la jerarquía en la que estaban construidos los datos.

Para predecir series de tiempo, existen una serie de modelos predictivos ad-hoc: SARIMA, ARIMA, Prophet, entre otros. Analizando cada uno, decidimos usar Prophet, por su calce con la naturaleza de la predicción. Prophet es un algoritmo que busca el modelo que mejor se ajusta según la estacionalidad y la tendencia de los datos, y en base a este modelo, predecir el comportamiento de la serie. Este algoritmo tiene mejores resultados en series de tiempo que tienen un fuerte efecto estacional en sus cifras (Fuente: Facebook Prophet).

Imagen 1: Ejemplos de predicciones con distintos sets de data de entrenamiento, fuente: «Forecasting at Scale»

Luego de definir en conjunto con el equipo la metodología para desarrollar las predicciones, llegó la hora de poner manos a la obra.

Entender y preparar datos

Lo primero que hicimos fue “jugar” un rato con los datos para poder entender mejor qué es lo que queríamos predecir. Nos sirvió mucho hacer gráficos históricos para poder visualizar los comportamientos, las tendencias y estacionalidades de cada conjunto de datos. Al contrastar estas cifras con nuestra experiencia en proyectos anteriores, pudimos determinar si los datos hacían sentido o si necesitaban un doble chequeo con la contraparte.

A modo de ejemplo, en el siguiente gráfico podemos ver el tráfico proveniente de Display en el tiempo para el cierto mercado. Vemos que los primeros meses son casi cero, por que recién en junio de 2022 se impulsaron estrategias digitales para incentivar el tráfico en este canal. Sin embargo, desde agosto de ese mismo año, podemos ver como el tráfico comienza a disminuir significativamente. A priori, podríamos asumir una tendencia a la baja a causa del comportamiento de los datos en los últimos meses, o de forma contraria, podríamos pensar que cada cierta cantidad de meses, hay una inversión fuerte en este canal que hace que aumente el tráfico. Ambos escenarios podrían ser predicciones correctas, sin embargo, no podríamos saber cuál es la correcta sin tener conocimientos del contexto, del mercado y del negocio. (Spoiler alert: la predicción final de este tráfico fue dejarla en cero para los siguientes meses, debido a que el mercado decidió dejar de invertir esfuerzos en este canal).

Imagen 2: Gráfico de tráfico de Display versus tiempo para Mercado A

Una vez que ya logramos cierto entendimiento de los datos, empezamos a estructurarlos según el formato de las series de tiempo, es decir, una tabla con dos columnas: una con datos de fechas y otro con el valor de la variable en dicha fecha.

En esta primera etapa, logramos darnos cuenta de varias inconsistencias en los múltiples conjuntos de datos. Identificamos varios problemas, desde gaps de datos entre las fechas hasta inconsistencia en las cifras según las reglas del negocio. En este punto es fundamental ser riguroso en la revisión de la calidad de los datos, para no perder tiempo iterando con el cliente hasta poder tener los datos correctos. A modo de aprendizaje los datos nunca están bien a la primera (la gran mayoría de las veces), por lo que es fundamental planificar tomando en cuenta este problema.

Aplicar el modelo

Prophet se caracteriza por ser un algoritmo de predicción bastante simple e intuitivo de aplicar. Como todo algoritmo de predicción, en Prophet se pueden definir parámetros para describir la serie de tiempo. En éstos se puede definir el efecto de la estacionalidad sobre la tendencia en la predicción: si esta debe ser de carácter aditiva (que el efecto se suma a la tendencia) o multiplicativa (que el efecto se multiplica creando un crecimiento constante). Se puede describir la tasa del crecimiento de la serie de tiempo, que puede ser lineal, logística o plana. También es posible especificar si el algoritmo debe ajustar la estacionalidad en base a una granularidad anual, semanal o diaria. En base a lo anterior, el modelo es capaz de identificar por si solo la tendencia, la estacionalidad por semana y por año, tal como lo muestra la siguiente imagen.

Imagen 3: Descomposición de serie de tiempo, fuente: «Forecasting at Scale»

Más allá de caracterizar la serie de tiempo, en Prophet se pueden moldear efectos exógenos que pueden estar afectando los datos. Estos fenómenos pueden ser días especiales (como Black Friday, Navidad, Copas Mundiales), estaciones climáticas, avances tecnológicos (por ejemplo, cómo cambios en la página web pueden hacer que éste incentive las compras), cambios en el contexto político del país, entre otros. Se pueden especificar cada uno de estos fenómenos en el algoritmo, e incluso agregar más de uno y la combinación de estos, generando fenómenos multicausales (por ejemplo, cómo una Copa Mundial y un Black Friday pueden aumentar las compras de pelotas de futbol). Si desean profundizar aún más en todos los parámetros que tiene Prophet, los invito a revisar la documentación en la siguiente página web: documentación.

Estudiando todas las posibilidades que entrega el algoritmo, definimos en conjunto con el equipo una metodología de 4 etapas para aplicarlo en las series de tiempo. Al crear esta metodología iterativa logramos obtener mejores resultados y ser más rigurosos en el desarrollo de cada modelo. En cada uno de estos pasos, corríamos el algoritmo, visualizábamos el resultado de la predicción y en base a definiciones del negocio, determinábamos la “calidad” de la predicción. Si los resultados no eran lo esperado, seguíamos al siguiente paso y así, hasta obtener una predicción confiable y precisa. Los 4 pasos fueron los siguientes:

  1. Utilizar toda la data histórica
  2. Eliminar datos que se visualicen como outliers, bajo nuestro entendimiento del negocio
  3. Aplicar una variable exógena para modelar mejor el comportamiento de los datos a lo largo del tiempo
  4. Aplicar un algoritmo de reconciliación para que la predicción se ajuste a la relación jerárquica bajo la cual estaban construidos los datos

Entender la predicción

Al finalizar estos 4 pasos, terminamos con 4 resultados de predicción para cada serie de tiempo. Estos resultados fueron presentados al cliente para definir en conjunto cuál era la predicción más ajustada y precisa. Iteramos las predicciones con el input de los líderes de cada mercado ya que son ellos los que tienen el know-how y expertise de cómo se van a comportar las cifras (por lo menos a un alto nivel). De esta forma, logramos entender la predicción en base a una mirada estratégica, más allá de calcular el porcentaje de error de ésta.

A modo de resumen, quería dejar tres puntos que creo que son importantes para tomar en cuenta cuando se hace una proyección mediante series de tiempo:

  1. Calidad de los datos: los datos casi nunca vienen limpios a la primera, hay una iteración constante con la contraparte de revisión de los datos. Es muy importante formalizar el proceso de revisión de los datos, apenas lleguen los datos, revisarlos detenidamente y si hay inconsistencias o datos incorrectos, agendar una revisión con el cliente, para determinar dónde y por qué hay errores. En el peor escenario, el cliente va a tener que reenviar los datos (esperamos que ahora limpios) lo cual va a generar atrasos en la planificación del proyecto.
  2. Análisis previo: hay que estudiar los datos detenidamente, hacer un gráfico no es suficiente. Es bueno darles un significado a los números: qué implica que en ciertas fechas los datos cambien de sobremanera, cuáles son los rangos en los que se mueven idealmente los datos, entre otros. Con esto, se vuelve fundamental tener revisiones o reuniones constantemente con el cliente, para poder adquirir ese expertise del negocio que el cliente tiene.
  3. Unión con el negocio: tanto para entender los datos históricos como para hacer la predicción de las ventas, es importante unir estos datos con la visión del negocio. De esta forma, podemos entender cambios de tendencia, de estacionalidad, explicar fenómenos exógenos que pueden afectar las ventas, entre otros.