Predicción de la demanda en S&OP utilizando modelos estadísticos

Teniendo en cuenta que algunos países en Latinoamérica buscan la participación de las empresas del sector privado y pluralidad de oferentes en las compras que hace el estado, han creado mecanismos de agregación de la demanda es el caso de Colombia que a través de su Tienda Virtual del Estado Colombiano ofrece a las Entidades Estatales el catálogo del gran almacenes, que han participado a través de procesos públicos donde fijan precios según los requerimientos y dependiendo el tiempo de adquisición se firman contratos marco que permiten tener un cliente fijo durante un espacio de tiempo.

A través de la información suministrada por https://colombiacompra.gov.co/ se procedió a realizar un análisis del comportamiento de las compras a través de esta agregación de demanda, permitiendo conocer el comportamiento año a año, haciendo un pronóstico de las posibles compras que podrían realizar para el 2022.

S&OP para la ejecución de la estrategia de negocio

Con el fin de que “sales & operation planning”, o planeación de ventas y operaciones, realice un proceso integral en la toma de decisiones de negocio, buscando un mejor balance de la demanda y suministro, alinear las diferentes áreas que conforman con la estrategia competitiva del negocio con un horizonte y un tiempo señalado, la analítica de datos nos permite tener una mejor visión de la realidad y un pronostico del comportamiento futuro, donde se realiza a través de procesos matemáticos y estadísticos un modelado de la información acercándonos al comportamiento de los datos del pasado y plasmándolos en el futuro.

Proceso ETL para el manejo de los datos

Utilizando como lenguaje de programación Python, herramienta para realizar el proceso ETL (extracción, transformación y carga) y su análisis, se procedió a descargar los datos de interés. Dicha información correspondía a compras realizadas por varias entidades en el mes y diferenciadas con una variable llamada estados; realizando un proceso de inspección se observo que las compras que eran efectivas correspondían a las emitidas.

import pandas as pd

Col_uso=['Fecha','Total','Estado']

GVentas=pd.read_csv('Grandes_Superficies.csv', sep = ',',usecols=Col_uso)

GVentas=GVentas.loc[GVentas.loc[:, 'Estado'] == 'Emitida']

GVentas=GVentas.drop(['Estado'], axis=1)

Logrado el paso de extracción y con el fin de tener un mayor control y se procedió a agrupar los datos por trimestre.

GVentas=GVentas.resample('3M').mean()

El propósito de esta agrupación se debe a que las variables externas que pueden en algún momento participar en la variación de la demanda, como el producto interno bruto (PIB) y la inflación son medidas por trimestre, y reportado al mes del periodo anterior.

Visualización y comportamiento de los datos

Procedemos a realizar una revisión visual de los datos, a través de un gráfico de linea de tiempo, donde vemos el comportamiento de la serie el cual tiene una tendencia lineal positiva, así mismo podemos revisar en el histograma la variación de los datos y frecuencia en ellos.

Visualización de la serie de datos

Debemos revisar la auto correlación existente y hacer los ajustes necesarios del modelo, para así proseguir con el procesos de modelado.

Pruebas estadísticas

Utilizando el modulo de Python de statsmodels Observamos una alta correlación entre los datos y la dependencia,  como lo vemos en los gráficos ACF y PACF, procedemos a analizar la serie de datos , donde podemos deducir que si tomamos el valor de significación de 5% que corresponde a 2.98 podemos rechazar la hipótesis nula=no estacionario , es decir que la serie de datos es estacionaria.

Si realizamos el análisis con el P valor correspondiente 0,02 siendo menor menor que el valor de significación 5% (0.05) podemos decir que es estacionarios y los retrasos son iguales a 0.

Dentro de la observaciones hechas y la aplicación de las pruebas estadísticas podemos observar que tenemos valores atípicos que se siguen presentando, por ello debemos ajustar los datos para proseguir con el modelado.

KPis de pronóstico para la selección del modelo

Luego de las correcciones a la serie de datos y teniendo un mayor conocimiento de su comportamiento en el tiempo se procedió a realizar un análisis de modelos que podían ajustarse a las características de los datos, el código realizado con ayuda de las librerías de numpy y sklearn, se muestra a continuación:

DIF=testeo-modelo

Bias=np.mean(DIF)

#print('BIAS: {:.3f}'.format(Bias))

Mape=mean_absolute_percentage_error(testeo,modelo)

#print('MAPE: {:.3%}'.format(Mape))

Mae=mean_absolute_error(testeo,modelo)

#print('MAE: {:.3f}'.format(Mae))

Rmse= np.sqrt(mean_squared_error(testeo,modelo))

#print('RMSE: {:.2f}'.format(Rmse))

Codigo fuente de KPis

Como resultado Obtuvimos los valores de las KPis y el modelo que mejor se ajusta a nuestra serie de datos teniendo en cuenta que el interés estos se ajusten al promedio y la mediana de la demanda donde optaremos por seleccionar los valores de las KPis de RMSE y el MAE, pero también podemos observar que el MAPE también nos proporciona un menor valor de KPis.

Resultado de Kpis

Suavizado exponencial triple aditivo

El modelo utilizado con el fin de lograr un pronostico asertivo, se trabajo con un suavizado exponencial triple aditivo, utilizando la librería statsmodels.tsa.holtwinters.

from statsmodels.tsa.holtwinters import ExponentialSmoothing

ExponentialSmoothing(GVentas['Ventas'[0:].values,trend=’add’,seasonal=’add’,seasonal_periods=4).fit()

Búsqueda de valores atípicos de los datos

Observamos valores atípicos, que debemos corregir antes de poner el modelo a trabajar, a continuación se presenta la gráfica que nos muestra el comportamiento del modelo, antes de hacer la corrección.

Grafica del comportamiento del modelo
Datos arrojados por el modelo

Corrección del modelo

A medida que trabajamos los pronósticos con diferentes modelos, notamos que se presentan valores atípicos siendo una amenaza real para las cadenas de suministro, los puntos altos o bajos dan resultados inesperados en nuestro pronóstico, ocasionando efectos látigo, pedidas, stock muerto, entre otros; Por ello procedemos a realizar un suavizado de los errores, causados por comportamientos extraños o reducción de existencias.

Modelo ajustado para la realización del pronostico

Conclusión

Se observo que los datos tienen un comportamiento estacional anual que corresponde a los procesos adjudicados después de un proceso de licitación y los valores atípicos dependen de la variabilidad del mercado y las necesidades apremiantes generadas por procesos de menor cuantía, como resultado podemos ver para los siguientes tres periodos un comportamiento equivalente a los años anteriores donde se ve una alza representativa cada dos años, que puede deberse a contratos marcos con una duración máxima de este periodo de años.

Resultado de la previsión
Previsión de futuras compras en Billones de pesos

Finalizando, podemos observar que las compras futuras para el periodo de 30 de Abril de 2022 es de 20 Billones de pesos Colombianos, equivalente a un poco mas de los cinco millones de dólares, a una tasa de 3,939.71 pesos por dólar, debemos tener en cuenta que puede haber un error cercano al 11%.

Al cierre de la edición de este artículo se presento un crecimiento mucho mayor para el primer trimestre presentado por la sobredemanda, ocasionada por la re-activación económica, una alza de precios de cerca del 50% frente al año anterior. Este es un claro ejemplo del efecto látigo y de que en estos casos los pronósticos tienden a fallar por que están ajustados para situaciones normales y de ahí la necesidad de ir ajustándolos y prestar atención a estos tipo de valores atípicos, que en futuras previsiones ocasionaran errores al no ser corregidos.

Leave a Reply

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Close

Meta