English
Forecasting

Forecasting Metrics: una guía práctica para elegir como medir tus forecasts de demanda

19 de octubre de 2026 33 min de lectura

Medir un sistema de forecasting parece fácil: menos error contra lo real, y listo. Hasta que hay que definir qué es un error y cómo se mide, y aparecen muchas formas de hacerlo. Acá ordenamos las métricas de error, por qué importan y cuándo usar cada una.

“¿Cuánta accuracy logra su sistema?”, “Nuestro WAPE es del 15%, ¿es bueno?”, “No logro más que un 60% de precisión en mis pronósticos, ¿qué estoy haciendo mal?”

Preguntas como estas salen en casi todas las primeras conversaciones técnicas que tenemos, y como casi todo en ingeniería, la respuesta honesta es “depende”: un número así, solo, no se puede evaluar.

El mismo error del 15% puede ser un resultado excelente en una categoría de rotación irregular y un desastre en una de consumo estable, donde repetir la venta de la semana pasada te daba 8% sin hacer nada.

Antes de hablar de las formas de medir la performance de un sistema, conviene grabarse que estamos jugando un juego de comparaciones: la precisión es siempre una cantidad relativa. Hay que compararla contra un modelo baseline, algo bien simple como una regla o un promedio, y ver cuánto mejora la métrica que elegimos contra esa base.

Sin estas tres cosas al lado, el número no describe nada:

  • A qué nivel se midió: la performance de un forecast de SKU por tienda no se compara con la del total por mes. Más volumen suele traer más señal (más información para predecir), así que a los niveles más agregados les deberíamos exigir mejor performance.
  • A qué horizonte: la semana que viene no es lo mismo que dentro de tres meses. La incertidumbre y los errores suelen crecer a medida que la predicción se aleja en el tiempo.
  • Contra qué baseline: si no le gana al naive (el que dice que el pronóstico es el valor del período anterior), no tiene mucho sentido usar el modelo. Hay baselines más exigentes, y cuál conviene depende de cómo es la serie: los repasamos justo abajo.

El atajo para una reunión

Cuando alguien te pasa un número de accuracy, preguntá estas tres cosas antes de opinar. Si no las tiene, el número todavía no dice mucho.

Contra qué comparar: los baselines típicos

Un baseline es un pronóstico tan simple que no necesita entrenamiento: una regla que cualquiera puede armar en una planilla. Para que sirva de vara tiene que ser el mejor de los métodos simples que le quedan bien a esa serie, y cuál es depende de cómo se ve la demanda:

Si la serie… Baseline Qué pronostica
Es estable, sin estacionalidad Naive El valor del último período
Es estable pero ruidosa Media o mediana móvil El promedio (o la mediana) de los últimos k períodos
Tiene estacionalidad Naive estacional El valor del mismo momento del ciclo anterior: la misma semana del año pasado, o el mismo día de la semana pasada si los datos son diarios
Tiene tendencia Naive con deriva (drift) El último valor más la pendiente promedio de la historia
Es intermitente (muchos ceros) Croston o SBA El tamaño medio de una venta dividido por el intervalo medio entre ventas
Es nueva, con poca historia Promedio de análogos Lo que vendieron productos parecidos (misma categoría, precio similar) en sus primeras semanas

Tres cosas para que la comparación sea honesta. El baseline se evalúa exactamente igual que el modelo: mismo nivel, mismo horizonte, mismas fechas de corte y misma métrica. Si no sabés cuál le queda mejor a una serie, corré varios y usá el mejor como vara: un modelo que le gana al naive pero pierde contra el naive estacional todavía no aporta nada. Y hay un baseline que no está en la tabla y suele ser el más útil, lo que hace hoy el equipo de planificación, que retomamos más abajo cuando hablemos de forecast value added.

Las familias de métricas

Hay muchas métricas de error, y acá repasamos las más comunes. Conviene ordenarlas en familias según lo que miden, porque dentro de una familia las diferencias son de detalle y entre familias son de fondo.

En las fórmulas, \(y_t\) es la venta real del período \(t\), \(\hat{y}_t\) el pronóstico para ese período y \(n\) la cantidad de períodos evaluados.

Dependientes de la escala

MAE (error absoluto medio) y RMSE (raíz del error cuadrático medio) viven en las unidades del producto. Si tu MAE es 40, te equivocás en 40 unidades por período.

\[\mathrm{MAE} = \frac{1}{n}\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|\]
\[\mathrm{RMSE} = \sqrt{\frac{1}{n}\sum_{t=1}^{n}\left(y_t - \hat{y}_t\right)^2}\]

La diferencia entre las dos es más importante de lo que parece, y no es estilística: MAE se minimiza con la mediana de la distribución y RMSE con la media. Como el RMSE eleva el error al cuadrado, una semana muy mal pronosticada pesa muchísimo más que cinco semanas apenas mal, así que empuja al modelo a cubrirse de los picos. El MAE trata todos los errores igual y, cuando la serie tiene muchos ceros, el pronóstico que lo minimiza puede ser cero.

Eso último no es un tecnicismo. Si medís demanda intermitente con MAE, el modelo que gana puede ser el que dice “no vas a vender nada”, que es literalmente el peor modelo posible para comprar.

Las dos comparten un problema: no se pueden comparar entre productos. 40 unidades es poco para un SKU que vende 5.000 y una catástrofe para uno que vende 60.

Porcentuales

MAPE divide cada error por la venta real y promedia los porcentajes. Resuelve la comparabilidad y trae dos problemas que lo hacen peligroso.

\[\mathrm{MAPE} = \frac{100\%}{n}\sum_{t=1}^{n}\left|\frac{y_t - \hat{y}_t}{y_t}\right|\]

Primero, si la venta real de un período es cero la división explota, así que en la práctica se calcula solo sobre los períodos con venta, lo cual deja afuera justo los ceros que más te interesan. Y no hace falta un cero para romperlo: pronosticar 10 cuando se vendió 1 da 900% de error.

lo que se vendiópronosticás 0pronosticás de más100%sin techo
El error porcentual no es simétrico. Hacia abajo se frena en 100%, porque no podés pronosticar menos que cero. Hacia arriba no tiene límite, así que optimizar MAPE enseña a pronosticar de menos.

Segundo, y más importante, es asimétrico, y el lado hacia el que se inclina es el peligroso. Si pronosticás el doble de lo que se vendió, el error es 100%. Si pronosticás la mitad, es 50%. Quedarse corto tiene techo (como el pronóstico no baja de cero, el error no puede pasar de 100%) y pasarse no tiene ninguno.

Un modelo entrenado u optimizado contra MAPE aprende que conviene pronosticar de menos, que en una operación es exactamente el error que no querés incentivar.

sMAPE intenta arreglar eso dividiendo por el promedio entre real y pronóstico, y queda acotado entre 0 y 200%. El problema es que introduce su propia asimetría, para el lado contrario: como el denominador incluye el pronóstico, cuando el pronóstico queda por debajo del real el denominador se achica y el error se infla. A igual distancia del real, sMAPE castiga más quedarse corto que pasarse, y eso puede empujar a un modelo a pronosticar de más. Además queda indefinido cuando el real y el pronóstico son los dos cero, que en series con muchos ceros pasa todo el tiempo.

\[\mathrm{sMAPE} = \frac{100\%}{n}\sum_{t=1}^{n}\frac{\left|y_t - \hat{y}_t\right|}{\left(|y_t| + |\hat{y}_t|\right)/2}\]

MAAPE es una alternativa menos conocida: toma el arcotangente del error porcentual, con lo cual ningún período aporta más que un tope y un error enorme deja de dominar el promedio. Con venta cero y pronóstico positivo da ese tope; cuando los dos son cero hay que decidir cuánto vale (lo usual es contarlo como error cero). Es más estable que MAPE con demanda intermitente, aunque no resuelve todos sus problemas, y casi no se usa fuera de los papers.

\[\mathrm{MAAPE} = \frac{1}{n}\sum_{t=1}^{n}\arctan\left(\left|\frac{y_t - \hat{y}_t}{y_t}\right|\right)\]

Ponderadas

WAPE suma todos los errores absolutos y los divide por la suma de las ventas. Es un promedio ponderado por volumen: cada unidad pesa lo mismo, así que un SKU que vende mucho pesa más que uno que vende poco. Por eso es la que mejor se lleva con una operación, donde equivocarse en el producto grande cuesta plata de verdad, y por eso no se rompe con los ceros.

\[\mathrm{WAPE} = \frac{\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|}{\sum_{t=1}^{n}\left|y_t\right|}\]

Escaladas

MASE divide tu error por el error de un pronóstico naive sobre los mismos datos. Un MASE de 1,0 significa “igual que repetir el período anterior”, 0,7 significa “30% mejor que eso”, y cualquier cosa por encima de 1,0 significa que el modelo está estorbando. RMSSE es lo mismo con errores cuadráticos.

El denominador es el error del naive sobre la historia de entrenamiento, de largo \(T\); con \(m\) el período estacional (52 en datos semanales con estacionalidad anual) es el naive estacional, y con \(m = 1\) el simple.

\[\mathrm{MASE} = \frac{\dfrac{1}{n}\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|}{\dfrac{1}{T-m}\sum_{t=m+1}^{T}\left|y_t - y_{t-m}\right|}\]
\[\mathrm{RMSSE} = \sqrt{\frac{\dfrac{1}{n}\sum_{t=1}^{n}\left(y_t - \hat{y}_t\right)^2}{\dfrac{1}{T-m}\sum_{t=m+1}^{T}\left(y_t - y_{t-m}\right)^2}}\]

Son las que mejor se llevan con promediar entre series distintas, porque cada una ya viene dividida por la dificultad de su propia serie. Si querés un solo número para un catálogo entero, sale de acá. En el M5, la competencia de forecasting sobre las ventas de Walmart, la métrica principal fue justamente un RMSSE ponderado por facturación (resultados).

Tres peros que conviene saber. MASE hereda el baseline: si usás un naive simple sobre una serie estacional, el denominador se infla y tu MASE queda artificialmente bueno, así que en series con estacionalidad el naive tiene que ser el estacional. No se promedia con un promedio simple, porque cada serie trae su propia escala; conviene la mediana o un promedio ponderado por volumen. Y como el numerador es MAE, arrastra el problema de la mediana: sobre demanda intermitente, pronosticar cero puede dar un MASE decente.

De dirección

BIAS (o error medio, ME) no mide cuánto te equivocás, mide para qué lado. Un modelo puede tener un WAPE espectacular y un bias que te está llenando el depósito todos los meses.

\[\mathrm{ME} = \frac{1}{n}\sum_{t=1}^{n}\left(\hat{y}_t - y_t\right)\]

Con una trampa que cuesta reuniones enteras: hay dos convenciones de signo y las dos están en uso. La literatura clásica define el error medio como real menos pronóstico, así que un ME positivo significa que pronosticaste de menos. Muchas herramientas, la nuestra incluida, lo calculan al revés (pronóstico menos real), así que positivo significa que te pasaste. Antes de leer un número de bias, preguntá cuál de las dos es. El signo solo no te dice nada, y no es una paranoia: se confunden hasta en la documentación de librerías de evaluación que usa medio mundo.

Dos extensiones que valen más que el bias suelto:

CFE (error acumulado) es la suma de los errores con signo a lo largo del horizonte, sin promediar. Es útil en inventario porque se mapea directo al lead time: sumado sobre los períodos que cubre un pedido, dice cuántas unidades te pasaste o te quedaste corto, que es lo que termina siendo stock de más o faltante.

\[\mathrm{CFE} = \sum_{t=1}^{n}\left(\hat{y}_t - y_t\right)\]

Tracking signal, que es el CFE dividido por la desviación absoluta media. Sirve como alarma: mientras se mueve dentro de un rango de más o menos cuatro, el desvío es compatible con azar; cuando se sale, hay un sesgo sistemático y el modelo necesita una revisión. Es de las pocas métricas que se pueden poner directamente como umbral de alerta sin inventar un criterio propio.

\[\mathrm{TS} = \frac{\mathrm{CFE}}{\mathrm{MAD}}, \qquad \mathrm{MAD} = \frac{1}{n}\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|\]
+4−4acá se revisa el modelo
Mientras se queda adentro de la banda, el desvío es azar. Cuando se va, hay sesgo sistemático, y es de las pocas métricas que se pueden enchufar directo como alerta.

Puntuales y probabilísticas

Todas las anteriores comparan un número contra otro número. Si tu sistema entrega cuantiles o intervalos, ninguna de ellas los evalúa: podés tener el mejor WAPE del rubro y unos intervalos que no se cumplen nunca.

Para evaluar una distribución hay un concepto que ordena todo lo demás: una regla de puntuación propia es una que se minimiza justo cuando la distribución que reportás es la verdadera. Suena abstracto y es lo más práctico del tema: con una regla propia, decir la verdad sobre tu incertidumbre es la estrategia ganadora, y con una impropia conviene mentir. Si la métrica premia inflar los intervalos, alguien los va a inflar, y no va a ser por mala fe.

el cuantil que pronosticastevendiste menosvendiste máscastigo suavecastigo 9 veces mayor
Una pendiente para cada lado. En el cuantil 90 quedarse corto cuesta nueve veces más que pasarse, que es lo que hace que el modelo aprenda a cubrir la cola.

La pérdida por cuantil (pinball). Mide qué tan bueno es un cuantil en su propio juego, con una penalización asimétrica: para el cuantil 90, quedarse corto cuesta nueve veces más que pasarse. Es lo que hace que un modelo entrenado sobre el cuantil 90 aprenda a cubrir la cola en vez de acertar el centro. En el cuantil 50 las dos pendientes se igualan y la pérdida es la mitad del error absoluto, así que elegir con una o con el MAE da el mismo ganador. Con \(\hat{y}^{q}_t\) el cuantil \(q\) pronosticado:

\[\rho_q\left(y_t, \hat{y}^{q}_t\right) = \begin{cases} q\,\left(y_t - \hat{y}^{q}_t\right) & \text{si } y_t \geq \hat{y}^{q}_t \\[4pt] (1-q)\,\left(\hat{y}^{q}_t - y_t\right) & \text{si } y_t < \hat{y}^{q}_t \end{cases}\]

CRPS. La pérdida por cuantil integrada sobre todos los cuantiles, o sea la generalización natural del MAE a distribuciones. Tiene una propiedad útil: si la predicción es un número en vez de una distribución, CRPS se reduce exactamente al MAE, así que permite comparar un modelo probabilístico contra uno puntual en la misma escala. Su versión escalada, dividida por un naive igual que MASE, se puede promediar entre series.

Con \(F\) la distribución pronosticada:

\[\mathrm{CRPS}(F, y) = \int_{-\infty}^{\infty}\Big(F(x) - \mathbb{1}\{x \geq y\}\Big)^2\,dx = 2\int_{0}^{1}\rho_q\left(y, F^{-1}(q)\right)\,dq\]

Cobertura y calibración. La más fácil de explicar y la que casi nunca se mira: si tu intervalo al 90% está bien calibrado, la venta real tiene que caer adentro alrededor del 90% de las veces. Si cae el 99%, tus intervalos están inflados y estás comprando de más con cara de prudente. Si cae el 70%, tenés quiebres que el modelo decía que no iban a pasar.

Para un intervalo \([L_t, U_t]\):

\[\mathrm{Cobertura} = \frac{1}{n}\sum_{t=1}^{n}\mathbb{1}\{L_t \leq y_t \leq U_t\}\]

Winkler. Combina el ancho del intervalo con el castigo por quedarse afuera, porque la cobertura sola se puede ganar haciendo trampa: un intervalo de cero a infinito cubre el 100%.

Para un intervalo al \((1-\alpha)\):

\[W_t = (U_t - L_t) + \frac{2}{\alpha}\left(L_t - y_t\right)\mathbb{1}\{y_t < L_t\} + \frac{2}{\alpha}\left(y_t - U_t\right)\mathbb{1}\{y_t > U_t\}\]

La razón práctica por la que esto importa: la decisión de reposición es una pregunta sobre la cola de la distribución, no sobre el centro. Lo desarrollamos en forecasting probabilístico.

Elegir la métrica es elegir qué le pedís al modelo

Esto es lo menos intuitivo del tema, y es lo que más cambia resultados.

Si usás una métrica para seleccionar el modelo, define qué modelo gana, y modelos distintos se comportan distinto hacia abajo en la cadena. Elegir con RMSE premia al que acierta el centro; elegir con pérdida por cuantil al 90% premia al que no se queda corto en los picos, que es una pregunta más parecida a la que hace un comprador.

Antes de cambiar la métrica de selección

Mirá qué modelos ganaban antes y cuáles ganan después: ahí se ve el efecto real del cambio, más que en el número de la métrica.

Cuando las métricas no se ponen de acuerdo

Hasta acá hablamos como si hubiera que elegir una métrica. En la práctica hay tres o cuatro que importan al mismo tiempo, y el modelo que gana en una pierde en otra: el que mejor captura picos suele tener peor sesgo, el que menos se desvía en promedio suele achatar los eventos.

Hay una forma ordenada de resolverlo y empieza por una pregunta que no necesita ningún peso: ¿hay algún modelo que sea peor que otro en todo? Si el modelo B tiene peor WAPE, peor sesgo y peor pérdida por cuantil que el A, no hay criterio que lo salve. Esos se descartan de una, sin discutir.

peor WAPEmejor WAPEpeor sesgoninguno domina a otrodominados
Cada punto es un modelo, medido con dos métricas. Los grises son peores que alguno de los azules en todo, así que se descartan sin discutir. Elegir entre los azules ya no es una cuenta: es una decisión de negocio.

Lo que queda es un conjunto donde cada modelo es mejor que los demás en algo. Elegir ahí adentro ya no es un problema estadístico, es una decisión de negocio, y conviene tomarla explícitamente. Hay tres formas de hacerlo.

Como restricción. “El que tenga mejor WAPE, entre los que tengan sesgo menor al 5%.” Es la que conviene cuando una de las métricas no es una preferencia sino un requisito: si un sesgo del 10% te rompe el depósito, no hay WAPE que lo compense.

Como promedio ponderado. Se normalizan las métricas, se les ponen pesos y se suman. Es lo más común y tiene una trampa grande: la normalización decide el resultado. Dos métricas en unidades distintas, una con cola más larga que la otra, y la que tiene más varianza domina la suma sin que nadie lo haya elegido.

Como una sola pérdida que ya trae el compromiso adentro. Si lo que te importa es que quedarse corto cuesta más que pasarse, la pérdida por cuantil al nivel de servicio que uses dice exactamente eso. Es la mejor de las tres cuando el compromiso se puede poner en costos, porque el número que lo gradúa sale del negocio.

El nivel de agregación cambia el número: qué esperar en cada nivel

Un forecast tiene siempre tres coordenadas: qué se pronostica, a qué nivel y a qué distancia. Cambiar cualquiera de las tres cambia la métrica, y cambiarla para abajo es la forma más fácil de reportar un número lindo.

El mismo modelo, los mismos datos, la misma semana:

Nivel WAPE típico
SKU por tienda por día alto
SKU por tienda por semana bastante más bajo
SKU por región por mes más bajo todavía
Total compañía por mes muy bajo
SKU · tienda · día38%SKU · tienda · semana24%SKU · región · mes15%Total · mes8%
El mismo modelo, los mismos datos, cuatro números. Los errores de signo opuesto se cancelan a medida que agregás. El de arriba es el nivel al que se compra.

No hay magia: los errores de signo opuesto se cancelan entre sí a medida que agregás. Un WAPE del 8% a nivel compañía es compatible con un caos absoluto a nivel SKU-tienda, que es el nivel al que se compra.

Lo mismo pasa con el horizonte. Pronosticar la semana que viene es mucho más fácil que pronosticar dentro de doce semanas, y el número que importa es el del horizonte al que tomás la decisión. Si tu lead time es de ocho semanas, medir a una semana no te dice nada sobre la calidad de tus compras.

Hay un tercer eje que se olvida: cómo se promedia entre series. Hay dos formas y dan números distintos. El promedio micro junta todos los errores y todas las ventas del catálogo y recién ahí divide, con lo cual los productos grandes pesan más, que es lo que querés cuando el tema es plata. El promedio macro calcula el error de cada serie y promedia los resultados, con lo cual un SKU que vende tres unidades por mes pesa lo mismo que el que sostiene la categoría.

8%10%90%130%75%cinco SKUs: dos grandes, tres chicosPromedio simple63%lo mandan los chicosPonderado por volumen10%
Los mismos cinco SKUs, dos formas de promediar. El promedio simple lo deciden tres productos que casi no venden. Los dos números son ciertos y no se parecen en nada.

El promedio simple de los MAPE de mil SKUs es el segundo, y está dominado por los productos chicos, que son los que tienen porcentajes enormes. Si el reporte no dice cuál de los dos es, no se puede leer.

Cuando hay que resumir muchas series en un número, la mediana de los MASE o la media geométrica de los cocientes de error aguantan mucho mejor los casos extremos que cualquier promedio aritmético.

El error que importa cuando comprás para varias semanas

Si hacés un pedido que cubre las próximas cuatro semanas, lo que necesitás acertar es cuánto se va a vender en total en esas cuatro semanas, y las métricas semana a semana no siempre te lo dicen.

Un ejemplo inventado para verlo: la demanda real es de 100 unidades por semana durante cuatro semanas. El modelo A pronostica 80, 120, 80 y 120. El modelo B pronostica 110 todas las semanas.

Semana a semana80sem 1120sem 280sem 3120sem 4AB · 110real · 100Error por semana: A 20 · B 10Total de las cuatro semanas400real400A440BError sobre el total: A 0 · B +40
Por semana gana B, sobre el total gana A. B erra la mitad cada semana pero siempre para arriba, así que un pedido por las cuatro semanas compra 40 unidades de más.
Métrica Modelo A Modelo B
MAE semanal 20 10
WAPE semanal 20% 10%
Error sobre el total de cuatro semanas 0 40 (+10%)

Por semana, B tiene la mitad de error que A. Sobre el total, A acierta las 400 unidades y B te hace comprar 40 de más. Cuál de los dos te sirve depende de cómo comprás: si hacés un único pedido para todo el período, manda el total; si reponés todas las semanas, o si el quiebre de la semana 1 no se compensa con el sobrante de la semana 2 (la venta perdida ya se perdió), el reparto entre semanas también importa, y ahí A te deja corto una semana de cada dos.

La métrica que falta es simple: sumá la demanda real del horizonte, sumá el pronóstico, y tomá la diferencia en valor absoluto. Calculala para cada SKU y para cada fecha desde la que se pronosticó, y recién después agregala, con un esquema de pesos que quede dicho (por volumen, por valor). Sacar el valor absoluto antes de agregar es lo que evita que el sobrante de un SKU tape el faltante de otro, que es el mismo problema del promedio micro de más arriba, ahora entre productos. Es pariente del CFE: los dos miran lo que se acumula en vez del error de cada período.

\[\mathrm{E}_{H} = \left|\sum_{t=1}^{H} y_t - \sum_{t=1}^{H}\hat{y}_t\right|\]

Las medias se suman, los cuantiles no

Con pronósticos probabilísticos la cosa se pone más interesante. Si querés la demanda esperada de las cuatro semanas, podés sumar las medias semanales: la esperanza de una suma es la suma de las esperanzas, siempre, pase lo que pase entre semanas.

Con los cuantiles eso no vale. El P90 de la demanda total depende de cómo se mueven las semanas juntas, y sumar los P90 semanales te da el P90 del total solo en un caso extremo: que todas las semanas suban y bajen juntas, de forma perfecta. Cuando las semanas son más o menos independientes, una semana alta tiende a compensarse con una baja, y la suma de los P90 queda por encima del P90 del total.

Para ponerle número, con otro ejemplo inventado (demanda normal e independiente entre semanas): si cada semana tiene media 100 y desvío 20, el P90 semanal es de unas 126 unidades y sumar cuatro da 503. El total de las cuatro semanas tiene media 400 y desvío 40 (lo que se suma son las varianzas, no los desvíos), así que su P90 es de unas 451. Sumando cuantiles estarías comprando unas 50 unidades de más, con un nivel de servicio real cercano al 99,5% cuando creías estar apuntando al 90%. Si la demanda de las semanas está muy correlacionada, por una promo o una tendencia, la diferencia se achica, y cuánto se achica solo lo dice la distribución conjunta.

Lo que conviene es pronosticar directamente la demanda acumulada del lead time, o simular trayectorias de demanda coherentes semana a semana y tomar el cuantil de sus totales. Para evaluarlo sirven las mismas herramientas de más arriba: pérdida por cuantil sobre el total y cobertura de los intervalos del total.

Medir la decisión además del pronóstico

En inventario, quedarse corto y pasarse casi nunca cuestan lo mismo. Una unidad que falta es una venta perdida (y a veces un cliente); una que sobra es costo de tenencia, o una rebaja al final de la temporada.

El caso más simple, el del vendedor de diarios (una sola compra, sin segunda oportunidad), tiene una respuesta exacta: la cantidad óptima es el cuantil de la demanda que sale de dividir el costo de quedarse corto por la suma de los dos costos. Si una venta perdida te cuesta 30 de margen y una unidad sobrante te cuesta 10, el cociente es 30 / (30 + 10) = 0,75, y lo que conviene comprar es el P75 de la demanda, por encima de la media y de la mediana. Es la misma asimetría de la pérdida por cuantil, ahora con los dos precios del negocio.

Con \(c_u\) el costo de una unidad que falta y \(c_o\) el de una que sobra:

\[q^{*} = \frac{c_u}{c_u + c_o}\]

Las métricas puntuales siguen siendo el mejor diagnóstico de dónde falla el modelo, pero no contestan si la compra salió mejor. Para eso hay que simular la política de reposición entera sobre el pasado, con los lead times, el ciclo de revisión, los mínimos de compra y el stock que había, y medir lo que sale de ahí: quiebres, nivel de servicio, stock promedio y costo. Dos modelos con un WAPE parecido pueden dar resultados muy distintos en esa simulación, y es la única comparación que un comprador entiende sin traducción.

El error y el sesgo son cosas distintas

Esta es la distinción que más plata mueve y la que menos se mira.

Imaginá dos modelos sobre el mismo SKU. El primero se equivoca 20 unidades por semana, a veces para arriba y a veces para abajo. El segundo se equivoca 15 unidades por semana, siempre para arriba. El segundo tiene mejor WAPE, y es peor: te está acumulando 15 unidades por semana de stock que nadie pidió, y esa acumulación no aparece en ninguna métrica de error.

Error sin sesgoError con sesgoLa línea azul es el stock que se va acumulando
El de la derecha tiene mejor WAPE y es peor. Se equivoca menos cada semana, siempre para el mismo lado, y eso es stock que se acumula sin aparecer en ninguna métrica de error.

El bias es lo primero que hay que mirar, antes que cualquier otra cosa. Un bias sistemático casi siempre tiene una causa identificable: un feriado mal marcado, una promo que no entró al modelo, una serie censurada por quiebres, un cambio de mix que el modelo todavía no vio. Se arregla, y cuando se arregla, el error baja solo.

Un juego de relativos

El número absoluto casi nunca es la pregunta. Lo que se quiere saber es si el modelo aporta algo, y eso siempre se responde contra algo más.

Los baselines son gratis y son obligatorios: repetir el período anterior, repetir el mismo período del año pasado, una media móvil. Si tu modelo no le gana a los tres, no tenés un modelo, tenés una factura. MASE hace explícita esa comparación, y por eso es la mejor métrica para reportar hacia arriba: un número que ya viene con el baseline adentro no se puede leer mal.

Hay una versión de esta idea que va un paso más allá y que en supply chain vale oro: forecast value added. Se calcula dividiendo el error del modelo por el error del proceso contra el que compite y expresando la mejora en porcentaje. Lo interesante no es la fórmula, es contra qué se compara: el baseline no tiene por qué ser un naive estadístico, puede ser lo que hace hoy el equipo de planificación. El promedio de los últimos tres meses que arma el planner en su Excel es un baseline perfectamente válido, y la pregunta “¿cuánto mejor es esto que lo que ya hacemos?” es la única que contesta si vale la pena cambiar algo.

\[\mathrm{FVA} = \left(1 - \frac{E_{\text{modelo}}}{E_{\text{referencia}}}\right) \times 100\%\]
Naive estacionalLo que hace el planner hoyEl modeloesto es lo que agregáserror, en las unidades que sea
La comparación que importa no es contra el naive. Es contra lo que el equipo hace hoy: si el modelo no le gana a eso, no hay motivo para cambiar nada.

Dos advertencias que vienen con la idea:

  • Un baseline débil infla el valor agregado. Elegirlo es parte del resultado, así que se declara junto con el número.
  • Las razones no se promedian con un promedio aritmético. Va la media geométrica de los cocientes, que no la deforman los casos extremos.

El segundo relativo es contra el piso de la serie. Hay series que nadie puede pronosticar bien, y eso es una propiedad de la demanda, no del modelo. Un SKU que vende en ráfagas impredecibles tiene un error irreducible alto, y medirlo con la misma vara que a uno estable produce dos conclusiones falsas: que el modelo del intermitente es malo y que el del estable es bueno.

Por eso conviene clasificar el catálogo antes de medirlo. La clasificación clásica (Syntetos, Boylan y Croston) separa las series por qué tan seguido venden y qué tan variable es la cantidad cuando venden. Para las que caen en el cuadrante irregular, perseguir precisión puntual período a período es tiempo perdido: no hay señal que recuperar. Ahí la pregunta útil cambia de “cuánto erré” a “cuántas veces me quedé sin producto” y “cuánto me costó el error”, o sea nivel de servicio, fill rate y métricas de costo, que convierten el error en plata con los dos precios que ya conocés: lo que vale una venta perdida y lo que cuesta tener una unidad parada. Cómo medir cuánta señal tiene una serie, su forecastability, y qué conviene pedirle según eso, es el tema de un próximo post.

Para las series fáciles conviene lo contrario: exigir más. Si una serie estable y estacional no le gana cómodo al naive estacional, el problema es el modelo, no la demanda.

Nuestro MAPE es 12%.
Nuestro WAPE es 15%.
Nuestro WAPE es 15%, con un sesgo de +3%.
Nuestro WAPE es 15% por SKU y semana, a ocho semanas, contra un naive estacional que da 22%.

Qué métrica para qué decisión

Si querés… Mirá
Reportar la calidad del plan WAPE al nivel de decisión, más bias
Comparar entre SKUs o categorías MASE o RMSSE
Saber si el modelo aporta MASE contra el naive estacional
Elegir el modelo ganador Pérdida por cuantil, o RMSE si querés el centro
Decidir cuánto comprar Pérdida por cuantil y cobertura del intervalo
Evaluar un pedido que cubre varias semanas Error sobre el total del horizonte, y el cuantil del total
Saber si la compra salió mejor Simulación de la política: quiebres, servicio, stock, costo
Detectar que algo se rompió Tracking signal, y la evolución del error en el tiempo
Justificar el cambio de proceso Forecast value added contra lo que se hace hoy
Evaluar una serie intermitente Nivel de servicio, fill rate, costo
Elegir con varias métricas a la vez Descartar dominados, después decidir

Cómo medir: backtests con origen móvil y un holdout

Para medir un modelo hay que hacerlo pronosticar algo que no vio, y con series de tiempo la forma honesta es simular el pasado: elegís una fecha de corte, entrenás solo con lo que había hasta ese día, pronosticás las semanas siguientes y comparás contra lo que pasó. Después corrés la fecha de corte para adelante y repetís. Eso es un backtest con origen móvil, y cada corte es una ventana de evaluación (acá lo explica Nixtla con código, y acá Hyndman con más detalle).

holdoutcorte 1corte 2corte 3corte 4holdoutentrena con lo que había hasta el cortese evalúa
Cada corte entrena con el pasado y se evalúa en lo que sigue. Con los cortes se elige el modelo; el holdout, que nadie miró mientras se elegía, se evalúa una sola vez al final.

Se usan varios cortes porque un modelo que gana en uno y pierde en los otros tres tuvo suerte una vez. Además del promedio, mirá cómo se mueve la métrica de un corte a otro.

El holdout es el último tramo de la historia, y no se toca mientras elegís: ni para entrenar, ni para elegir el modelo, la métrica o los parámetros. Con los backtests elegís; con el holdout medís una sola vez, al final, cuánto rinde lo que elegiste. Si lo mirás para decidir algo, deja de ser holdout y el número que reportás sale optimista.

Dos cuidados más. Cada corte entrena solo con lo que se sabía ese día: un feriado cargado después o una corrección de ventas que se filtra al entrenamiento hace que el backtest prometa algo que en producción no aparece. Y cada ventana evalúa al horizonte de la decisión: si tu lead time es de ocho semanas, la ventana mide a ocho semanas.

Una alternativa: combinar en vez de elegir

Todo lo anterior da por sentado que al final hay que quedarse con un modelo. La alternativa es no elegir y armar un ensamble: un pronóstico que combina los de varios modelos.

El ensamble más simple promedia los pronósticos, o les toma la mediana, y suele ganarle a quedarse con el que mejor puntuó en el backtest. No es magia: el ganador de una corrida gana en parte por mérito y en parte por suerte, y la parte de suerte no se repite el mes que viene. Cuando combinás, los errores que cada modelo comete por su cuenta tienden a cancelarse, y se va también la varianza que mete la selección en sí misma. Es uno de los resultados más viejos y más replicados del área: Bates y Granger lo publicaron en 1969 y las competencias de forecasting lo vuelven a encontrar cada década.

Hay variantes más elaboradas: pesar cada modelo según cómo le fue en el backtest, promediar solo los mejores, o combinar distinto según el tipo de serie. Cada una abre preguntas propias: con qué pesos (iguales, por desempeño, reestimados cada cuánto), si conviene combinar por SKU o por grupo de comportamiento, y sobre todo qué pasa con los cuantiles, porque promediar distribuciones no es promediar números. Y el sesgo no se arregla solo: si todos tus modelos se equivocan para el mismo lado, el promedio también.

Cómo armar un buen ensamble es tema de otro post, y está en la lista.

Las fórmulas, una por una

Para tener a mano. Notación: \(y_t\) es la venta real del período \(t\), \(\hat{y}_t\) el pronóstico, \(n\) la cantidad de períodos evaluados, \(H\) el horizonte, \(T\) el largo de la historia de entrenamiento y \(m\) el período estacional (52 en datos semanales con estacionalidad anual). Cuando hay varias series, las sumas corren también sobre las series.

Dependientes de la escala

MAE, error absoluto medio. Se minimiza con la mediana.

\[\mathrm{MAE} = \frac{1}{n}\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|\]

MSE, error cuadrático medio. Se minimiza con la media; sus unidades son unidades al cuadrado, así que sirve más para entrenar que para reportar.

\[\mathrm{MSE} = \frac{1}{n}\sum_{t=1}^{n}\left(y_t - \hat{y}_t\right)^2\]

RMSE, la raíz del MSE: vuelve a las unidades del producto y sigue pesando mucho los errores grandes.

\[\mathrm{RMSE} = \sqrt{\frac{1}{n}\sum_{t=1}^{n}\left(y_t - \hat{y}_t\right)^2}\]

RMSLE, el RMSE sobre el logaritmo. Mide errores relativos, castiga más quedarse corto que pasarse y solo vale para valores no negativos.

\[\mathrm{RMSLE} = \sqrt{\frac{1}{n}\sum_{t=1}^{n}\Big(\ln(1+y_t) - \ln(1+\hat{y}_t)\Big)^2}\]

Porcentuales

MAPE. Indefinido cuando algún \(y_t\) es cero.

\[\mathrm{MAPE} = \frac{100\%}{n}\sum_{t=1}^{n}\left|\frac{y_t - \hat{y}_t}{y_t}\right|\]

sMAPE. Hay varias versiones; esta es la más común, acotada entre 0 y 200%.

\[\mathrm{sMAPE} = \frac{100\%}{n}\sum_{t=1}^{n}\frac{\left|y_t - \hat{y}_t\right|}{\left(|y_t| + |\hat{y}_t|\right)/2}\]

Sobre su asimetría vas a leer las dos cosas, y las dos son ciertas según qué quede fijo. Con la venta real fija, un pronóstico 20 unidades abajo da más error que uno 20 unidades arriba, que es lo que contamos más arriba. Con el pronóstico fijo pasa al revés, y por eso algunas documentaciones dicen que castiga más pasarse.

MAAPE. El arcotangente acota cada término entre 0 y \(\pi/2\): una venta cero con pronóstico positivo suma \(\pi/2\), y el caso de los dos en cero necesita una convención.

\[\mathrm{MAAPE} = \frac{1}{n}\sum_{t=1}^{n}\arctan\left(\left|\frac{y_t - \hat{y}_t}{y_t}\right|\right)\]

Ponderadas

WAPE. Se minimiza con la mediana y solo se indefine si la venta total es cero.

\[\mathrm{WAPE} = \frac{\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|}{\sum_{t=1}^{n}\left|y_t\right|}\]

Escaladas

MASE. El numerador se mide sobre el horizonte evaluado y el denominador es el error del naive estacional sobre la historia de entrenamiento. Se indefine si la serie es constante en entrenamiento.

\[\mathrm{MASE} = \frac{\dfrac{1}{n}\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|}{\dfrac{1}{T-m}\sum_{t=m+1}^{T}\left|y_t - y_{t-m}\right|}\]

RMSSE. Lo mismo con errores cuadráticos; se minimiza con la media.

\[\mathrm{RMSSE} = \sqrt{\frac{\dfrac{1}{n}\sum_{t=1}^{n}\left(y_t - \hat{y}_t\right)^2}{\dfrac{1}{T-m}\sum_{t=m+1}^{T}\left(y_t - y_{t-m}\right)^2}}\]

De dirección

Bias o error medio, con la convención que usamos nosotros (pronóstico menos real, así que positivo es pasarse). En la literatura clásica va al revés.

\[\mathrm{ME} = \frac{1}{n}\sum_{t=1}^{n}\left(\hat{y}_t - y_t\right)\]

CFE, el error acumulado, con la misma convención de signo.

\[\mathrm{CFE} = \sum_{t=1}^{n}\left(\hat{y}_t - y_t\right)\]

Tracking signal, el CFE dividido por la desviación absoluta media. Fuera de más o menos cuatro, hay sesgo sistemático.

\[\mathrm{TS} = \frac{\mathrm{CFE}}{\mathrm{MAD}}, \qquad \mathrm{MAD} = \frac{1}{n}\sum_{t=1}^{n}\left|y_t - \hat{y}_t\right|\]

Del horizonte

Error sobre el total del horizonte, para cada SKU y cada fecha de corte, antes de agregar.

\[\mathrm{E}_{H} = \left|\sum_{t=1}^{H} y_t - \sum_{t=1}^{H}\hat{y}_t\right|\]

Las medias se suman, los cuantiles no. Para la demanda \(Y_t\) de cada semana:

\[\mathbb{E}\left[\sum_{t=1}^{H} Y_t\right] = \sum_{t=1}^{H}\mathbb{E}\left[Y_t\right] \qquad\text{pero, en general,}\qquad Q_{0.9}\left(\sum_{t=1}^{H} Y_t\right) \neq \sum_{t=1}^{H} Q_{0.9}\left(Y_t\right)\]

Probabilísticas

Pérdida por cuantil (pinball) para el cuantil \(q\), con \(\hat{y}^{q}_t\) el cuantil pronosticado. En \(q = 0{,}5\) es la mitad del error absoluto.

\[\rho_q\left(y_t, \hat{y}^{q}_t\right) = \begin{cases} q\,\left(y_t - \hat{y}^{q}_t\right) & \text{si } y_t \geq \hat{y}^{q}_t \\[4pt] (1-q)\,\left(\hat{y}^{q}_t - y_t\right) & \text{si } y_t < \hat{y}^{q}_t \end{cases}\]

WQL, pérdida por cuantil ponderada: la suma sobre los cuantiles evaluados, dividida por la venta total. AutoGluon multiplica \(\rho_q\) por 2 para que, con el cuantil 0,5 solo, WQL dé exactamente el WAPE.

\[\mathrm{WQL} = \frac{\sum_{t=1}^{n}\sum_{q} 2\,\rho_q\left(y_t, \hat{y}^{q}_t\right)}{\sum_{t=1}^{n}\left|y_t\right|}\]

SQL, pérdida por cuantil escalada: lo mismo dividido por el denominador del MASE en vez de por la venta. Con el cuantil 0,5 solo, es el MASE.

\[\mathrm{SQL} = \frac{1}{n}\,\frac{\sum_{t=1}^{n}\sum_{q} 2\,\rho_q\left(y_t, \hat{y}^{q}_t\right)}{\dfrac{1}{T-m}\sum_{t=m+1}^{T}\left|y_t - y_{t-m}\right|}\]

CRPS, con \(F\) la distribución pronosticada. Es la pérdida por cuantil integrada sobre todos los cuantiles; si \(F\) es un solo número, da el error absoluto.

\[\mathrm{CRPS}(F, y) = \int_{-\infty}^{\infty}\Big(F(x) - \mathbb{1}\{x \geq y\}\Big)^2\,dx = 2\int_{0}^{1}\rho_q\left(y, F^{-1}(q)\right)\,dq\]

Cobertura de un intervalo \([L_t, U_t]\): la proporción de veces que la venta cayó adentro. Para un intervalo al 90% tiene que dar cerca de 0,9.

\[\mathrm{Cobertura} = \frac{1}{n}\sum_{t=1}^{n}\mathbb{1}\{L_t \leq y_t \leq U_t\}\]

Winkler para un intervalo al \((1-\alpha)\): el ancho, más una multa por cada unidad que la venta cayó afuera.

\[W_t = (U_t - L_t) + \frac{2}{\alpha}\left(L_t - y_t\right)\mathbb{1}\{y_t < L_t\} + \frac{2}{\alpha}\left(y_t - U_t\right)\mathbb{1}\{y_t > U_t\}\]

De la decisión

Forecast value added contra un proceso de referencia, con \(E\) la misma métrica de error para los dos.

\[\mathrm{FVA} = \left(1 - \frac{E_{\text{modelo}}}{E_{\text{referencia}}}\right) \times 100\%\]

Cuantil del vendedor de diarios, con \(c_u\) el costo de una unidad que falta y \(c_o\) el de una que sobra.

\[q^{*} = \frac{c_u}{c_u + c_o}\]

Para seguir leyendo

  • AutoGluon, Forecasting Metrics (v1.1.0). Las fórmulas de cada métrica tal como las implementa la librería, incluidas WQL y SQL.
  • Nixtla, Evaluation Metrics. Cuándo conviene y cuándo no cada métrica, con CRPS para pronósticos probabilísticos.
Seguir leyendo
Probalo con tus datos

Todo esto, sobre los números de tu empresa.

Corremos Supplai sobre el histórico de tu empresa y te mostramos qué da, sin que tengas que mover nada de tu operación.

Suscribite al blogUn mail cuando sale un artículo nuevo.