En las reuniones de S&OP (Sales & Operations Planning), a menudo se discute sobre opiniones en lugar de hechos. "Creo que venderemos más", "El mes pasado fue raro".
El problema raíz no es la falta de visión comercial, es la falta de integridad en la señal.
La mayoría de las cadenas de suministro se gestionan sobre hojas de cálculo que aceptan cualquier cosa: fechas como texto, espacios en blanco, y errores de dedo que convierten un pedido de 100 unidades en 100.000. Cuando alimentas tu algoritmo de predicción con esa "basura", obtienes basura amplificada (El efecto Bullwhip financiero).
Hoy iniciamos la serie Ingeniería del S&OP. No vamos a hablar de teoría; vamos a construir una arquitectura de datos que audite tu negocio automáticamente.
Arriba: Datos crudos con errores humanos. Abajo: La señal limpia lista para algoritmos de IA.
La Solución: Arquitectura de "Válvula de Calidad"
Para solucionar esto, aplicamos First Principles Thinking. No necesitamos "tener más cuidado" con el Excel. Necesitamos un sistema que matemáticamente prohíba la entrada de datos sucios a nuestra "Verdad Única".
Hemos diseñado un pipeline automatizado con el siguiente stack:
Cerebro: Python (Pandas + Scipy) para la lógica estadística.
Almacén: Supabase (PostgreSQL) como la "Verdad Única".
Agente: Un script que se ejecuta automáticamente ante nuevos archivos.
El Código: Estadística > Intuición
No usamos reglas fijas ("si es mayor que 1000, borra"). Usamos estadística. Implementamos el Z-Score, que mide cuántas desviaciones estándar se aleja un dato de la media.
Si una venta tiene un Z-Score > 3 (está a más de 3 sigmas de la normalidad), es matemáticamente improbable que sea comportamiento estándar. El sistema no lo borra (podría ser una venta real), pero lo marca para auditoría y lo excluye de la predicción automática.
Nota: Usamos Z-Score asumiendo normalidad para simplificar este ejemplo. En escenarios de producción con demanda intermitente, utilizamos métodos como IQR (Interquartile Range) o MAD (Median Absolute Deviation) que son más robustos ante distribuciones no gaussianas.
Aquí está la lógica central de nuestra clase SupplyChainSanitizer:
def detect_outliers_zscore(self, threshold=3):
"""
Detecta anomalías estadísticas usando Z-Score.
No borramos la fila (pérdida de info), la etiquetamos.
"""
# Calculamos la desviación estándar de la señal
z_scores = np.abs(stats.zscore(self.df['qty']))
# Marcamos lo que es matemáticamente sospechoso
self.df['is_outlier'] = z_scores > threshold
return self
Open Kitchen: Pruébalo tú mismo
Como ingeniero, desconfío de lo que no puedo ejecutar. Por eso, he aislado la lógica de limpieza en un
Leyenda:
- 🔴 Rojo: Datos crudos con ruido (el problema)
- 🟢 Verde: Señal limpia lista para predicción
- 🟠 Naranja: Anomalías etiquetadas para revisión humana
- 🔵 Azul: Almacén centralizado (Supabase)
Siguiente Paso: Predicción Científica
Ahora que tenemos una base de datos limpia (una señal pura), estamos listos para mirar al futuro.
En el próximo capítulo de la serie, conectaremos esta tabla limpia con Facebook Prophet para generar previsiones de demanda probabilísticas, abandonando para siempre las medias móviles simples de Excel.
Suscríbete para recibir el Capítulo 2: "Demand Planning: De la Adivinación a la Probabilidad".
SOCIAL SHARE CARD GENERATOR