S&OP: Por qué tu Excel te miente (y cómo interrogarlo con Python)

Published: (February 28, 2026 at 02:57 AM EST)
5 min read
Source: Dev.to

Source: Dev.to

Datalaria profile image

Daniel

Introducción

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.

Imagen Ingeniería del S&OP

El Problema: Signal‑to‑Noise Ratio

En telecomunicaciones (mi background original), el ruido es cualquier interferencia que corrompe la señal. En Supply Chain, el “ruido” son los datos sucios.

Si no filtras el ruido antes de planificar la demanda, estás inmovilizando capital. Un outlier no detectado es dinero en llamas. Si tu algoritmo ve un pico falso de 100 000 unidades, ordenará materia prima que no necesitas, quemando caja y ocupando espacio en almacén. La higiene de datos no es “limpieza”, es protección del margen operativo.

La Evidencia Visual

Antes de ver una sola línea de código, mira la diferencia entre lo que tu ERP exporta (arriba) y la realidad estadística de tu demanda (abajo).

Impacto de la Higiene de Datos

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 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:

ComponenteTecnologías
CerebroPython (Pandas + SciPy) para la lógica estadística
AlmacénSupabase (PostgreSQL) como la “Verdad Única”
AgenteScript 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 (más de 3 σ 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.

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 Notebook interactivo en Colab.

No necesitas instalar Python ni configurar bases de datos. He preparado un entorno efímero donde puedes:

  • Generar un dataset de ventas corrupto (simulado).
  • Ejecutar el motor de limpieza SupplyChainSanitizer.
  • Ver cómo el algoritmo detecta y separa el ruido.

Haz clic en el botón, dale a “Play” en las celdas y observa la ingeniería de datos en acción.

Arquitectura de Producción (Behind the Scenes)

Para los perfiles técnicos interesados en cómo esto escala en una empresa real (Datalaria Core):

  1. Ingesta – Los CSV se suben a un bucket privado en Supabase Storage o a una base de datos local.
  2. Trigger – Un worker de Python detecta la llegada del archivo.
  3. Proceso – Ejecuta la limpieza en memoria dentro de un contenedor Docker.
  4. Persistencia – Los datos limpios se inyectan en la tabla de “Verdad Única”.
  5. Exposición – APIs de Supabase permiten que downstream (modelos de IA, dashboards, ERP) consuman solo la señal validada.

Con esta arquitectura, la “válvula de calidad” protege tu cadena de suministro de la contaminación de datos, garantizando que las decisiones de S&OP se basen en una señal fiable y no en ruido.

ctan en PostgreSQL usando Row Level Security (RLS) para asegurar que nadie pueda alterar el histórico financiero manualmente

Nota de Seguridad: En producción, nunca conectamos scripts con permisos de superusuario. Usamos Service Roles específicos y políticas RLS estrictas para asegurar la integridad de la cadena de suministro.

Visualización del Flujo de Datos

El siguiente diagrama muestra cómo los datos “sucios” pasan por nuestra Válvula de Calidad antes de llegar a la Verdad Única:

diagrama S&OP parte 1

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”.

0 views
Back to Blog

Related posts

Read more »