Previsão baseada em metas no Profeta & R

Orientar as equipes de negócios, gerando previsões que atinjam metas ou objetivos específicos.

Adam Stone Blocked Unblock Seguir Seguindo 3 de janeiro

As ferramentas de previsão estão em toda parte. Mas é surpreendentemente difícil descobrir como ajustar as previsões modeladas para atingir uma meta ou meta, que as equipes de negócios geralmente pedem!

Com alguns dados históricos, você pode usar ferramentas de previsão para prever no futuro uma métrica específica (por exemplo, número de usuários ativos, receita, produtos vendidos, bebês nascidos). Boas ferramentas de previsão levarão em consideração a sazonalidade (flutuações com base em dias da semana ou meses do ano), crescimento geral, feriados e outras variáveis para modelar previsões mais plausíveis e confiáveis.

No entanto, as empresas definem “metas” e “metas”. Como podemos construir previsões que atendam a essas metas e metas? Vamos fingir que somos cientistas de dados na Tuckersoft e acabamos de criar uma previsão que prevê que 15.000 cópias do Nohzdyve serão vendidas em julho de 1985. Como somos excelentes cientistas de dados, também fornecemos vendas projetadas para todos os dias em Julho (por exemplo, “Em 3 de julho, projetamos vender 472 cópias”), e as vendas diárias levam em consideração a sazonalidade, o crescimento e os feriados.

Nohzdyve Demorei um pouco para perceber que é pronunciado "empenhar".

Mas Thakur deu à sua equipe de vendas uma meta de 18.000 cópias em julho de 1985. Agora, como podemos "atualizar" a previsão para corresponder ao objetivo? O caminho mais fácil: pegue a diferença entre o número projetado e o número alvo, e distribua-o uniformemente no intervalo de datas em que estamos interessados. Então, pegamos 3.000, dividimos por 31 dias e dizemos ao Sr. Thakur que precisamos vender cerca de 97 exemplares extras todos os dias para atingir o alvo.

No entanto, estamos ignorando a sazonalidade e todas as outras coisas legais que entram no nosso modelo de previsão! Talvez tendamos a ter vendas maiores nos finais de semana, e não esperamos vender nada no Dia da Independência (4 de julho). Adicionar 97 às vendas previstas de cada dia não considera esses fatores. Queremos mudar nossa previsão para que ela agora preveja 18.000 cópias vendidas, enquanto ainda considerando a sazonalidade e outras variações. Em seguida, a equipe de vendas pode medir o progresso diário em relação à previsão baseada em metas ajustada.

Usando Profeta

Profeta é uma ótima ferramenta de previsão de séries temporais produzida pelo Facebook e disponível em R e Python. Eu considero isso o Ron Popeil de ferramentas de previsão – você apenas configura e esquece!

Configure e esqueça! ?

Com o Prophet, uma previsão pode ser criada com apenas algumas linhas de código R:

E é isso! Prophet gera previsões decompondo para tendência, sazonalidade e feriados – ideias fáceis para os analistas entenderem. Os modelos podem ser ajustados definindo parâmetros na chamada prophet() , e os feriados podem ser considerados usando datas de listagem de dataframe de holidays . Gráficos bacanas mostrando tendências e sazonalidade por ano, semana e dia são fáceis de gerar com chamadas de função do Profeta. Os pontos de mudança de tendência são calculados automaticamente, mas também podem ser inseridos manualmente ou especificados em casos de superajuste / underfitting. Veja aqui para mais discussão sobre os recursos do Profeta.

Modelando Previsões Baseadas em Metas no Profeta

Mas como obter uma previsão que corresponda a uma meta ou meta predefinida? É para isso que predictive_samples() serve. Essa função gera (por padrão) 1.000 amostras da “distribuição preditiva posterior”. Cada amostra é uma previsão ligeiramente diferente com base nos dados históricos e no modelo do Profeta. Você acabou de descobrir qual amostra é a mais próxima do seu alvo, e essa amostra representa um possível caminho plausível em direção ao alvo, com a sazonalidade e feriados incluídos .

Desta forma, nossa previsão não é realmente ajustada, mas sim aproveitamos as funções computacionais de expansão / amostragem para produzir centenas ou milhares de previsões até encontrarmos uma nova previsão que melhor represente o alcance da meta.

Exemplo: Passeios Partilhados no LA Metro Bike

Vamos fazer um exemplo aqui. Eu criei um CSV de dados diários de viagem baixados da Metro Bike Share de Los Angeles , de 7 de julho de 2016 (lançamento) até 29 de setembro de 2018 (os dados mais recentes disponíveis).

Os arquivos de dados brutos e limpos e os scripts R para montar os arquivos e gerar previsões do Profeta estão disponíveis no Github.

Nós pegamos este gráfico:

Dados históricos do Los Angeles Metro Bike Share

Podemos ver alguma sazonalidade anual, onde os passeios são mais altos durante os meses de verão. Há também um ponto de mudança de tendência onde os passeios pareciam realmente decolar. E quanto a sazonalidade semanal? Uma maneira de verificar é olhar nos dias da semana em comparação aos fins de semana:

??? Dias de semana vs. fins de semana ?

Em 2017, os fins de semana tiveram menor número de passageiros do que nos dias da semana, mas essa tendência mudou em 2018 para ser mais ou menos igual. Esse é o tipo de coisa que o Profeta manipula bem, decompondo-se pela tendência geral e pela sazonalidade diária, semanal e anual, fora da caixa.

Eu chamei prophet() nos dados históricos para gerar o modelo Prophet, então chamado de predict() que usa esse modelo de Prophet para prever passeios diários até 1º de setembro de 2019. Para este exemplo, tornei a tendência menos flexível diminuindo o ponto de mudança parâmetro do padrão de 0,05 a 0,01:

De acordo com esse modelo, teremos 1.272 viagens em 1º de setembro de 2019

Este modelo do Profeta gerou previsões para cada dia entre 29 de setembro de 2018 e 1º de setembro de 2019, e previu 1.272 viagens em 1º de setembro de 2019. Para ver como o Profeta decompõe a tendência e a sazonalidade, prophet_plot_components() gera o seguinte gráfico:

? ? Componentes de um modelo Profeta.

Uma tendência muito linear ao longo dos anos, menor número de passageiros nos finais de semana e maior número de passageiros durante o final do verão – tudo o que entra no modelo e é pesado para o cálculo das projeções diárias de passageiros.

Objetivo: 1.500 passeios

Mas a equipe de vendas quer chegar a 1.500 corridas até 1º de setembro de 2019. Com essa meta em mente, como deve ser nossa ocupação diária?

A execução de predictive_samples() usando o mesmo modelo de Prophet retornou 1.000 amostras (como colunas) da distribuição preditiva posterior, com tantas linhas quantos os dias que você previu. Como explicado acima, cada um deles é uma previsão possível e plausível. Eu olhei para a linha correspondente a 01 de setembro de 2019, em seguida, encontrei a célula mais próxima de 1.500 passeios pelas 1.000 colunas (amostras). A coluna que contém essa célula é a previsão ajustada e baseada em metas que desejo dar à equipe de vendas!

Os pontos vermelhos abaixo mostram o número de passageiros diários ajustados que queremos atingir para atingir 1.500 viagens em 1º de setembro de 2019.

Os pontos vermelhos mostram o número de viagens diárias ajustadas que queremos alcançar para atingir nossa meta de 1º de setembro de 2019.

Aqui está uma versão ampliada:

Ampliada: os pontos vermelhos mostram o número de passageiros diários ajustado que queremos alcançar para atingir nossa meta de 1º de setembro de 2019.

Você verá que algumas projeções diárias ajustadas de passageiros estão abaixo das projeções originais do modelo do Profeta. Esta é apenas uma amostra de 1.000 amostras geradas e, portanto, o modelo produzirá alguns pontos de dados extremos. No entanto, a projeção de passageiros ajustada prevê, em média, 13 viagens diárias mais do que a projeção original. E a projeção ajustada de cada dia levará em conta sazonalidade e feriados para produzir previsões diárias mais confiáveis e plausíveis.

Para impedir que a equipe de vendas trabalhe com pontos de dados abaixo da projeção original, as projeções de passageiros originais e ajustadas podem ser mescladas de forma que, em qualquer data específica, se a projeção original for maior que a projeção ajustada, você mantém o valor original e vice versa. Isso produz o que eu (apenas decidi) chamar de projeção de “alto alvo” – algo ambicioso que a equipe de vendas pode visar.

Três projeções! ? Original, ajustado e uma projeção de “alto alvo”.

As projeções de “alto alvo” são uma maneira de lidar com previsões ajustadas com pontos de dados individuais mais extremos, mas tenho certeza de que há muitas abordagens diferentes que podem ser usadas aqui! As metas mensais também são fáceis de serem feitas – apenas subconforme o resultado predictive_samples() pelas linhas correspondentes ao mês em que você está interessado, some os valores diários nas linhas de cada uma das 1.000 colunas (amostras) e localize o valor mais próximo do valor alvo.

Este foi um exemplo simples usando um modelo básico de Prophet, mas o uso de predictive_samples() torna-se mais poderoso à medida que o modelo Profeta subjacente é melhor ajustado, definindo parâmetros adicionais . No geral, o Prophet é uma ferramenta de previsão extremamente simples que oferece um grande impacto e permite que você extraia projeções baseadas em metas que atendam a um determinado objetivo, o que é uma equipe comercial que muitas vezes é exigida!

Existem outras maneiras de produzir previsões baseadas em metas? Por favor, compartilhe abaixo.

Nota: Este post foi inspirado por esta pergunta escrita desajeitadamente que fiz nesta edição do Github – graças a Ben Letham por me apontar na direção certa! Todos os scripts R (usando o código tidyverse ), dados e figuras estão disponíveis no repositório do Github .