Registro
Artículos y modelos publicados
Notas técnicas con parámetros, semillas aleatorias y métricas de cada prueba ejecutada en el taller.
Leer el archivoInforme de laboratorio · Markdex · Sevilla
Test controlado sobre 24 semanas de histórico de ventas. Comparamos tres modelos de clasificación frente a un grupo de control sin modelo predictivo, con una única métrica de decisión: F1 sobre la clase «demanda alta».
Un distribuidor de material técnico con dos puntos de venta en Sevilla capital planteó la misma pregunta que aparece en la mayoría de proyectos de Markdex Data Science & IA: ¿podemos anticipar qué semanas tendrán demanda alta antes de cerrar la compra al proveedor? La respuesta no se resuelve con intuición; se resuelve con un experimento reproducible.
El procedimiento se estandarizó en cuatro fases: definición de la hipótesis, construcción del dataset, entrenamiento y validación con partición temporal, y control de resultados contra un escenario sin modelo. Cada fase dejó un registro de parámetros para que otro analista pueda repetir el test con los mismos datos y obtener las mismas cifras.
El informe completo de los bloques de trabajo está publicado en artículos de ciencia de datos, modelos y visualización, y los gráficos de diagnóstico se detallan en el artículo de visualización avanzada con Python. Aquí nos ceñimos al resultado numérico de la prueba.
Hipótesis nula: la proporción de semanas con demanda alta no cambia al usar un modelo de clasificación frente a la regla histórica de media móvil de cuatro semanas. Hipótesis alternativa: el modelo eleva el F1 al menos 0,15 puntos sobre esa regla.
Para aislar el efecto se fijaron tres condiciones: mismo horizonte de predicción (una semana), mismo conjunto de variables de entrada y cero solapamiento entre el tramo de entrenamiento y el de prueba.
Tres piezas documentan el experimento por separado: el registro en bruto, la interpretación gráfica y la aplicación real a un cliente. Cada una se puede leer de forma independiente.
Registro
Notas técnicas con parámetros, semillas aleatorias y métricas de cada prueba ejecutada en el taller.
Leer el archivoDiagnóstico
Matriz de confusión, curva de validación y gráfico de residuos con los mismos datos de este test.
Ver el análisisAplicación
Casos reales con entregables: previsión semanal, panel de control y documentación del modelo.
Ver trabajosEl conjunto de partida tenía 168 observaciones semanales repartidas en dos tiendas. Tras descartar cuatro semanas con cierre por inventario, quedaron 164 filas útiles. Ninguna fila se imputó a mano: los huecos se resolvieron con interpolación lineal y se documentó el criterio.
La partición fue temporal, no aleatoria. Entrenamiento: 128 semanas (78 %). Prueba: 36 semanas (22 %) al final de la serie. Este detalle importa: una partición aleatoria filtraría información del futuro al modelo y las métricas saldrían infladas.
El coste de preparar los datos fue de 6 horas de trabajo efectivo; el entrenamiento de los tres modelos, menos de 3 minutos en un portátil convencional.
Se entrenaron tres clasificadores con la librería scikit-learn: regresión logística con escalado estándar, bosque aleatorio de 300 árboles y gradient boosting con 150 estimadores y profundidad máxima 3. Los hiperparámetros se ajustaron solo sobre el tramo de entrenamiento con validación cruzada de 5 particiones temporales.
Métrica principal: F1 sobre la clase positiva, porque el coste de un falso negativo (quedarse sin stock una semana) es mayor que el de un falso positivo. Métricas de control: precisión, exhaustividad y exactitud global. Umbral de decisión fijado en 0,5 para los tres modelos, sin ajuste posterior.
«La diferencia entre acertar por costumbre y acertar por modelo fueron 11 semanas bien previstas de 36. Ese es todo el resultado; el resto es ruido.»
El bosque aleatorio fue el mejor de los tres con un F1 de 0,81 sobre las 36 semanas de prueba. La regresión logística quedó en 0,74 y el boosting en 0,79. La regla de control, la media móvil, se quedó en 0,66: la hipótesis alternativa se confirma con una mejora de 0,15 puntos exactos respecto al control.
| Modelo | Precisión | Exhaustividad | F1 |
|---|---|---|---|
| Bosque aleatorio | 0,84 | 0,78 | 0,81 |
| Gradient boosting | 0,82 | 0,76 | 0,79 |
| Regresión logística | 0,77 | 0,71 | 0,74 |
| Control (media móvil) | 0,69 | 0,63 | 0,66 |
El error se concentra en las semanas con campaña activa y festivo simultáneo, donde el modelo tiende a subestimar. Los detalles gráficos de la matriz de confusión están en visualización avanzada de datos con Python.
La muestra es corta. Con 36 semanas de prueba, un intervalo de confianza razonable para el F1 se mueve entre 0,68 y 0,88: la mejora sobre el control es real, pero la cifra exacta no debe tomarse como constante.
El modelo tampoco cubre productos nuevos sin historial ni cambios de surtido. En esos casos el sistema cae automáticamente sobre la regla de media móvil, y así se documenta en el entregable.
La prueba de demanda con Python aporta una mejora medible y verificable frente a la regla histórica. El modelo recomendado para producción es el bosque aleatorio con umbral 0,5, reentrenado cada trimestre con las 128 semanas más recientes.
El coste de implantación en este caso fue de una jornada de preparación de datos y una tarde de validación. El presupuesto por este tipo de trabajo se detalla en tarifas de talleres y análisis de datos, y los entregables tipo, en el archivo de trabajos.
Para replicar el ensayo basta con el histórico de ventas semanales y las variables de calendario. Todo lo demás —partición temporal, métricas y control— es procedimiento fijo.
Con menos de 60 semanas el modelo no supera de forma estable a la media móvil. A partir de 100 semanas los resultados se repiten con variaciones por debajo de 0,04 puntos de F1.
Porque la clase «demanda alta» representa solo el 30 % de las semanas. Un modelo que prediga siempre «normal» acierta el 70 % y no sirve para nada operativo.
Sí, añadiendo la tienda como variable categórica. En este ensayo se probó también un modelo por tienda; el resultado conjunto fue ligeramente mejor por disponer de más filas.
Se registra la desviación y se revisan los predictores de esa semana. Los fallos aislados no justifican reentrenar; tres fallos consecutivos, sí.
El procedimiento completo, los scripts y los criterios de validación están documentados. Puedes empezar por el archivo de artículos o revisar los trabajos ya entregados.