Módulo: cálculo de la estacionalidad¶
Resumen ejecutivo¶
Buena parte de los algoritmos de STOCK se basa en funcionalidades capaces de predecir la evolución futura o de «explicar» la pasada. Por ejemplo, pueden estimar cuánto se habría vendido de un producto si no hubiera habido un quiebre de stock de ese producto.
Ante todo, para que la cantidad perdida sea fiable, es muy importante determinar con precisión el período del quiebre de stock. Supongamos, por ejemplo, que el producto en cuestión es cerveza y que el quiebre ocurre durante el verano. Entonces la cantidad perdida será considerablemente mayor que si el quiebre hubiera ocurrido a mediados de febrero.
Para evitar tener que ejecutar todos los algoritmos de cálculo en cada análisis de quiebres de stock, creamos un módulo aparte que hace estos cálculos, y los demás algoritmos simplemente usan sus resultados.
El cálculo se basa en el principio de proyectar la estacionalidad de un ítem con la mayor exactitud posible. Si no tenemos suficiente información sobre el ítem, la estacionalidad se determina para todo el producto, para la categoría o incluso para todo el portafolio de la empresa. Todo ello es, por supuesto, configurable y ajustable.
El algoritmo puede identificar incluso temporadas extremas, como la Navidad, o ítems extremadamente estacionales, como los huevos de Pascua.
El módulo también es capaz de identificar y suprimir las llamadas temporadas falsas: ventas altas de forma aleatoria a lo largo de un año.
Descripción funcional¶
Entradas del algoritmo estacional¶
El algoritmo estacional necesita los siguientes datos, según se trate de un producto en una sola bodega o de un producto en todas las bodegas disponibles:
- Un producto en una bodega
- Serie temporal de un ítem en una bodega concreta
- Serie temporal del producto superior al que pertenece ese producto en la bodega concreta
- Serie temporal de una categoría superior configurable a la que pertenece el producto en la bodega
- Serie temporal de todas las ventas
- Producto
- Serie temporal del producto
- Serie temporal de una categoría superior configurable a la que pertenece el producto
- Serie temporal de todas las ventas
Cualquiera de las series temporales de entrada se puede desactivar y, por supuesto, en la configuración se seleccionan las categorías que se usan para determinar la estacionalidad.
Salida del algoritmo¶
Las salidas del algoritmo son los índices estacionales de todos los productos en stock. Los índices estacionales, a su vez, son arreglos de tamaño 12 y, para cada mes, determinan qué tan grandes fueron las ventas de ese mes en comparación con los demás. El índice estacional de un mes es, por lo tanto, la razón entre ese mes y el promedio de todos los meses.
Para un índice estacional S se cumple, por lo tanto, que:
- S < 1 – el mes estuvo por debajo del promedio
- S = 1 – el mes fue promedio
- S > 1 – el mes estuvo por encima del promedio
Por definición, la suma de los índices estacionales debe ser igual a 12.
Desarrollo del algoritmo de estacionalidad¶
Para explicar los algoritmos que intervienen en la estacionalidad, en el siguiente diagrama se muestra un resumen de ellos:
Leyenda de los índices estacionales:
- Índices agudos: índices estacionales sin suavizar y sin límites superior ni inferior.
- Índices fuertes: índices estacionales suavizados sin límites superior ni inferior.
- Índices débiles: índices estacionales suavizados con límites inferior y superior.
El principio en que se basa el algoritmo de estacionalidad¶
El algoritmo recorre las series temporales de entrada en el orden indicado arriba hasta que la serie temporal tenga datos suficientes. El algoritmo va subiendo así de nivel hasta disponer de datos suficientes. El requisito de datos suficientes en la serie temporal se define así:
- La serie temporal debe tener al menos un número determinado de meses (ahora 14 meses).
- La serie temporal debe tener ventas en al menos 5 meses, es decir, meses con un número de unidades vendidas > 0.
- La serie temporal tiene menos de 5 meses con ventas, pero un mes del calendario contiene más del 85 % de todas las ventas.
Una vez seleccionado el nivel, se procede a determinar los índices estacionales; estos índices se determinan únicamente con base en la serie temporal del nivel seleccionado. Se usan dos algoritmos para determinar los índices: un algoritmo que detecta temporadas agudas y el algoritmo clásico. Dado que las temporadas agudas son sensibles al suavizado que se usa en el algoritmo clásico, la serie temporal se presenta primero al algoritmo que detecta temporadas agudas. Si se confirma una temporada aguda, se usan los índices del algoritmo de temporada aguda; en caso contrario, la serie temporal se somete al algoritmo clásico y se aplican sus índices. El algoritmo de temporada aguda está configurado para activarse solo en determinadas temporadas, típicamente en Pascua y en Navidad. La mayoría de las series temporales se determinan, por lo tanto, con el «algoritmo clásico».
Algoritmo para una temporada aguda¶
Para este algoritmo, la serie temporal primero se debe ajustar, y ello se hace en los siguientes pasos:
- Si el histórico es más largo que 3 años, se recorta a 3 años.
- Se suaviza con ajuste de tendencia, para que los años más débiles no queden penalizados.
La serie temporal así ajustada se «superpone sobre sí misma por años» y, mediante un promedio, se determinan los índices estacionales. Por ejemplo, el índice estacional de enero se calcula como el promedio de todos los eneros de la serie temporal en todos los años.
A continuación se calcula un puntaje de estacionalidad para una serie temporal y sus índices estacionales; ese puntaje se usa en los cálculos posteriores. El puntaje de estacionalidad es una métrica que indica en qué medida los índices estacionales se ajustan a la serie temporal. Para la métrica se cumple lo siguiente: cuanto mayor es, más se corresponden los índices estacionales con la serie temporal. STOCK normalmente trabaja con el puntaje de estacionalidad mediante umbrales; por ejemplo, un algoritmo estacional anterior usaba la siguiente distribución de intervalos para determinar la estacionalidad:
- x < -1 – no estacional
- x >= -1 && x <0.8 – estacionalidad indefinida
- x >= 0.8 – estacional
Procedimiento exacto para medir el puntaje de estacionalidad
La entrada para calcular el puntaje de estacionalidad son los valores ajustados de la serie temporal y los índices estacionales resultantes para cada mes del calendario. Para describir el algoritmo usamos la siguiente notación:
- Gi – un conjunto de valores de un mes del calendario dado; G2, por ejemplo, es el conjunto de todos los valores de la serie temporal correspondientes a febrero.
- AVGi – el índice estacional del i-ésimo mes del calendario; AVG se usa para indicar el cálculo de los índices estacionales como promedios de los conjuntos Gi.
- STDi – la desviación estándar del i-ésimo mes del calendario, calculada a partir del conjunto Gi.
Cada índice estacional I, elemento de {1..12}, contribuye al puntaje de estacionalidad con su Addi, que se calcula de la siguiente manera:
Si se cumple la siguiente condición, la contribución se calcula como se describe abajo; en caso contrario, la contribución del índice estacional es Addi = 0.
- Gi es al menos 2
- Se cumple al menos una de las siguientes condiciones:
- El número de índices estacionales AVGi iguales a cero es menor o igual que 4
- AVGi - STDi > 0
Si se cumple la condición, la contribución del índice estacional se determina de la siguiente manera:
- Si AVGi> = 1, entonces la contribución del índice estacional es Addi = AVGi - STDi - 1
- Si AVGi < 1, entonces la contribución del índice estacional es Addi = 1 - (AVGi + STDi)
El puntaje de estacionalidad final S es igual a la suma de todas las contribuciones de los índices estacionales, acotadas superiormente por 5. El puntaje de estacionalidad se calcula, por lo tanto, así:
I es un elemento de {1..12}
S = sumi(min(addi,5))
Uso de los índices estacionales de una temporada aguda
Los índices estacionales calculados por el algoritmo que detecta temporadas agudas se usan si se cumple una de las siguientes condiciones:
- Condición para Pascua
- La serie temporal tiene al menos 500 ventas.
- La serie temporal debe abarcar al menos dos temporadas de Pascua, es decir, las ventas son altas en el mes de Pascua propiamente dicho, pero en el mes siguiente son débiles.
- Condición estándar
En el texto de la condición estándar, los índices estacionales se refieren al arreglo resultante de tamaño 12; el i-ésimo índice corresponde al índice estacional del i-ésimo mes del calendario.
- El puntaje de estacionalidad descrito arriba es mayor que el umbral (ahora fijado en 4.0).
- Al menos un índice estacional es mayor que el umbral (ahora fijado en 4.0).
- Al menos 8 índices estacionales son menores que el umbral (ahora fijado en 0.5).
- Los índices estacionales contienen una sola «colina», es decir, todos los índices mayores que el umbral (ahora fijado en 0.05) forman un único bloque contiguo sin huecos, o bien forman dos bloques contiguos sin huecos, uno de los cuales empieza en enero y el otro termina en diciembre. La segunda condición permite tener una colina entre diciembre y enero.
El «algoritmo clásico»¶
Para este algoritmo, la serie temporal primero se debe ajustar, y ello se hace en los siguientes pasos:
- Si el histórico es más largo que 3 años, se recorta a 3 años.
- Ajuste para recortar los valores muy bajos.
- Suavizado con promedio móvil ponderado (0.25, 0.50, 0.25).
- Se suaviza con ajuste de tendencia, para que los años más débiles no queden penalizados.
La serie temporal así ajustada se «superpone sobre sí misma por años» y, mediante un promedio, se determinan los índices estacionales. Por ejemplo, el índice estacional de enero se calcula como el promedio de todos los eneros de la serie temporal en todos los años.
Los índices estacionales descritos arriba se calculan para todas las series temporales, pero no todas las series temporales tienen por qué tener índices estacionales finitos. En concreto, en las series no estacionales con ventas altas aleatorias nos encontramos con índices demasiado altos que, a su vez, tienen un mal efecto sobre el funcionamiento de ciertos algoritmos de STOCK. Por eso la serie temporal se somete a una prueba para confirmar su estacionalidad. Si la prueba resulta exitosa, el resultado de todo el algoritmo son índices fuertes; en caso contrario, son índices débiles.
- Índices fuertes: índices en bruto tal como se calcularon, sin ningún ajuste.
- Índices débiles: índices calculados por los algoritmos y ajustados de modo que solo adquieran los valores límite definidos (ahora fijados de 0.7 a 1.3). El efecto estacional sobre estos índices queda suprimido, pero no puede desaparecer del todo. Esto es, de hecho, una ventaja sobre todo para aquellas series temporales que son casos límite, en la frontera de la estacionalidad. La limitación de los índices, por otro lado, ayuda con las series temporales no estacionales y esporádicas.
Confirmación de la estacionalidad en el algoritmo clásico
Repitamos de nuevo que el resultado del algoritmo de estacionalidad es un índice fuerte o bien un índice débil. Qué índices se usan lo determina el algoritmo que confirma la estacionalidad. Este algoritmo se rige de forma estándar por las siguientes reglas:
- Primero selecciona todas las cimas de las «colinas» de los índices estacionales que sean mayores que el umbral definido (ahora fijado en 2.0).
- Para que se confirme la estacionalidad, para cada cima de la colina debe haber al menos dos años en los que - el índice estacional del mes de la cima fuera mayor que el umbral definido (ahora fijado en 1.5). - las ventas del mes de la cima deben ser mayores que una quinta parte de las mayores ventas de ese mes en alguno de los años: esto garantiza que una venta pequeña y aleatoria no se acepte como temporada.
Existe, sin embargo, una excepción para confirmar la estacionalidad en los meses definidos en la configuración. Para los meses fijados en la configuración se aplican reglas más débiles de confirmación de la estacionalidad. Por ejemplo, se considera suficiente una sola temporada confirmada. Esta configuración se usa para detectar de forma más eficaz la estacionalidad de la Navidad.
Configuración¶
En la configuración hay dos ajustes importantes.
El primero consiste en determinar el tipo de categoría que se aplica después para determinar la estacionalidad por categoría. Puede elegir cualquier categoría de producto, aunque idealmente lo más cerca posible del producto dado en el árbol de productos, para asegurar que los productos de la misma categoría tengan el mismo comportamiento estacional. Por ejemplo, en el sector automotriz no podemos elegir la categoría “llantas”, sino solo una subcategoría, ya que solo en la subcategoría aparece la división entre llantas de verano y de invierno.
El segundo ajuste consiste en determinar cuáles meses se deben considerar estacionales, a pesar de que algorítmicamente esos meses no presenten todas las características de la estacionalidad. La configuración predeterminada es diciembre para la Navidad, y febrero y marzo para la Pascua. Si vendemos, digamos, juguetes y resulta que algunos de los productos tienen ventas fuertes en diciembre, no es una casualidad: tenemos que aceptarlo como un hecho, aunque las ventas de ese mismo producto hayan sido muy débiles el año pasado.