El dataset

Los datos de entrada son los históricos de ventas de un catálogo de retail farma: 847 SKUs activos, frecuencia semanal, desde enero 2022 hasta marzo 2026 — aproximadamente 220 semanas de historia por SKU en promedio.

El formato mínimo que M8 necesita: tres columnas. Nada más.

# Estructura de entrada — ejemplo
sku_id        fecha        unidades
SKU-00142    2024-01-07        48
SKU-00142    2024-01-14        52
SKU-00142    2024-01-21         0
SKU-00891    2024-01-07       312
...

# 847 SKUs × ~220 semanas = ~186,340 filas

La configuración del pipeline usa los defaults del ForecastConfig: ventana de backtesting de 12 semanas, horizonte de forecast de 13 semanas, métrica de selección MAPE. Sin tocar nada más.

Paso 1: Segmentación

El SegmentationEngine aplica el árbol de decisión M8 sobre cada SKU. En datos de frecuencia semanal, el umbral de "historia suficiente" es 24 semanas. El umbral de "descontinuado" es 3 semanas consecutivas en cero.

Output — Distribución de segmentos
Segmentación completada — 847 SKUs procesados en 4.2s

Segmento           SKUs     %
─────────────────────────────────
[A] Mature-Season   218   25.7%   ← el modelo equivocado cuesta más aquí
[B] Mature-Trend    134   15.8%
[C] Mature-T+S       97   11.5%
[D] Mature-Stable   189   22.3%
[E] Intermittent    142   16.8%   ← 1 de cada 6 SKUs — ¿tu sistema los trata distinto?
[F] New Launch       31    3.7%
[G] Discontinued     22    2.6%
[H] No Match         14    1.7%
─────────────────────────────────
Total              847  100.0%
💡 Lo que revela la segmentación
El 16.8% Intermittent (142 SKUs) es el número más importante de esta tabla. En este catálogo, casi 1 de cada 6 SKUs tiene demanda errática. Si el sistema los trata con un modelo estacional o de promedio móvil, el over-forecast sistemático en esos SKUs está inflando el inventario de forma constante.

Paso 2: Backtesting y selección de modelo

El BacktestEngine entrena los modelos candidatos de cada segmento sobre 5 ventanas de historia de 12 semanas cada una, evalúa sobre las 12 semanas siguientes, y promedia el MAPE. El ganador por SKU es el modelo con menor MAPE promedio.

Output — Modelos ganadores por segmento
BacktestEngine — 847 SKUs × candidatos × 5 ventanas
Tiempo total: 54.3s

─── Segmento A (Mature-Seasonal) ───────────────────
TBATS         : 89 SKUs  (40.8%)  MAPE promedio: 11.2%
TES           : 74 SKUs  (33.9%)  MAPE promedio: 12.1%
sARIMA        : 41 SKUs  (18.8%)  MAPE promedio: 13.7%
SeasonalNaive : 14 SKUs  ( 6.4%)  MAPE promedio: 15.3%

─── Segmento E (Intermittent) ───────────────────────
Croston       : 118 SKUs (83.1%)  MAPE promedio: 31.4%  ← alto por diseño
SES           :  24 SKUs (16.9%)  MAPE promedio: 38.9%

─── Segmento D (Mature-Stable) ──────────────────────
Theta         :  82 SKUs (43.4%)  MAPE promedio:  8.7%
SES           :  64 SKUs (33.9%)  MAPE promedio:  9.3%
MovingAverage :  43 SKUs (22.8%)  MAPE promedio: 10.1%

─── [22 Discontinued y 14 No Match excluidos] ───────

Nota sobre los intermitentes: el MAPE del 31% parece alto en términos absolutos. Pero ese es el mínimo alcanzable para ese tipo de serie — Croston es el modelo diseñado para minimizar el error en demanda errática. Cualquier otro modelo daría un MAPE significativamente mayor y un sesgo sistemático al alza.

Paso 3: Forecast

Con los modelos ganadores asignados, el ForecastPipeline genera el forecast de las próximas 13 semanas para cada SKU activo (811 SKUs, excluyendo los 36 descontinuados o No Match).

811
SKUs con forecast generado
9.4%
MAPE promedio (ex-intermitentes)
13
Semanas de horizonte
36
SKUs flaggeados para revisión

Métricas de accuracy detalladas por segmento:

Segmento SKUs MAPE Forecast Accuracy Modelo dominante
[A] Mature-Season 218 11.2% 88.8% TBATS (40.8%)
[B] Mature-Trend 134 9.8% 90.2% AutoARIMA (52%)
[C] Mature-T+S 97 10.7% 89.3% ETS (44%)
[D] Mature-Stable 189 8.7% 91.3% Theta (43.4%)
[E] Intermittent 142 31.4% 68.6% Croston (83.1%)
[F] New Launch 31 Reglas de negocio
✓ Por qué el MAPE alto en intermitentes no es un problema
El MAPE de 31.4% en el segmento Intermittent es el mínimo estadísticamente alcanzable para ese tipo de serie. Si antes de M8 esos 142 SKUs usaban un modelo estacional, su MAPE sería 60–80% y con un sesgo sistemático al alza — es decir, over-forecast constante. El 31.4% con Croston no es un error a resolver: es la realidad de la demanda errática, gestionada correctamente.

Lo que cambia con M8

Antes de segmentar, el catálogo de este cliente usaba un modelo estacional configurado globalmente. Con ese modelo:

  • Los 142 SKUs intermitentes tenían MAPE ~65% con sesgo positivo
  • El equipo sobreescribía manualmente más del 55% del catálogo
  • Los 22 SKUs descontinuados seguían generando órdenes de compra

Después de implementar M8, los overrides manuales bajaron al 18% — mayormente concentrados en los New Launch y algunos No Match donde la intervención humana tiene sentido real.

El número de SKUs sobre-forecasteados de forma sistemática pasó de ~600 a ~142 (solo los intermitentes, que por definición de la demanda tienen varianza alta).

El resultado en inventario: reducción del 12% en el stock promedio de los SKUs intermitentes en los dos primeros meses post-implementación.

¿Cómo se vería este análisis con tu catálogo?

Cómo corremos M8 sobre tus datos. Gratis.

Mandas el CSV de ventas. En 48 horas tienes el mismo reporte que ves aquí — con tu catálogo, tus segmentos, tus modelos ganadores.

Quiero ver mi catálogo →