Leia nosso artigo sobre

.

Este guia o ajudará a descobrir se o Prophet é adequado ou não para o seu projeto de previsão, fornecendo-lhe uma opinião crítica com base em uma lente de projeto real. Nós o testamos em três dimensões principais: engenharia e modelagem de recursos, interpretabilidade e manutenção.

Testamos o Prophet em um projeto real, em três aspectos principais: engenharia de recursos, interpretabilidade e uso na produção e manutenção, e aqui estão nossas conclusões:

Engenharia e modelagem de recursos:

  • Um tratamento nativo dos recursos de tendência e sazonalidade, o que torna o Prophet um bom modelo de linha de base se a série temporal seguir ciclos comerciais.
  • No entanto, se o sinal for ruidoso, o ajuste fino do desempenho do modelo pode ser um incômodo.

Interpretabilidade:

  • Graças à divisão nativa da previsão em componentes de tempo, as decisões do modelo são fáceis de interpretar
  • No entanto, não é suficientemente preciso para ser usado para medir o impacto de um evento externo

Estabilidade dos resultados / Manutenção:

  • O Prophet fornece um modelo interpretável com bom desempenho em um tempo muito curto
  • No entanto, se o senhor se preocupa com a estabilidade e a precisão da previsão, considere usar outro tipo de algoritmo, como modelos baseados em árvores.

Introdução

Recentemente, um artigo apontou que Facebook Prophet estava tendo um desempenho ruim em alguns casos extremos. De fato, esse pacote é tão popular que tende a ser considerado como a ferramenta ideal para todos os casos de uso de previsão. Isso deu início a um debate na comunidade e o até mesmo seu criador reagiu.
Há muita literatura sobre como fazer uma única previsão com o Prophet. Mas há falta de feedback empírico sobre como ele se comporta na produção, quando o senhor precisa fornecer previsões diariamente. Testamos e comprovamos essa ferramenta por 6 meses em um projeto comercial real. Aqui estão algumas conclusões.

Usamos o Prophet para prever as chegadas de chamadas em centrais telefônicas para uma das maiores empresas de telecomunicações da Europa, para otimizar a qualidade do atendimento ao cliente.

Aplicamos o Estrutura GLADS para elaborar nossa abordagem data:

  • AlvoNúmero de chamadas recebidas
  • GranularidadeO senhor pode escolher entre: dia/zona geográfica/nível de habilidades do agente (por exemplo, assistência técnica de telefone celular).
  • Horizonte: 5 meses (M+5)
  • Frequência: atualização diária
  • SKU: habilidades de agente

Uma restrição importante foi a necessidade de interpretabilidade de resultados. Na verdade, nossas previsões são consumidas por planejadores humanos cujo objetivo é manter um SLA (X% de chamadas devem ser atendidas em um determinado período) e, ao mesmo tempo, minimizar os custos. Seu trabalho consiste em três missões:

  • Analisando e compreender os principais motivadores de chamadas e sua evolução
  • Previsão volumes de chamadas usando seu conhecimento do negócio

  • Alocação — Ajuste do fornecimento de agentes de call center de acordo com a previsão de demanda.

Principal chamar motoristas diferem de acordo com as SKUs. Por exemplo, os drivers de assistência comercial incluem:

  • Número de clientes
  • Eventos de marketing e poda de campanhas
  • Nível de qualidade do serviço (efeito bola de neve)
  • Férias

Nossas séries temporais têm fortes sazonalidades e seguem ciclos econômicos. Elas não são estacionárias. Nesse caso, o Prophet é uma escolha apropriada. Optamos por testá-lo, bem como outros algoritmos de ML frequentemente usados para essa tarefa.

Image

Engenharia e modelagem de recursos

O Prophet tem muitas vantagens inegáveis que são especialmente úteis para um projeto de previsão orientado para os negócios e que justificam plenamente sua popularidade.

Um deles é o seu facilidade de uso. Apenas algumas linhas de código e o Quase nenhuma engenharia de recursos são necessários para se ter uma boa linha de base. Para saber mais sobre como ele funciona e como usá-lo, leia este tópico do Twitter de seu criador, bem como esta excelente postagem no blog (com código).

Recursos de tempo, como tendência e sazonalidade são criados de forma nativa - Exit the rolling means, lags, and other tricky features required by machine learning (ML) tree-based models.

No entanto, pode ser um grande incômodo fazer o ajuste fino se vários eventos perturbarem o sinal.

Tendência

Uma grande vantagem em relação aos modelos autorregressivos (por exemplo, ARIMA) é que o Prophet não requer séries temporais estacionáriasO senhor pode usar o componente de tendência: um componente de tendência é gerado nativamente.

Por essas razões, o Profeta funciona muito bem para previsões de médio prazo (tentamos no horizonte M+5), embora o intervalo de confiança seja bastante grande.

A tendência pode ser estimada corretamente sem nenhum data externo (como o número de clientes). Isso é bastante poderoso, pois quando o senhor prevê a chegada de chamadas, não sabe quantos clientes terá em 5 meses, portanto, não pode usar esse recurso.
Por exemplo, este gráfico mostra o número de clientes de Internet de fibra óptica (FIO) ao longo do tempo (um mercado em crescimento para nossa empresa de telecomunicações), em comparação com o componente de tendência aprendido pela Prophet sobre os volumes de chamadas. Há uma forte correlação (coeficiente de Pearson: 0,988) entre o volume de chamadas e o número de clientes. Portanto, o modelo aprende bem a tendência, e somente a partir da própria série temporal.

Image

Identificamos algumas dicas e truques para tornar a tendência um benefício real em sua previsão baseada em Profeta.

Tendência: Observe seus pontos de mudança

Um dos pontos fortes do Prophet também é um ponto fraco para a estabilidade dos resultados e do desempenho: O O componente de tendência tende a explicar a grande maioria da previsão — em torno de 90% para o nosso estudo de caso. Dessa forma, se a tendência não for bem estimada, o desempenho cairá drasticamente e o senhor poderá perder mais de 20 pontos de MAPE ao fazer previsões acima ou abaixo do esperado ao longo do tempo. O senhor tem vários parâmetros para ajudar o Prophet a ajustar a tendência, incluindo o `changepoint_prior_scale` e o `changepoint_range`

Encontrar o valor correto de changepoint_prior_scale é essencial, porque esse parâmetro define a flexibilidade da tendência. Quanto maior ele for, mais flexível será a tendência. Nossa estratégia é fazer uma busca na grade desse parâmetro com os seguintes valores (em uma escala logarítmica): [0.001, 0.01, 0.1, 0.5]. Ter valores relativamente pequenos geralmente leva a uma melhor generalização.

Tendência: Aproveite ao máximo o mais recente data

Image

Próximo ponto de atenção: por padrão, o Prophet leva em consideraçãoapenas o primeiro 80% da história para aproximar a tendência especificando 25 pontos de alteração em potencial. Descobrimos que aumentar esse valor de 80% alterando o parâmetro changepoint_range estava melhorando o desempenho. Na verdade, isso também levará em conta os últimos data, que são mais importantes para explicar o nível de chamadas em nosso caso. Por exemplo, neste gráfico, o senhor pode ver que o data de 2021 é importante porque tem uma tendência decrescente. Optamos por levar em conta todo o conjunto de treinamento, exceto os últimos 7 dias, em vez do 80%.

Tendência: Limpe seus outliers

Outro aspecto a ser considerado é o sensibilidade a outliers. A documentação oficial recomenda removê-los: “O Prophet é capaz de lidar com os valores discrepantes no histórico, mas apenas ajustando-os com mudanças de tendência”.

Image

Sazonalidades

Componentes de sazonalidade, como diário e anual, são estimados com séries de Fourier. Como nossas séries temporais têm fortes ciclos comerciais sazonais, descobrimos que o Prophet funciona muito bem.

Mas quando nos aprofundamos um pouco mais, descobrimos que a modelagem da sazonalidade semanal é limitada. Nossa série temporal tinha valores muito baixos aos sábados em comparação com o restante da semana (e nenhum valor aos domingos). Gastamos muito tempo e tivemos muitos problemas para tentar melhorar nossas previsões nesse dia específico da semana.

Finalmente, tivemos que usar uma solução alternativa: empilhamento de dois modelos, incluindo nosso modelo Prophet e um modelo estatístico calculando previsões com base no peso médio dos dias da semana nas últimas 6 semanas. E isso apesar de ter tentado alterar todos os parâmetros da sazonalidade semanal do Prophet.

Nosso entendimento: Em um período de sazonalidade de 7 dias (6 em nosso caso, sem domingos), aumentar a ordem de Fourier não é tão útil, porque o intervalo entre 0 e 2pi é dividido em apenas alguns segmentos (6 ou 7). E uma ordem de Fourier baixa significa que não se ajusta a valores extremos e mudanças rápidas em sazonalidade, como os sábados no exemplo acima.

Alguns outros truques para ajustar as sazonalidades:

  • Adapta-se melhor a um modo multiplicativo
  • Adicionar sazonalidades personalizadas
  • Alterar a ordem de Fourrier

Eventos e regressores extras

Para eventos e extra-regressores bem como o Profeta podem ser úteis.

O senhor pode adicionar extra-regressores, contínua ou categórica, fornecendo outra série temporal (valores e datas) ao modelo com a função add_regressor método. Os eventos são gerenciados como regressores categóricos (o valor é 0 - o evento não está ocorrendo naquele dia ou hora - ou 1 - o evento está ocorrendo).

Adicionar novos eventos é fácil: o senhor só precisa fornecer ao Prophet um dataframe que contenha as datas e os nomes dos eventos.
Funcionou muito bem com feriados, férias e outros eventos. E tende a apresentam resultados melhores do que os modelos baseados em árvores.

Além disso, o Prophet está usando o Python feriados para permitir que o senhor use apenas a identificação do país (USA ou FRA) para adicionar feriados relacionados como um recurso.

Image

Como acontece com muitos outros algoritmos de previsão de séries temporais, muitas vezes é É difícil saber se um evento recorrente já está incluído na sazonalidade do profeta ou se ele precisa ser sinalizado manualmente para ajudar o algoritmo. Um exemplo simples é o período de Natal e Ano Novo: mesmo período, praticamente o mesmo efeito, todos os anos. Um exemplo complicado são as férias de primavera na França. Na França, por volta de abril, há duas semanas de férias escolares com datas variáveis de ano para ano e divididas por área geográfica (nem toda a França sai de férias ao mesmo tempo).

Embora a sazonalidade anual seja baixa durante esse período, o efeito de um evento de “feriado de primavera” é positivo nas previsões de volumes de chamadas. E o modelo tem melhor desempenho com esse evento. Portanto, o efeito desse evento é inconsistente com outros feriados e com a sazonalidade que observamos, mas há um efeito sobre o treinamento e as previsões do modelo que melhora o desempenho... Devemos adicioná-lo ou não?
Observamos que problemas semelhantes com vários feriados públicos que se deslocam a cada ano, e às vezes tivemos de combinar o Prophet com um modelo estatístico para melhor ajustar os efeitos dos feriados. No entanto, não temos nenhuma solução consistente para oferecer.

Os cruzamentos de recursos são demorados e, muitas vezes, excessivamente projetados

Como o Prophet é um modelo aproximadamente linear em a maneira como ele lida com recursos extras e eventos, o cruzamento de recursos não é automático. Isso significa que o Prophet não pode inferir que uma combinação de valores de diferentes recursos levará a um impacto exponencialmente maior ou menor na previsão, enquanto isso é algo que os algoritmos baseados em árvores e o Deep Learning podem inferir muito bem.

Exemplo: digamos que o senhor tenha um impacto em sua série temporal no Dia Útil + 1 após um feriado (HBD+1). Em seguida, fornecendo ao Prophet um evento “HBD+1” permitirá que ele se ajuste melhor a esse efeito. Mas aqui, o impacto depende muito do fato de o dia HBD+1 é em uma segunda-feira, sábado etc. E não é linear nem multiplicativo. Portanto, o senhor terá que adicionar todos os recursos “HBD+1_monday”, “HBD+1_tuesday”,…

Ao cruzar recursos, o número deles cresce exponencialmente e isso vai custar aos dois tempo para computá-los, perda de interpretabilidade e, provavelmente, uma queda no desempenhose o senhor adicionar muitos desses recursos.

Interpretabilidade

Uma das principais vantagens do Prophet em relação a outros modelos é sua capacidade de interpretação.

Image

A decomposição nativa da previsão em componentes de tendências, sazonalidades, eventos e extra-regressores é significativa para perfis de baixa tecnologia.

Image

O Profeta é um modelo aditivo A soma de cada componente é igual à previsão. A importância de cada componente é expressa diretamente na unidade de destino(diferente de Valores SHAP). Além disso, ele oferece explicabilidade local e global.

Consequentemente, é realmente fácil de traçar a previsão/impacto de cada componente na previsão. Se o senhor optar por mudar para um modo multiplicativo, em que cada componente é expresso como uma porcentagem da tendência, terá um pouco mais de trabalho, mas o gráfico continuará sendo muito fácil.

Infelizmente, todos esses componentes fornecem apenas cerca de 10% da previsão, o restante 90% sendo previsto na tendência... que é quase inexplicável. Caberá ao senhor tentar explicar a tendência usando regressores externos que não podem ser usados como recursos para o Prophet, como crescimento da base de clientes, taxas de contato e mudanças no comportamento dos clientes em nosso estudo de caso. Para isso, o senhor precisa ter os valores reais associados a cada um desses recursos: portanto, só é possível analisar a tendência quando se olha para as previsões feitas no passado.

Desempenho e facilidade de manutenção na produção

Desempenho

O Profeta tem um bom desempenho muito rápido, em comparação com o tempo de desenvolvimento. Em outras palavras, ele oferece uma boa linha de base rapidamente, pois o senhor não precisa criar recursos de tempo.

O Prophet possibilita a previsão de séries temporais com Quase nenhuma engenharia de recursos e um bom nível de desempenho, em tempo recorde.

Ele treina rapidamenteO senhor sabe o que está fazendo: leva menos de 1 minuto por modelo, com validação cruzada, em um conjunto de data com aproximadamente 3 anos de data em um macbook Air com chip M1 e 8 GB de memória.

Na produção, à medida que o novo data chega, o senhor precisa ajustar novamente o seu modelo. Uma maneira de acelerar o treinamento é iniciar o ajuste a quente, usando os parâmetros do modelo anterior. O senhor também pode usar esse recurso para acelerar o processo de validação cruzada. Consulte a seção “Atualização de modelos ajustados” na documentação para ir além.

O Prophet precisa de pelo menos dois anos de data para calcular a sazonalidade anual, mas recomendamos que o ter pelo menos 3 anos de histórico data para ter bons desempenhos.

Obtivemos um desempenho de ~15% MAPE após algumas iterações. No entanto, o ajuste fino dos resultados foi bastante desafiador e foi difícil superar esse teto. Tivemos que desenvolver algumas correções personalizadas na saída para obter um MAPE de ~10%.

Em nosso projeto, o Prophet e o XGboost têm métricas de desempenho semelhantes nos horizontes M+1 e M+2. No entanto, os desempenhos em M+3 e M+4 tendem a se degradar mais no Prophet em comparação com o XGboost. Isso ocorre porque a tendência não foi estimada corretamente. Embora isso não afete as previsões de curto prazo, as previsões de longo prazo são muito afetadas pela direção da tendência, pois ela continua crescendo ou diminuindo ao longo do tempo, o que leva a previsões acima ou abaixo do esperado. Usar outra abordagem para previsões de longo prazo é provavelmente mais seguro.

É interessante, Às vezes, adicionar mais data histórico pode ser contraproducente e levar a uma queda na precisão da previsão. O Prophet não permite dar mais peso às observações mais recentes, portanto, mais data pode levar a uma diminuição da precisão da previsão.
Aqui, a dica seria realizar experimentos com vários comprimentos de data histórico e selecionar aquele que produz os melhores resultados.

Estabilidade dos resultados

Apesar de algumas vantagens inegáveis, o Prophet não é um modelo plug-and-play. É necessário algum tempo para ajustá-lo e aumentar o desempenho. Alguns pontos fracos fazem com que seja difícil confiar em sua estabilidade na produção.
Para avaliar a frequência com que precisaríamos treinar novamente o modelo, comparamos duas estratégias. Geramos previsões em meses diferentes e medimos os resultados:

  • Faça o ajuste fino dos hiperparâmetros do modelo todos os meses (com uma pesquisa de grade + uma validação cruzada temporal para escolher a melhor combinação)
  • Usar os mesmos hiperparâmetros para todas as previsões

O retreinamento do modelo a cada mês apresentou melhores resultados. Em conclusão, apesar da validação cruzada temporal, os hiperparâmetros não eram estáveis ao longo do tempo. Para o XGboost, não é necessário fazer esse retreinamento com frequência. No entanto, esses resultados devem ser tratados com cautela, pois os volumes foram afetados pela crise da COVID na época em que fizemos esse benchmark. Mais uma vez, nossa intuição para explicar o resultado foi que a tendência é difícil de estimar corretamente.

Escalabilidade

Uma das desvantagens desse modelo univariado é que o senhor precisa um modelo por SKU, em comparação com as abordagens baseadas em árvores, em que o senhor pode usar o mesmo modelo para muitos produtos.

Normalmente, isso leva a melhores desempenhos, Como salientou Pierre-Yves Mousset em seu projeto. Entretanto, ter muitos modelos pode ser um desafio de engenharia e um pesadelo para a manutenção.

Conclusão

A facilidade de uso do Profeta o tornou um modelo de linha de base muito bom quando a série temporal se divide facilmente em componentes temporais simples. Entretanto, se o sinal for ruidoso, o ajuste fino do desempenho do modelo pode ser um incômodo.

Graças à divisão nativa da previsão em componentes de tempo, as decisões do modelo são fáceis de interpretar. No entanto, ele não é suficientemente preciso para ser usado para medir o impacto de um evento externo, pois nunca se sabe se o efeito do evento já foi levado em conta nos componentes de tempo nativos.

Se a sua série temporal seguir alguns ciclos de negócios, o senhor poderá obter um desempenho bastante decente rapidamente, sem engenharia intensiva de recursos. Entretanto, o componente de tendência nem sempre é bem estimado, o que pode gerar desvios significativos no desempenho. Por esse motivo, esse modelo pode exigir monitoramento cuidadoso e intervenções humanas frequentes.

Se o senhor quiser oferecer alguma explicabilidade e criar um modelo decente de forma fácil e rápida, o Prophet é uma opção a ser considerada. No entanto, se o senhor se preocupa com a estabilidade e a precisão da previsão, considere usar outro tipo de algoritmo, como modelos baseados em árvores, Órbita ou DeepAR.

Média Blog por Artefact.

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