Leia nosso artigo sobre

.

Como escolher as visualizações certas e implementá-las no Streamlit para depurar melhor seus modelos de previsão

TL; DR

Ao lidar com modelos de previsões, a melhor abordagem costuma ser iterar continuamente, adicionando algumas fontes de data, aprimorando a engenharia de recursos, ajustando os parâmetros do modelo... Na maioria das vezes, os cientistas de Data tendem a ser fixados em apenas um KPI (Ou seja. RMSE, Precisão da previsão...). Muitas vezes, há muito mais informações por trás desses KPIs que precisam ser analisadas para melhorar a previsão. A criação de uma ferramenta de visualização adequada é uma ótima maneira de se aprofundar no comportamento do modelo, identificar rapidamente os pontos problemáticos do seu modelo e, assim, aumentar a precisão de forma eficiente.

Este artigo desenvolverá as principais perguntas que devem ser feitas ao avaliar um modelo de previsão, depois apresentará as visualizações obrigatórias para responder a essas perguntas e, por fim, proporá uma implementação rápida em uma ferramenta unificada para reunir todas essas visualizações usando o Streamlit.

Contexto

Este artigo resume o que aprendemos com a criação de uma ferramenta de visualização unificada para ajudar os cientistas Data, engenheiros de software, proprietários de produtos e planejadores de demanda (especialistas em negócios) a desenvolver modelos de previsão de vendas para mais de 10 unidades de negócios em uma empresa de alimentos e bebidas. Nossos modelos fizeram previsões em nível de Diário x Armazém x Produto, para as próximas 14 semanas. Eles foram desenvolvidos com o uso de métodos de boosting e levam em conta as características do produto, o histórico de vendas, os eventos e o data promocional.

Principais perguntas a serem feitas ao avaliar um modelo de previsão

1. O modelo é bom em comparação com a linha de base?
Ter acesso a previsões atuais (por exemplo, previsões do planejador de demanda) no mesmo escopo é muito útil. Isso permite uma boa compreensão do comportamento dos negócios em um período, produto ou local específico. Quanto mais o senhor entrevistar a empresa, mais obterá insights e mais poderá implementar os recursos certos.

2. Perseguição de previsões excessivas ou insuficientes e quedas na precisão da previsão
As perguntas obrigatórias são: Eu capto a tendência global? O modelo capta eventos recorrentes conhecidos, como feriados, fechamento de armazéns, férias escolares? Há alguma queda de precisão em determinados períodos?
Por que isso é importante?

  • Se o modelo fizer previsões exageradas, ele induzirá o aumento do estoque e, portanto, dos custos de estoque.
  • Se o modelo fizer uma previsão insuficiente, ele induzirá a períodos de falta de estoque, perdendo assim oportunidades de vendas e diminuindo a satisfação do cliente.

Identificar esses eventos é uma ótima maneira de obter previsões mais precisas e eficientes. Esses eventos geralmente são bem conhecidos pelos planejadores de demanda e bastante simples de implementar em seu modelo quando o senhor tem as informações. Por exemplo, em muitas de nossas unidades de negócios, alguns produtos eram vendidos para a merenda escolar. A introdução e a preparação de um recurso que representasse as férias escolares levaram a um grande aumento em nossa precisão nesses períodos específicos.

3. Lidar com as especificidades do produto
Meu desempenho é homogêneo em minhas marcas/famílias de produtos? Há alguma outra distinção entre meus produtos (produtos vendidos somente durante períodos de promoções, produtos mais vendidos versus produtos de baixo volume, produtos)?
Por que isso é importante?

  • Para validar o bom comportamento do modelo em todo o escopoDependendo da necessidade comercial, pode ser exigida uma precisão mínima em todo o escopo.
  • Identificar produtos críticos, que podem ser analisados com mais precisão e, assim, ganhar em precisão.

Essas perguntas ajudam o senhor a entender o negócio com mais precisão. Por exemplo, a divisão de modelos com base na importância dos produtos em termos de volume geralmente leva ao aumento do desempenho. De fato, a demanda por produtos regulares é muito diferente da demanda por produtos promocionais ou menos comuns, que podem estar altamente correlacionados com períodos de promoção ou ter um perfil de vendas muito esparso. Na maioria dos nossos casos, treinamos modelos distintos para lidar com esses diferentes tipos de produtos.

4. Os efeitos constitutivos são levados em conta corretamente?
O modelo está capturando corretamente os efeitos das promoções? Há efeitos de canibalização? O modelo se adapta bem a fenômenos exógenos (ex.: greves)?
Por que isso é importante?

  • Na maioria dos casos, as promoções são uma parte importante para impulsionar a demanda e podem levar a grandes picos de vendas data.
  • Isso pode levar a grandes fenômenos de desperdício e falta de estoque.
  • Um modelo mais realista que leve em conta efeitos sofisticados provavelmente será adotado por seus futuros usuários.

O senhor pode consultar o artigo anterior de nossa série Forecasting Series para abordar a promoção data: 5 dicas para levar em conta o data promocional

Como analisar seu modelo de previsão: dos macro-KPIs à avaliação em um escopo específico

Quais são as visualizações obrigatórias?
Para criar sua ferramenta de avaliação, o senhor deve combinar dois elementos:

  • Uma peça de filtro para avaliar o desempenho em um escopo específico
  • Um conjunto de visualizações para identificar rapidamente os eixos de melhoria

A parte do filtro deve permitir a filtragem em vários eixos: período de análise, locais (varejista, depósito...), produtos (um conjunto de produtos) e, por fim, categorias de produtos.
Recomendamos pelo menos as 4 visualizações a seguir:

  • Primeiro, o evolução do volume previsto, O senhor pode ver o relatório de vendas, com as informações sobre as vendas reais. Esse é o mais compreensível e o primeiro a ser analisado. Ela ajuda o senhor a entender seu modelo: meu modelo está captando a tendência global? Ele está prevendo demais ou de menos? Eu capto os picos e as quedas?

  • Em segundo lugar, o evolução da precisão da previsão. Dependendo da forma como a precisão da previsão é calculada, esse número pode ser necessário para completar o primeiro. Esse número ajuda o senhor a identificar rapidamente os períodos de ponto problemático em suas previsões e, portanto, indica em que período deve se aprofundar.
  • Terceiro, alguns KPIs bem representados para Calcular a precisão da previsão em diferentes escopos. Recomendamos que o senhor divida sua precisão em diferentes níveis: depósitos, níveis de categoria de produto, produtos e até mesmo misture esses eixos de análise (por exemplo, para criar um mapa de calor da precisão da previsão em cada depósito x categorias de produto). Novamente, isso ajuda o senhor a encontrar produtos ou localizações críticas.
  • O último é o avaliação da contribuição. Para entender exatamente como seu modelo funciona, o senhor precisa avaliar os recursos mais usados. Os modelos clássicos de TS (ARIMA & Co., Prophet, ...) propõem a decomposição de recursos de forma nativa. Para métodos de reforço (XGBoost, CatBoost, LightGBM...), estruturas como SHAP são muito úteis para modelar com precisão o comportamento em cada característica. A representação dessa contribuição nos períodos ajuda o senhor a avaliar qual fenômeno está impulsionando a previsão em determinado momento.

Como começar a criar o painel do seu estúdio de previsão usando o Streamlit?

Streamlit é uma biblioteca python de código aberto para criar aplicativos da Web compartilháveis em minutos e ainda está ganhando popularidade na comunidade científica Data. Neste artigo, não apresentaremos a ferramenta, pois muitos artigos já estão disponíveis sobre esse tópico, mas nos concentraremos na implementação fácil de uma visualização.
A escolha de usar o Streamlit para esse tipo de projeto foi motivada por vários pré-requisitos:

  • O Streamlit torna o painel MVP muito fácil de configurar.
  • Totalmente integrável em um projeto científico Data. Como suas páginas do Streamlit serão escritas em Python, o senhor poderá usar as funções do seu projeto principal. Por exemplo, se o senhor tiver desenvolvido uma biblioteca para acessar suas preparações, tabelas de referência e previsões do data, poderá usá-las diretamente no código do painel.
  • Compartilhável com muitos usuários, expondo seu painel de controle em uma porta de sua máquina remota ou implantando-o em soluções como App Engine, Cloud Run ...

1. Estrutura global de seu painel de previsão
Antes de mergulhar na implementação, o pré-requisito para criar um painel é desenhar as partes do seu aplicativo.

Para que sua implementação seja limpa, o senhor pode dividir o código em várias partes:

  • O painel principal que o senhor pode iniciar com streamlit run forecasting_studio_app.py
  • As páginas distintas (EDA simples em seu dataset de treinamento, análise de previsão, contribuição de recursos,...)
  • Scripts Lib para reunir sua preparação para o data / números para cada página

├── config.py
├── forecasting_studio
│ ├── previsão_análise
│ │ └── fig_forecast_analysis.py
│ └── páginas
│ └── forecast_analysis.py
└── forecasting_studio_app.py

A página principal definirá a estrutura global do aplicativo, ou seja, o layout global do aplicativo: no nosso caso, um layout amplo e uma barra lateral para exibir o nome do aplicativo e as páginas disponíveis.

importação iluminado como st
de forecasting_studio.páginas importação forecast_analysis
PÁGINAS =
def write_page(página):
página.escrever()
def principal():
st.barra lateral.título("Forecasting Studio" (Estúdio de previsão)")
seleção = st.barra lateral.caixa de seleção("", lista(PÁGINAS.chaves()))
página = PÁGINAS[seleção]
write_page(página)
se __name__ == "__main__":
st.set_page_config(layout="largo")
principal()

O arquivo de configuração, que reúne as cores e as diferentes configurações de todas as figuras do Plotly.

X_AXIS_TEMPLATE = ditar(linha de exibição=Verdadeiro,
Mostrar grade=Falso,
showticklabels=Verdadeiro,
cor da linha=“cinza”,
largura de linha=2,
carrapatos=“externo”,
tickfont=ditar(família=“Arial”, tamanho=12, cor=“rgb(82, 82, 82)”))
Y_AXIS_TEMPLATE = ditar(linha de exibição=Verdadeiro,
Mostrar grade=Verdadeiro,
cor da linha=“cinza”,
cor da grade=“lightgrey” (cinza claro)”)
LEGENDA = ditar(orientação=“h”, âncora=“bottom” (fundo)”, y=1.02, xanchor=“direito”, x=1)
COLORDISCRETE = [“#002244”, “#ff0066”, “#66cccc”, “#ff9933”, “#337788”,
“#429e79”, “#474747”, “#f7d126”, “#ee5eab”, “#b8b8b8”]

2.Construção “Evolução da visualização da precisão da previsão”
Primeiro, reuniremos nossas figuras do Plotly em um script:

importação pandas como pd
de digitação importação Lista
importação plotagem.objetos_gráficos como ir
de configurar importação COLORDISCRETE, LEGENDA, X_AXIS_TEMPLATE, Y_AXIS_TEMPLATE
def fig_evolution_of_fa(forecasts_per_target_date: pd.DataFrame,
eventos: Lista = Nenhum) -> ir.Figura:
“””Figura que representa a evolução da Precisão da Previsão
no período de backtest
Parâmetros
----
previsões_por_data_alvo : pd.DataFrame
Previsão dataset contendo pelo menos 3 colunas :
- ‘target_date’ : a data para a qual o senhor faz a previsão
- ‘forecast_accuracy’ : seu KPI de precisão
- ‘week_nb’ : ID da semana (de 0 a 52)
- (opcional) ‘demand_planner_forecast_accuracy’ : sua previsão de linha de base
Chave primária : ‘target_date’ (data_alvo)’
eventos : Lista, opcional
uma lista de pares de datas, representando períodos, por padrão None
“””
fig_fa_score = ir.Figura()
fig_fa_score.add_trace(
ir.Dispersão(
nome=“Precisão da previsão do modelo”,
x=forecasts_per_target_date[‘target_date’ (data_alvo)’],
y=forecasts_per_target_date[‘forecast_accuracy’ (precisão da previsão)’],
hovertext=forecasts_per_target_date[‘week_nb’],
marker_color=COLORDISCRETE[0]))
# Se o senhor tiver uma linha de base, poderá adicionar uma coluna adicional ao seu
# dataset para exibi-lo em um gráfico de linhas
se ‘demand_planner_forecast_accuracy’ em forecasts_per_target_date.colunas:
fig_fa_score.add_trace(
ir.Dispersão(
nome=“Precisão da previsão dos planejadores de demanda”,
x=forecasts_per_target_date[‘target_date’ (data_alvo)’],
y=forecasts_per_target_date[‘demand_planner_forecast_accuracy’],
hovertext=forecasts_per_target_date[‘week_nb’],
marker_color=COLORDISCRETE[2]))
fig_fa_score.update_xaxes(alcance=(min(forecasts_per_target_date[‘target_date’ (data_alvo)’]),
máximo(forecasts_per_target_date[‘target_date’ (data_alvo)’])))
fig_fa_score.update_traces(modo=‘lines+markers’ (linhas+marcadores)’, forma de linha=‘spline’)
fig_fa_score.update_layout(
xaxis_title=“Data-alvo”,
yaxis_title=“FA Score” (Pontuação FA)”,
plot_bgcolor=‘branco’,
lenda=LEGENDA,
eixo x=X_AXIS_TEMPLATE,
eixo y=Y_AXIS_TEMPLATE)
se eventos:
fig_fa_score.update_layout(
formas=[get_vertical_filled_area(segmento[0], segmento[1], ‘rgb(102, 204, 204)’)
para segmento em eventos])
retorno fig_fa_score
def get_vertical_filled_area(iniciar: flutuar, fim: flutuar, cor: str = “azul”) -> ditar:
“””Return a plotly vertical shape dict, used to highlight events on figures”””
retorno ditar(tipo=“rect”,
xref=“x”,
yref=“papel”,
x0=iniciar,
y0=0,
x1=fim,
y1=1,
cor de preenchimento=cor,
camada=“abaixo”,
line_width=0,
opacidade=0.5)

Finalmente, implementaremos nossa página de análise de previsão, que carregará nosso dataset, distribuirá nossos números em diferentes colunas, ...

importação pandas como pd
importação iluminado como st
de forecasting_studio.forecast_analysis.fig_forecast_analysis importação fig_evolution_of_fa
def escrever() -> Nenhum:
st.título(‘Forecast Analysis’ (Análise de previsão)’)
df = pd.read_csv(‘your_dataset.csv’)
# O senhor pode carregar aqui alguns eventos personalizados para exibir
# ex : events = [(‘2019-07-01’, ‘2019-09-01’), (‘2020-07-01’, ‘2020-09-01’)].
eventos = Nenhum
evo_cont1, evo_cont2 = st.beta_columns(2)
evo_cont1.subtítulo(‘Evolução da precisão da previsão’)
fig_evo_fa = fig_evolution_of_fa(df, eventos)
evo_cont1.plolty_fig(fig_evo_fa)
se __name__ == “__main__”:
escrever()

Tadam! Aqui está nosso aplicativo :

Vamos dar uma olhada na figura apresentada. Com relação aos pontos anteriores que discutimos, aqui estão os pontos principais de nossa figura:

  • Primeiro, ele nos permite identificar rapidamente as semanas para as quais nosso modelo não é preciso: Dezembro parece ser um mês complicado de prever. O final de nosso período de backtest também é um problema para nosso modelo. Precisamos discutir com a empresa para entender quais efeitos estão determinando essas semanas e, consequentemente, adaptar o modelo.
  • A figura também tem um parâmetro chamado “events” (eventos), uma lista de pares de datas, que representa eventos globais e nos permite destacar eventos como feriados escolares. Podemos perceber rapidamente que nossa pior semana é uma semana de feriado. Talvez alguns armazéns tenham fechado durante esse período, ou os clientes tenham feito mais pedidos do que o normal para preparar o início do ano... Mais uma vez, os proprietários de empresas podem certamente adicionar um olho externo nessas semanas.
  • Como o senhor pode ver, são exibidas duas séries. No nosso caso, ela representa a precisão do nosso modelo e do modelo da Demand Planners no mesmo período. Com relação à figura, podemos ver que as piores semanas também são semanas complicadas para a Demand Planners. A maior queda em abril foi bem prevista por nosso modelo. O final do período de backtest parece mais complicado para nosso modelo, enquanto a precisão dos planejadores de demanda parece estável.

Conclusão:

  • A EDA é fundamental para avaliar seu modelo de previsão
  • Agrupar todos os seus números em um único painel permite que o senhor se concentre nas iterações e, assim, ganhe em eficiência
  • O painel permite que o senhor se concentre nos escopos principais e identifique rapidamente os eixos de melhoria.
  • O senhor acabou de implementar a estrutura principal do seu painel, vá em frente e adicione novos números!

Depois de criar sua ferramenta de visualização, é hora de implementá-la. Aqui está um ótimo recurso para compartilhar seu aplicativo: Como implementar e proteger seu aplicativo Streamlit no GCP?

Muito obrigado por ler até agora. Se o senhor tiver alguma dúvida, não hesite em entrar em contato. O senhor pode saber mais sobre nossos projetos visitando nossa blog.

Média Blog por Artefact.

Este artigo foi publicado inicialmente no Medium.com.
Siga-nos em nosso Medium Blog !