Modelo de Forecasting de Demanda para Retail

10 de abril de 2025

Acertar cuánto se va a vender de cada producto, en cada tienda y cada día, es uno de los retos más importantes para un negocio *retailer*. Equivocarse en la predicción de la demanda genera dos problemas: comprar de menos provoca "roturas de stock" (pérdida de ventas), y comprar de más genera sobrecostes de almacén y capital inmovilizado.

El objetivo de este proyecto fue construir un modelo avanzado de *forecasting* de ventas usando Machine Learning. Trabajamos con 3 años de datos reales de ventas diarias para 10 productos en 2 tiendas, con el fin de desarrollar un código que generara una predicción fiable de las ventas para los próximos 8 días.

1. Diseño del Proyecto

El primer paso fue definir la estrategia. Dado que los algoritmos de Machine Learning (como LightGBM) no están diseñados nativamente para series temporales, tuvimos que adaptar la metodología. El gran reto fue la "modelización masiva": en lugar de un modelo general, el objetivo era construir y gestionar un modelo específico para cada combinación de tienda y producto, lo que requería una estructura de código más avanzada.

2. Creación del Datamart Analítico

Partimos de tres fuentes de datos: una tabla de calendario (con festivos, día de la semana), una de precios (por producto y semana) y la tabla principal de ventas. Tras unificar estas tablas en un único dataset, realizamos un profundo Análisis Exploratorio de Datos (EDA) donde surgieron los retos clave del proyecto, como la "demanda intermitente" (días con ventas cero) y las jerarquías de productos.

3. Preparación de Datos (Feature Engineering)

Esta fue la fase crucial. Para que un modelo de ML pudiera predecir el tiempo, transformamos el problema creando variables avanzadas. Generamos *lags* (ventas de días pasados), *ventanas móviles* (promedios de ventas) y creamos una marca de "posible rotura de stock" para intentar explicar los días con cero ventas.

4. Modelización Masiva

Con el dataset listo, validamos el proceso: entrenamos y evaluamos un primer modelo (usando la métrica MAE) para una sola combinación de tienda-producto. Una vez validado, escalamos la solución: encapsulamos todo el proceso en una función y creamos un *loop* que la ejecutaba automáticamente para cada combinación, entrenando y guardando un modelo para cada una.

5. Entregable: Código en Producción

El resultado final del proyecto fue un código de producción. Un script preparado para que la empresa lo pueda ejecutar (por ejemplo, cada noche) y obtener de forma automática las predicciones de ventas actualizadas para los próximos 8 días, optimizando así sus decisiones de compra, logística y almacenamiento.

Presentación del Caso