Lea nuestro artículo sobre

.

Cómo elegir las visualizaciones adecuadas e implementarlas en Streamlit para depurar mejor sus modelos de previsión

TL; DR

Cuando se trata de modelos de previsiones, el mejor enfoque suele ser iterar continuamente, añadiendo algunas fuentes de data, mejorando la ingeniería de características, retocando los parámetros del modelo... La mayoría de las veces los científicos de Data tienden a fijarse en un solo KPI (es decir. RMSE, Precisión de la previsión...). A menudo hay mucha más información detrás de esos KPI que es necesario analizar para mejorar la predicción. Crear una herramienta de visualización adecuada es un gran medio para profundizar en el comportamiento del modelo, detectar rápidamente los puntos débiles de su modelo y ganar así en precisión de forma eficaz.

Este artículo desarrollará las preguntas clave que uno debe hacerse a la hora de evaluar un modelo de previsión, después presentará las visualizaciones imprescindibles para responder a estas preguntas y, por último, propondrá una implementación rápida bajo una herramienta unificada para reunir todas estas visualizaciones utilizando Streamlit.

Contexto

Este artículo resume lo que aprendimos construyendo una herramienta de visualización unificada para ayudar a Data Científicos, Ingenieros de Software, Propietarios de Producto y Planificadores de la Demanda (expertos comerciales) a desarrollar modelos de previsión de ventas para más de 10 unidades de negocio en una empresa de alimentación y bebidas. Nuestros modelos realizaban previsiones a nivel Diario x Almacén x Producto, para las próximas 14 semanas. Se desarrollaron utilizando métodos de boosting, y tienen en cuenta las características de los productos, las ventas históricas, los eventos y las data promocionales.

Preguntas clave para evaluar un modelo de previsión

1. ¿Es bueno el modelo en comparación con la línea de base?
Tener acceso a las predicciones actuales (por ejemplo, las previsiones del planificador de la demanda) en el mismo ámbito es muy útil. Permite comprender bien el comportamiento del negocio en un periodo, un producto o una ubicación concretos. Cuanto más entreviste al negocio, más conocimientos obtendrá y más podrá implementar las funciones adecuadas.

2. Persecución de pronósticos excesivos o insuficientes y caídas en la precisión de las previsiones
Las preguntas obligadas son: ¿Capta la tendencia global? ¿Capta el modelo los acontecimientos recurrentes conocidos como vacaciones, cierre de almacenes, vacaciones escolares? ¿Tengo algunas caídas de precisión en periodos concretos?
¿Por qué es importante?

  • Si el modelo sobrepredice, induce un aumento de las existencias y, por tanto, de sus costes.
  • Si el modelo infraprevé, induce periodos de falta de existencias, con lo que se pierden oportunidades de venta y disminuye la satisfacción del cliente.

Detectar este tipo de eventos es una excelente manera de alcanzar predicciones eficientemente más precisas. A menudo son bien conocidos por los planificadores de la demanda y bastante sencillos de implementar en su modelo cuando dispone de la información. Por ejemplo, en muchas de nuestras unidades de negocio, algunos productos se vendían para los almuerzos escolares. Introducir y preparar una característica que representara las vacaciones escolares hizo que aumentara mucho nuestra precisión en estos periodos concretos.

3. Tratar las especificidades de los productos
¿Es mi rendimiento homogéneo en las marcas / familias de mis productos? ¿Existen otras distinciones entre mis productos (productos vendidos sólo en periodos de promociones, productos superventas frente a productos de bajo volumen, productos )?
¿Por qué es importante?

  • Validar el buen comportamiento del modelo en todo el ámbitoEn función de las necesidades de la empresa, puede exigirse una precisión mínima en todo el ámbito.
  • Identificar los productos críticos, que pueden analizarse con mayor precisión, y ganar así en exactitud.

Estas preguntas le ayudan a comprender el negocio con mayor precisión. Por ejemplo, la división de los modelos en función de la importancia de los productos en términos de volumen conduce a menudo a aumentar el rendimiento. En efecto, la demanda de productos habituales es muy diferente de la demanda de productos promocionales o menos habituales, que pueden estar muy correlacionados con los periodos de promoción o tener un perfil de ventas muy disperso. En la mayoría de nuestros casos, entrenamos modelos distintos para abordar esos diferentes tipos de productos.

4. ¿Se tienen en cuenta correctamente los efectos constitutivos?
¿Capta correctamente el modelo los efectos de las promociones? ¿Existen efectos de canibalización? ¿Se adapta bien el modelo a los fenómenos exógenos (por ejemplo, las huelgas)?
¿Por qué es importante?

  • En la mayoría de los casos, las promociones son una parte importante para impulsar la demanda y pueden dar lugar a grandes picos de ventas data.
  • Puede dar lugar a grandes fenómenos de despilfarro / falta de existencias.
  • Un modelo más realista que tenga en cuenta efectos sofisticados tendrá más probabilidades de ser adoptado por sus futuros usuarios.

No dude en consultar el artículo anterior de nuestra serie de previsiones para abordar la promoción data: 5 consejos para tener mejor en cuenta la promoción data

Cómo analizar su modelo de previsión : de los macro-KPI a la evaluación en un ámbito específico

¿Cuáles son las visualizaciones imprescindibles?
Para construir su herramienta de evaluación, debe combinar dos elementos :

  • Una pieza de filtro para evaluar el rendimiento en un ámbito específico
  • Un conjunto de visualizaciones para detectar rápidamente los ejes de mejora

La parte de filtrado debe permitir filtrar sobre varios ejes: periodo de análisis, ubicaciones (minorista, almacén...), productos (un conjunto de productos) y, por último, categorías de productos.
Recomendamos al menos las 4 visualizaciones siguientes:

  • En primer lugar, el evolución del volumen previsto, con la información sobre las ventas reales. Es la más comprensible y la primera que hay que mirar. Le ayuda a entender su modelo: ¿está mi modelo captando la tendencia global? ¿Predice por exceso o por defecto? ¿Atrapo los picos y las caídas?

  • En segundo lugar, la evolución de la precisión de las previsiones. Dependiendo de la forma en que se calcule la precisión de la previsión, esta cifra puede ser necesaria para completar la primera. Esta cifra le ayuda a detectar rápidamente los periodos de dolor en sus previsiones y, por tanto, le indica en qué periodo debe profundizar.
  • En tercer lugar, algunos KPI bien representados para calcule su Precisión de Pronóstico en diferentes alcances. Le recomendamos dividir su precisión en diferentes niveles: almacenes, niveles de categorías de productos, productos, e incluso mezclar esos ejes de análisis (por ejemplo, para crear un mapa de calor de la precisión de la previsión en cada almacén x categorías de productos). De nuevo, le ayuda a encontrar la localización o los productos críticos.
  • El último, es el evaluación de la contribución. Para comprender con precisión cómo funciona su modelo, necesita evaluar las características más utilizadas. Los modelos clásicos de TS (ARIMA & Co., Prophet, ...) proponen la descomposición de características de forma nativa. Para los métodos de boosting (XGBoost, CatBoost, LightGBM...) se utilizan marcos como SHAP son muy útiles para modelizar con precisión el comportamiento de cada característica. Representar esa contribución en los periodos le ayuda a evaluar qué fenómeno está impulsando su previsión en cada momento.

¿Cómo empezar a construir su cuadro de mandos del estudio de previsión utilizando Streamlit?

Streamlit es una biblioteca python de código abierto para crear aplicaciones web compartibles en cuestión de minutos y sigue ganando popularidad en la comunidad científica Data. En este artículo no presentaremos la herramienta, pues ya hay muchos artículos disponibles sobre este tema, sino que nos centraremos en la fácil implementación de una visualización.
La elección de utilizar Streamlit para este tipo de proyecto estuvo motivada por varios requisitos previos :

  • Streamlit hace que un cuadro de mando MVP sea muy fácil de configurar.
  • Totalmente integrable en un proyecto científico Data. Dado que sus páginas Streamlit estarán escritas en Python, podrá utilizar las funciones de su proyecto central. Por ejemplo, si ha desarrollado una lib para acceder a sus preparaciones, tablas de referencia y predicciones data, podrá utilizarlas directamente en el código de su cuadro de mandos.
  • Compartible con muchos usuarios, exponiendo su cuadro de mandos en un puerto de su máquina remota o desplegándolo en una solución como App Engine, Cloud Run ...

1. Estructura global de su cuadro de mando de previsiones
Antes de sumergirse en la implementación, el requisito previo para construir un cuadro de mando es dibujar las partes de su aplicación.

Para ser limpio en su implementación, puede dividir su código en varias partes:

  • El cuadro de mandos básico que puede lanzar con streamlit ejecutar forecasting_studio_app.py
  • Las distintas páginas (EDA simple sobre su formación dataset, análisis de previsiones, contribución de características,...)
  • Scripts Lib para recoger su data-preparación / cifras para cada página

├── config.py
├── forecasting_studio
│├── forecast_analysis
││└── fig_forecast_analysis.py
│└── páginas
│└── forecast_analysis.py
└── forecasting_studio_app.py

La página principal configurará la estructura global de su aplicación, es decir, el diseño global de su aplicación: en nuestro caso, un diseño ancho, y una barra lateral para mostrar el nombre de su aplicación y las páginas disponibles.

importar streamlit como st
de estudio_previsiones.páginas importar análisis_previsiones
PÁGINAS =
def escribir_página(página):
página.escriba a()
def principal():
st.barra lateral.título("Estudio de previsiones")
selección = st.barra lateral.selectbox("", lista(PÁGINAS.llaves()))
página = PÁGINAS[selección]
escribir_página(página)
si __name__ == "__main__":
st.set_page_config(diseño="ancho")
principal()

El archivo de configuración, que recogemos los colores y diferentes configuraciones para todas sus figuras Plotly.

PLANTILLA_EJE_X = dic(showline=Verdadero,
showgrid=Falso,
mostrar etiquetas=Verdadero,
linecolor=“gris”,
ancho de línea=2,
garrapatas=“fuera”,
tickfont=dic(familia=“Arial”, tamaño=12, color=“rgb(82, 82, 82)”))
Y_AXIS_TEMPLATE = dic(showline=Verdadero,
showgrid=Verdadero,
linecolor=“gris”,
gridcolor=“gris claro”)
LEYENDA = dic(orientación=“h”, yanchor=“fondo”, y=1.02, xanchor=“derecha”, x=1)
COLORDISCRETE = [“#002244”, “#ff0066”, “#66cccc”, “#ff9933”, “#337788”,
“#429e79”, “#474747”, “#f7d126”, “#ee5eab”, “#b8b8b8”]

2.Edificio “Evolución de la visualización de la precisión de las previsiones”
Primero reuniremos nuestras cifras Plotly en un guión:

importar pandas como pd
de escribiendo importar Lista
importar plotly.objetos_gráficos como vaya a
de config importar COLORDISCRETE, LEYENDA, PLANTILLA_EJE_X, Y_AXIS_TEMPLATE
def fig_evolution_of_fa(previsiones_por_fecha_objetivo: pd.DataFrame,
eventos: Lista = Ninguno) -> vaya a.Figura:
“””Figura que representa la evolución de la precisión de las previsiones
en el periodo de backtest
Parámetros
----
previsiones_por_fecha_objetivo : pd.DataFrame
Previsión dataset que contiene al menos 3 columnas :
- ‘target_date’ : la fecha para la que realiza la previsión
- ‘exactitud_previsiones’ : su KPI de exactitud
- ‘semana_nb’ : ID de la semana (de 0 a 52)
- (opcional) ‘exactitud_previsión_planificador_demanda’ : su previsión de referencia
Clave primaria : ‘target_date’
eventos : Lista, opcional
una lista de un par de fechas, que representan periodos, por defecto Ninguna
“””
fig_fa_score = vaya a.Figura()
fig_fa_score.add_trace(
vaya a.Dispersión(
nombre=“Precisión de las previsiones del modelo”,
x=previsiones_por_fecha_objetivo[‘fecha_objetivo’],
y=previsiones_por_fecha_objetivo[‘precision_prevision’],
hovertext=previsiones_por_fecha_objetivo[‘semana_nb’],
marcador_color=COLORDISCRETE[0]))
# Si dispone de una línea de base, puede añadir una columna adicional a su
# dataset para visualizarlo en un gráfico de líneas
si ‘exactitud_previsiones_planificador_demanda’ en previsiones_por_fecha_objetivo.columnas:
fig_fa_score.add_trace(
vaya a.Dispersión(
nombre=“Precisión de las previsiones de los planificadores de la demanda”,
x=previsiones_por_fecha_objetivo[‘fecha_objetivo’],
y=previsiones_por_fecha_objetivo[‘exactitud_previsiones_planificador_demanda’],
hovertext=previsiones_por_fecha_objetivo[‘semana_nb’],
marcador_color=COLORDISCRETE[2]))
fig_fa_score.actualizar_ejes(gama=(min(previsiones_por_fecha_objetivo[‘fecha_objetivo’]),
max(previsiones_por_fecha_objetivo[‘fecha_objetivo’])))
fig_fa_score.actualizar_huellas(modo=‘líneas+marcadores’, forma_de_línea=‘spline’)
fig_fa_score.actualizar_disposición(
xaxis_title=“Fecha objetivo”,
yaxis_title=“Puntuación FA”,
plot_bgcolor=‘blanco’,
leyenda=LEYENDA,
eje x=PLANTILLA_EJE_X,
eje y=Y_AXIS_TEMPLATE)
si eventos:
fig_fa_score.actualizar_disposición(
formas=[get_vertical_filled_area(segmento[0], segmento[1], ‘rgb(102, 204, 204)’)
para segmento en eventos])
devuelva fig_fa_score
def get_vertical_filled_area(inicie: float, fin: float, color: str = “azul”) -> dic:
“””Devuelve un dictado de formas verticales trazadas, utilizado para resaltar eventos en las figuras”””
devuelva dic(tipo=“rect”,
xref=“x”,
yref=“papel”,
x0=inicie,
y0=0,
x1=fin,
y1=1,
fillcolor=color,
capa=“debajo”,
anchura_de_línea=0,
opacidad=0.5)

Finalmente implementaremos nuestra página de análisis de previsiones, que cargará nuestro dataset, distribuirá nuestras cifras en diferentes columnas, ...

importar pandas como pd
importar streamlit como st
de estudio_previsiones.análisis_previsiones.fig_previsión_análisis importar fig_evolution_of_fa
def escriba a() -> Ninguno:
st.título(‘Análisis de previsiones’)
df = pd.leer_csv(‘su_dataset.csv’)
# Puede cargar aquí algunos eventos personalizados para mostrarlos
# ex : eventos = [(‘2019-07-01’, ‘2019-09-01’), (‘2020-07-01’, ‘2020-09-01’)].
eventos = Ninguno
evo_cont1, evo_cont2 = st.columnas_beta(2)
evo_cont1.subencabezado(‘Evolución de la precisión de las previsiones’)
fig_evo_fa = fig_evolution_of_fa(df, eventos)
evo_cont1.plolty_fig(fig_evo_fa)
si __name__ == “__main__”:
escriba a()

¡Tadam ! Aquí está nuestra aplicación :

Echemos un vistazo a la figura presentada. En relación con los puntos anteriores que hemos tratado, he aquí los puntos clave de nuestra figura :

  • En primer lugar, nos permite detectar rápidamente las semanas para las que nuestro modelo no es preciso: Diciembre parece ser un mes complicado de pronosticar. El final de nuestro periodo de backtest también es un problema para nuestro modelo. Tenemos que discutir con la empresa para entender qué efectos están gobernando esas semanas, y adaptar el modelo en consecuencia.
  • La figura tiene también un parámetro llamado “eventos”, una lista de pares de fechas, que representan eventos globales y nos permiten destacar acontecimientos como las vacaciones escolares. Podemos detectar rápidamente que nuestra peor semana es una semana de vacaciones. Tal vez algunos almacenes cerraron durante este periodo, o los clientes hicieron más pedidos de lo habitual para preparar el comienzo del año... De nuevo, los empresarios pueden añadir sin duda un ojo externo a esas semanas.
  • Como puede ver, se muestran dos series. En nuestro caso, representa la precisión de nuestro modelo y el de Demand Planners en el mismo periodo. En cuanto a la figura, podemos ver que las peores semanas son también semanas complicadas para Demand Planners. La mayor caída en abril ha sido bien pronosticada por nuestro modelo. El final del periodo de backtest parece más complicado para nuestro modelo, mientras que la precisión de Demand Planners parece estable.

Conclusión:

  • EDA es clave a la hora de evaluar su modelo de previsión
  • Agrupar todas sus cifras en un único cuadro de mandos le permite centrarse en las iteraciones y ganar así en eficacia
  • El cuadro de mandos le permite centrarse en los ámbitos clave, detectar rápidamente los ejes de mejora.
  • Acaba de implementar la estructura central de su cuadro de mandos, ¡siga adelante y añada nuevas cifras!

Una vez que haya construido su herramienta de visualización, es hora de desplegarla. Aquí tiene un gran recurso para compartir su aplicación : ¿Cómo desplegar y asegurar su Streamlit App en GCP?

Muchas gracias por leer hasta aquí, no dude en ponerse en contacto con nosotros si tiene alguna pregunta. Puede encontrar más información sobre nuestros proyectos visitando nuestro blog.

Medio Blog por Artefact.

Este artículo se publicó inicialmente en Medium.com.
¡Síganos en nuestro Medium Blog !