RM
← Volver a casos

Machine Learning / Inventory Intelligence

DemandOS

Sistema de machine learning para previsión de demanda, riesgo de stockout y recomendaciones internas de reposición.

DemandOS convierte datos operativos sintéticos —productos, tiendas, pedidos, inventario, promociones y proveedores— en features leakage-safe, forecasts, métricas de modelo, riesgos de stockout y recomendaciones de reposición. Está desplegado como prototipo público en Vercel con Neon Postgres y no ejecuta compras reales ni acciones externas.

Datos sintéticos operativosForecasting MLNeon + VercelSin acciones externas
Machine LearningForecastingInventory IntelligenceData ProductFastAPINext.jsscikit-learnNeon PostgresVercelSynthetic DataMonitoringScenario Planning
Overview operativo de DemandOS con pipeline, riesgo y recomendaciones
Demo desplegada con datos sintéticos y acciones externas desactivadas.

Project Snapshot

Un prototipo público de ML y producto de datos

Tipo
Machine learning / data product prototype
Rol
Arquitectura de producto, backend, frontend, workflow ML, despliegue y evaluación
Stack
Python, FastAPI, pandas, scikit-learn, SQLAlchemy, Alembic, Next.js, TypeScript, Neon Postgres, Vercel
Estado
Prototipo público de portfolio
Datos
Datos operativos sintéticos de comercio
Seguridad
Sin compras, comunicación con proveedores ni conectores live
Año
2026

Problema

De datos operativos a decisiones de inventario

Retail y ecommerce dependen de registros fragmentados: catálogos, tiendas, pedidos, snapshots de inventario, proveedores, promociones y órdenes de compra. Un dashboard convencional explica qué ocurrió, pero rara vez conecta esos datos con forecasts, calidad de modelo, riesgo de stockout y decisiones de reposición.

¿Puede un workflow creíble de ML convertir registros de comercio en orientación de inventario sin usar datos reales de clientes ni fingir outputs de dashboard?

Objetivo de producto

Una herramienta interna de ML, no solo un dashboard

El objetivo fue construir un ciclo funcional que empezara en datos operativos brutos, evaluara modelos y terminara en orientación revisable, manteniendo el sistema seguro y no autónomo.

+

Qué hace

  • Genera datos sintéticos operativos.
  • Limpia, valida y agrega datos.
  • Construye features leakage-safe.
  • Entrena y evalúa modelos de forecasting.
  • Calcula riesgo de stockout.
  • Propone recomendaciones internas de reposición.
  • Permite escenarios simulados.
  • Expone monitoring y health checks.
  • Prepara conectores Shopify/WooCommerce como stubs desactivados.

Qué no hace

  • No usa datos reales de clientes.
  • No crea órdenes de compra reales.
  • No contacta proveedores.
  • No ejecuta conectores live.
  • No automatiza compras.
  • No promete precisión productiva.
  • No siembra forecasts, riesgos o recomendaciones precalculadas.

Decisión de arquitectura

Workflow determinista de ML, no agente autónomo

Los modelos se usan para forecasting y diagnóstico. Ingesta, validación, routing, contratos de esquema, puertas de seguridad y control de efectos permanecen deterministas. Los pasos ya son conocidos: aquí la fiabilidad importa más que la autonomía.

  1. 01Raw commerce data
  2. 02Cleaning / validation
  3. 03Canonical daily tables
  4. 04Leakage-safe features
  5. 05Forecasting models
  6. 06Model metrics
  7. 07Stockout risk
  8. 08Reorder guidance
  9. 09Dashboard

Cada capa derivada se calcula dentro del pipeline y persiste antes de que la siguiente etapa la consuma.

Data pipeline

La demo empieza con datos brutos, no con métricas inventadas

DemandOS no siembra KPIs finales, forecasts precalculados, scores de riesgo ni recomendaciones. Parte de entidades operativas sintéticas y calcula todas las capas posteriores.

SuppliersProductsStoresOrdersInventory snapshotsPromotionsPurchase orders
10productos
2tiendas
1.677pedidos
1.156snapshots de inventario
1.154filas de features
946forecasts baseline
560forecasts de planificación
20filas de riesgo
10recomendaciones

Conteos validados en una ejecución demo small-mode; pueden cambiar después de reseedear.

Forecasting y capa ML

Forecasting como capa central del producto

Los baselines ofrecen un punto de comparación transparente. El modelo global usa scikit-learn y features de demanda, inventario, calendario, promoción, precio y ciclo de vida. Sus outputs alimentan riesgo de stockout y orientación de reposición.

Baseline

Comparación antes de complejidad

Seasonal naive y medias móviles establecen referencias legibles. El modelo ML no está obligado a ganar.

ML

HistGradientBoostingRegressor

Modelo global sobre series producto/tienda, entrenado con una matriz de features que excluye información futura.

Evaluación

Backtesting honesto

Split temporal, predicciones no negativas, métricas persistidas y bandas p10/p90 documentadas como heurísticas.

WAPE

Error total ponderado como porcentaje de la demanda real agregada.

MAE

Error absoluto medio entre demanda observada y forecast.

RMSE

Métrica que penaliza con más fuerza los fallos grandes.

Bias

Indica si el modelo tiende a sobreestimar o infraestimar demanda.

En este prototipo, WAPE funciona como señal direccional de calidad. Un WAPE alto no se oculta: la interfaz explica que el forecast es útil como señal demo de planificación, no como modelo calibrado para producción.

ML Insights

Una capa de interpretación para entender el modelo

Sprint 15 añadió resumen de data science, diagnósticos, comparación de modelos, grupos de señales e interpretación de impacto de negocio. La página ML Insights organiza estas lecturas sin mutar la base de datos.

/api/data-science/summary/api/data-science/forecast-diagnostics/api/data-science/model-comparison/api/data-science/feature-signals/api/data-science/business-impact

Los cinco endpoints son read-only: explican el sistema y sus resultados, pero no ejecutan entrenamiento, pipeline ni cambios de estado.

Feature engineering

De features a señales interpretables

Las señales describen información usada por el modelo o asociada con patrones de demanda. No se presentan como relaciones causales.

Demanda reciente

Lags y ventanas móviles anteriores al día objetivo.

Estacionalidad

Calendario, día de semana y patrones temporales.

Precio y margen

Precio, coste, margen y cambios recientes.

Promociones

Exposición promocional y lift observado en los datos.

Cobertura

Inventario disponible, stockout flag y días de suministro.

Ciclo de vida

Edad del producto y etapa de madurez.

Canal

Señales de tienda, categoría y canal de venta.

Riesgo y reposición

Del forecast al riesgo operativo

El riesgo combina demanda prevista, inventario actual, suministro entrante, lead time, fiabilidad del proveedor, safety stock y ventas perdidas estimadas. Las recomendaciones son orientación interna para revisión: nunca órdenes de compra reales.

1riesgo crítico
5riesgos altos
4riesgos medios
10riesgos bajos
10recomendaciones abiertas
≈ €9.516exposición a ventas perdidas
≈ €6.686coste estimado de pedido

Salida visible en una ejecución demo validada; los valores pueden variar después de reconstruir el dataset.

Monitoring

Comparaciones simples y legibles

Compara métricas recientes de modelo y salud de datos frente a ejecuciones anteriores mediante estados y umbrales documentados, sin convertir una demo en una afirmación estadística compleja.

Scenario planning

Simular sin mutar la verdad base

Los escenarios se guardan por separado, se etiquetan como simulados y nunca alteran las tablas canónicas de riesgo o recomendaciones.

Multiplicador de demandaMultiplicador de lead timeFiabilidad del proveedorLift promocionalAjustes de inventarioHorizonte de planificación

Extensiones

Preparadas, pero seguras por defecto

CSV Upload

Solo registros operativos brutos

Valida entidades raw, rechaza lags, forecasts, scores y recomendaciones derivados, limita archivos a 2 MB y escribe registros de auditoría.

Connector Prep

Shopify y WooCommerce desactivados

Los stubs validan únicamente la forma de configuración. El dry-run no llama APIs, no almacena credenciales y no existe sincronización live.

Dashboard walkthrough

Del pipeline a superficies concretas de decisión

Las capturas proceden de la demo pública y muestran datos sintéticos calculados. La captura específica de ML Insights queda pendiente en el repositorio fuente.

Deployment architecture

Un despliegue gratuito y acotado para portfolio

Un proyecto Vercel sirve Next.js y una función Python FastAPI bajo /api/*. Neon Postgres conserva el estado y las llamadas del navegador son same-origin.

Browser

Interfaz Next.js y llamadas same-origin

Vercel

Frontend + función FastAPI en modo serverless

Neon Postgres

Persistencia de datos, runs y outputs

Small mode

Escala sintética compatible con límites de demo

Un sistema mayor migraría backend, workers y artefactos de modelo a infraestructura dedicada. El prototipo asume límites serverless, artefactos efímeros y restricciones de free tier.

Fiabilidad y evaluación

Tests, smoke checks y límites explícitos

La credibilidad no depende de una captura aislada, sino de contratos de datos, pruebas, checks de seguridad y validación contra el despliegue público.

451tests backend únicos passing
Passingfrontend typecheck + build
201checks en scripts/verify.sh
Passingpublic-readiness scan
29 / 29production smoke checks
0secretos o efectos externos detectados

El conteo backend anterior era mayor porque incluía copias duplicadas no trackeadas. El caso público utiliza el conteo limpio de tests únicos.

Safety boundary

Dónde termina el sistema

Los endpoints públicos de lectura están disponibles. Las acciones de escritura y control se protegen con API key, y el prototipo no cruza el límite hacia acciones externas.

  • No crea órdenes de compra reales.
  • No contacta proveedores.
  • No sincroniza Shopify o WooCommerce.
  • No envía alertas por email o Slack.
  • Los escenarios no mutan datos canónicos.
  • La carga CSV está acotada y validada.
  • Los conectores son stubs desactivados.

Resultado

Un producto de ML completo, no solo un modelo

DemandOS demuestra un workflow end-to-end: ingesta raw, validación, feature engineering, forecasting, diagnóstico de modelos, riesgo y recomendaciones, monitoring, escenarios, despliegue y disciplina de publicación.

El trabajo de portfolio con ML es más fuerte cuando el modelo vive dentro de un workflow fiable de ingesta, validación, features, evaluación, explicabilidad, seguridad y despliegue.

Limitaciones

Lo que el prototipo no demuestra

  • Solo utiliza datos sintéticos.
  • No está entrenado con datos reales de clientes.
  • No es un sistema productivo de reposición.
  • No existe integración ecommerce live.
  • No realiza compras autónomas.
  • No incluye scheduler en background.
  • El runtime serverless de Vercel limita escala y duración.
  • Neon se usa dentro de límites de prototipo/free tier.
  • La calidad del forecast está calibrada para demo, no para producción.

Qué aprendí

El modelo solo es una parte del producto

Lo más importante del proyecto no fue solo entrenar un modelo. Fue construir el entorno que hace que un modelo sea usable: contratos de datos, validación, features sin leakage, métricas interpretables, observabilidad, límites de seguridad y una interfaz que ayuda a decidir qué revisar primero.