lección 6
Suavizado exponencial: el caballo de batalla
La familia que mueve el forecasting de negocio: suavizado simple, con tendencia (Holt) y con estacionalidad (Holt-Winters), y el peso que decae.
⏱ 50 min
Si tuvieras que apostar qué método de pronóstico está ahora mismo prediciendo la demanda de más almacenes, el stock de más tiendas y las ventas de más productos en el mundo, no apostarías por una red neuronal ni por nada con nombre de moda. Apostarías por una familia de técnicas que nació en los años cincuenta, que se puede explicar en una tarde, y que lleva setenta años ganándose el sueldo sin hacer ruido: el suavizado exponencial. Las grandes cadenas de distribución que calculan reaprovisionamiento para decenas de miles de referencias no lo hacen con lo último que salió en un paper; lo hacen con esto, porque es rápido, es robusto, no necesita apenas datos para arrancar y, sobre todo, bate a las líneas base con una fiabilidad que los métodos más vistosos envidiarían.
Ya tienes contra qué compararlo. Sabes que un pronóstico no vale nada hasta que bate al adversario trivial —"igual que ayer", "igual que la semana pasada"—, y sabes medir ese error con una vara que entiendes. El suavizado exponencial es el primer método que, bien usado, bate a esas líneas base de forma consistente, y lo hace con una idea tan sencilla que vas a entenderla antes de ver una sola fórmula. La idea es esta: para predecir el futuro, mira todo el pasado, pero no le des la misma importancia a todo. Lo reciente pesa más. Lo antiguo pesa menos, y cada vez menos, hasta desvanecerse.
## El problema con la media móvil, y la idea que lo arregla
Para entender por qué el suavizado exponencial es tan bueno conviene ver primero qué falla en lo que ya conoces. La media móvil que usas para extraer la tendencia tiene dos defectos como herramienta de pronóstico. El primero: trata por igual a todos los días de su ventana. Si predices mañana con la media de los últimos siete días, el día de hace una semana pesa exactamente lo mismo que ayer, lo cual es raro, porque la intuición dice que ayer debería importar más para adivinar mañana. El segundo: lo que queda fuera de la ventana desaparece de golpe. El día número ocho hacia atrás pesa cero, como si no hubiera existido, mientras que el séptimo pesa tanto como ayer. Esa frontera brusca no tiene ningún sentido: el pasado no deja de importar de un día para otro, se va difuminando.
El suavizado exponencial arregla las dos cosas con una sola idea: en vez de una ventana con frontera, usa todos los datos del pasado, pero asignándole a cada uno un peso que decae a medida que se aleja en el tiempo. Ayer pesa mucho. Anteayer, un poco menos. Hace tres días, menos todavía. Y así hasta que los días muy antiguos pesan tan poco que su contribución es despreciable, aunque nunca llega a ser exactamente cero. Los pesos no caen en escalón, caen en una curva suave, y esa curva tiene una forma concreta —exponencial— que es la que da nombre al método. El resultado es un pronóstico que da la importancia justa a cada momento del pasado: toda la que merece lo reciente, cada vez menos a lo lejano, y nada se corta de cuajo.
## El parámetro alfa: cuánta memoria tiene el pronóstico
La velocidad a la que decaen esos pesos la controla un único número, que por convención se llama alfa y vive entre 0 y 1. Es el único mando del método en su versión más simple, y entenderlo es entender el método entero. Alfa mide cuánta importancia le das al dato más reciente frente a toda la historia acumulada. Un alfa alto, cercano a 1, significa que el pronóstico hace mucho caso al último valor y olvida rápido el pasado: reacciona deprisa a los cambios, pero también se deja arrastrar por el ruido de un día raro. Un alfa bajo, cercano a 0, significa que el pronóstico apenas se mueve con cada dato nuevo y conserva mucha memoria: es estable y suave, pero tarda en reaccionar cuando la serie cambia de verdad.
Es el mismo intercambio que aparece una y otra vez en este oficio, con otra cara: reaccionar rápido contra ser estable. Un alfa alto es un pronóstico nervioso que persigue cada movimiento; un alfa bajo es un pronóstico tranquilo que puede quedarse atrás. No hay un valor universalmente bueno: depende de cuánto de lo que ves día a día es señal real y cuánto es ruido. Si la serie es ruidosa y su nivel cambia despacio, interesa un alfa bajo que no se deje engañar por el ruido. Si la serie cambia de nivel a menudo y de verdad, interesa un alfa más alto que lo siga. La buena noticia es que no tienes que adivinarlo: la herramienta puede buscar el alfa que minimiza el error sobre tus datos, igual que cualquier otro parámetro se ajusta midiendo.
Conviene entender de dónde salió todo esto, porque explica por qué es tan robusto. El suavizado exponencial se formalizó a finales de los años cincuenta, en plena posguerra, para un problema muy concreto y muy poco glamuroso: controlar inventarios. Un investigador llamado Robert Brown trabajaba para la Marina estadounidense calculando cuántas piezas de repuesto pedir, con miles de referencias y ordenadores que no tenían ni memoria ni potencia para guardar historiales largos. Necesitaba un método que diera buenos pronósticos guardando poquísima información y haciendo pocas cuentas. El suavizado exponencial era perfecto: para predecir solo necesita el último pronóstico y el último dato real, no todo el historial. Esa frugalidad, que nació de una limitación de hardware, resultó ser también la razón de su robustez, y es por lo que sigue vivo cuando el hardware ya no es ninguna limitación.
1import numpy as np2import pandas as pd3from statsmodels.tsa.holtwinters import SimpleExpSmoothing45# Serie que oscila alrededor de un nivel estable, con ruido6np.random.seed(42)7serie = pd.Series(50 + np.random.normal(0, 6, 60))89# Suavizado exponencial SIMPLE con dos alfas distintos10alfa_bajo = SimpleExpSmoothing(serie).fit(smoothing_level=0.1, optimized=False)11alfa_alto = SimpleExpSmoothing(serie).fit(smoothing_level=0.8, optimized=False)1213# El alfa bajo suaviza mas: su serie ajustada varia menos que la del alfa alto14var_bajo = alfa_bajo.fittedvalues.std()15var_alto = alfa_alto.fittedvalues.std()16print(f"El alfa bajo (0.1) da una curva mas estable: {var_bajo < var_alto}")17print(f"Ambos pronostican {len(alfa_bajo.forecast(5))} pasos cuando se les pide 5")
SimpleExpSmoothing con alfa fijo: un alfa bajo produce una curva más estable que uno alto, que persigue el ruido
## Añadir la tendencia: el método de Holt
El suavizado exponencial simple tiene una limitación que salta a la vista en cuanto lo pruebas con una serie que crece: su pronóstico es plano. Como solo estima un nivel, cuando le pides que prediga varios pasos hacia delante repite ese nivel una y otra vez, una línea horizontal. Para una serie que oscila alrededor de un valor estable, perfecto. Para una serie con tendencia, un desastre: si las ventas llevan meses subiendo, predecir que el mes que viene serán iguales que este mes es ignorar justo lo que está pasando. Hacía falta una extensión que capturara también la dirección, y la propuso Charles Holt a finales de los cincuenta, casi a la vez que Brown.
La idea de Holt es elegante: en vez de suavizar solo el nivel, suaviza por separado dos cosas, el nivel y la tendencia. El nivel sigue siendo "¿dónde está la serie ahora?", y la tendencia añade "¿y hacia dónde se mueve, cuánto sube o baja por paso?". Cada una tiene su propio parámetro de suavizado: alfa para el nivel, y uno nuevo, beta, para la tendencia. Beta controla cuánta memoria tiene la estimación de la pendiente, igual que alfa la del nivel. Con las dos piezas, el pronóstico ya no es plano: proyecta el último nivel más tantos pasos de la tendencia estimada como quieras predecir. Si la serie sube de media 20 unidades por mes, Holt predice el mes que viene como el nivel actual más 20, el siguiente como el nivel más 40, y así. El método de Holt es, en esencia, suavizado exponencial que sabe que las cosas se mueven.
## Añadir la estacionalidad: Holt-Winters
Falta la tercera pieza, la que ya sabes que domina casi cualquier serie de negocio: la estacionalidad. Un alumno de Holt, Peter Winters, completó el método en 1960 añadiendo un tercer componente que se suaviza por separado, con su propio parámetro —gamma— y su propia memoria. El resultado, conocido como Holt-Winters o suavizado exponencial triple, estima tres cosas a la vez y las actualiza con cada dato nuevo: el nivel, la tendencia y el patrón estacional. Para pronosticar, combina las tres: toma el nivel actual, le suma los pasos de tendencia que correspondan al horizonte, y le aplica el factor estacional del periodo que toque. Es la versión completa, la que se usa de verdad para pronosticar ventas, demanda y tráfico con estacionalidad.
Y aquí reaparece una decisión que ya tomaste al descomponer una serie: la estacionalidad, ¿suma o multiplica? Holt-Winters tiene las dos variantes, aditiva y multiplicativa, y la elección sigue exactamente el mismo criterio de antes. Si las olas estacionales mantienen la misma altura a lo largo del tiempo, la variante aditiva. Si las olas crecen a medida que sube el nivel de la serie —el caso típico de las series de negocio en expansión, donde "diciembre vende un 40% más" en vez de "2.000 unidades más"—, la variante multiplicativa. No es un detalle menor: elegir mal entre las dos hace que el pronóstico infraestime o sobreestime sistemáticamente los picos a medida que la serie crece. El criterio que aprendiste mirando el dibujo de la serie —¿crecen las olas o no?— es el mismo que decide la variante de Holt-Winters.
Consejo de senior: cuando elijas entre las variantes de suavizado, deja que el problema te guíe en vez de ir directo a la más completa. Si la serie no tiene tendencia ni estacionalidad, el suavizado simple ya es suficiente y añadir componentes solo mete ruido. Si tiene tendencia pero no estacionalidad, Holt. Si tiene las tres, Holt-Winters. Meterle a Holt-Winters una serie sin estacionalidad real no la mejora: le pides que estime un patrón estacional que no existe, y acabará modelando ruido como si fuera señal. El método más potente no es el mejor por defecto; el mejor es el que tiene exactamente las piezas que tu serie tiene, ni una más.
1import numpy as np2import pandas as pd3from statsmodels.tsa.holtwinters import ExponentialSmoothing45# Dos anios de ventas mensuales: tendencia creciente + estacionalidad anual6np.random.seed(42)7meses = pd.date_range("2024-01-01", periods=24, freq="MS")8tendencia = np.linspace(1000, 1600, 24)9estacional = np.array([0, -40, 20, 60, 90, 50, -60, -120, -30, 50, 120, 260] * 2)10ventas = pd.Series(tendencia + estacional + np.random.normal(0, 20, 24), index=meses)1112# Holt-Winters aditivo: nivel + tendencia + estacionalidad de periodo 1213modelo = ExponentialSmoothing(14 ventas, trend="add", seasonal="add", seasonal_periods=1215).fit()1617# Pronostico de los proximos 12 meses18pred = modelo.forecast(12)1920# Comprobaciones estructurales: cuantos pasos, y que el pico de diciembre21# (ultimo mes del pronostico) supera al valle de agosto22print(f"Pronostica {len(pred)} meses")23print(f"El diciembre pronosticado supera al agosto pronosticado: {pred.iloc[11] > pred.iloc[7]}")24print(f"El pronostico sigue la tendencia al alza: {pred.mean() > ventas[-12:].mean()}")
ExponentialSmoothing con trend y seasonal ajusta Holt-Winters completo; se comprueba la forma del pronóstico, no sus valores
## Por qué sigue siendo el caballo de batalla
Con todo lo que ha pasado en setenta años de métodos de pronóstico, llama la atención que una familia de los años cincuenta siga siendo la primera opción en tantísimos sitios. La razón no es nostalgia ni pereza: es que gana donde importa. El suavizado exponencial necesita muy pocos datos para empezar a dar pronósticos razonables, cosa que los métodos hambrientos de datos no pueden decir. Es rapidísimo de ajustar, lo que importa muchísimo cuando tienes que pronosticar cien mil referencias cada noche. Es robusto: no se descarrila con facilidad, no exige que la serie cumpla condiciones complicadas, y cuando falla, falla de forma predecible. Y es interpretable: puedes mirar el nivel, la tendencia y la estacionalidad que ha estimado y entender qué está haciendo, en vez de confiar en una caja negra.
La lección de fondo es una que ya conoces de todo el oficio, aplicada aquí: la complejidad no es gratis, y rara vez es necesaria. El modelo más elaborado del catálogo no es el mejor por serlo; el mejor es el que resuelve tu problema con la menor complejidad posible, porque esa simplicidad se traduce en robustez, en velocidad, en que lo entiendas y en que lo pueda mantener la persona que venga detrás. El suavizado exponencial es el ejemplo perfecto de esta idea convertida en herramienta, y por eso merece ser lo primero que pruebes cuando tengas que pronosticar algo de verdad.
Existe, eso sí, otro gran enfoque del pronóstico clásico que ataca el problema desde un ángulo distinto. En vez de descomponer la serie en nivel, tendencia y estacionalidad y suavizar cada pieza, parte directamente de la memoria de la serie —esa dependencia entre el valor de hoy y los anteriores que ya aprendiste a medir con la autocorrelación— y la convierte en una receta de predicción. Es la otra gran familia, la que reúne todas las piezas que has ido acumulando en este recorrido —la diferenciación para la estacionariedad, la ACF y la PACF para la memoria— en un único modelo. Eso es lo que viene ahora.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...
Regístrate para guardar tu progreso.