Dashboard de comportamiento de ventas en tiempo real con proyecciones futuras usando BigQuery ML.
- Node.js 20+ (descargar)
- Python 3.11 (descargar)
- Google Cloud SDK (descargar)
- Proyecto de Google Cloud con BigQuery habilitado
gcloud auth application-default loginLinux / macOS:
chmod +x setup.sh run.sh
./setup.shWindows (PowerShell):
.\setup.ps1Linux / macOS:
./run.shWindows (PowerShell):
.\run.ps1Una vez iniciado:
- Frontend: http://localhost:5173
- Backend: http://localhost:3000
La tabla de transacciones está particionada por mes usando el campo timestamp. Aunque el particionamiento diario podría parecer atractivo para consultas como el forecast que usan pocos días de datos, con un dataset de ~10,000 transacciones anuales cada partición diaria tendría apenas unos KB de datos. Este tamaño tan pequeño genera un overhead de metadatos que no compensa la reducción de datos escaneados. El particionamiento mensual ofrece un mejor balance: cada partición contiene ~800 registros, mientras que consultas comunes como por ejemplo trimestres o el año completo solo acceden a 3-12 particiones respectivamente. Para operaciones como el forecast que requieren los últimos días, el costo adicional de escanear el mes completo es mínimo comparado con el overhead que generarían 365 particiones pequeñas. Además, esta estrategia está diseñada pensando en escalabilidad: conforme el dataset crezca hacia un uso de producción real con mayor volumen de transacciones y mas años, las particiones diarias pierden sentido haciendo ineficiente el uso de los recursos.
El clustering por category y region se alinea directamente con los patrones de uso del dashboard y el entrenamiento de modelos. El dashboard ofrece filtros por categoría de producto (Electronics, Clothing, Home, Books) y región geográfica (US-East, EU-West, APAC, etc.), por lo que agrupar físicamente los datos por estas dimensiones permite a BigQuery acceder solo a los bloques relevantes dentro de cada partición. Más importante, el modelo ARIMA_PLUS entrena series temporales separadas para cada combinación de region y category, lo que significa que cada predicción solo necesita acceder a un subconjunto específico de datos. El clustering garantiza que estos subconjuntos estén físicamente contiguos, optimizando tanto las consultas interactivas del usuario como el entrenamiento y ejecución de los modelos de forecasting.