Construindo modelos de machine learning do zero

Neste exercício percorremos cada etapa para solucionar um problema real de um contexto de negócios, onde requer-se o uso de linguagens de programação e ciência de dados. O objetivo é demonstrar de forma prática e objetiva os primeiros passos de uma implementação de modelos de machine learning com o R.

Vamos primeiro contextualizar um case de exemplo para depois abordar a solução (informações didáticas).

Problema:

Focaremos no clássico problema de previsão de demanda de usuários, comum em diversas empresas de diversos setores.

Descrição:

Usaremos como case de exemplo a empresa Uber, que fornece o serviço de transporte por aplicativo. Vamos imaginar que você trabalha na área de Dados da empresa (ou pretende trabalhar) na posição de Cientista de Dados. Os demais departamentos internos da empresa necessitam de informações com uma estimativa do nº de usuários por hora/dia para um horizonte de uma semana a frente, para fins de gestão interna. Não há nenhuma solução implementada ainda e o seu prazo de entrega é de 1 dia útil.

Como resolver esse problema nesse curto espaço de tempo? Existem várias possibilidades, sendo que quase todas envolvem o uso de Ciência de Dados e linguagens de programação. Vamos focar em uma abordagem simples e funcional.

Dados:

Os dados que temos a disposição estão estruturados em tabelas organizadas por mês, em formato CSV e disponibilizadas publicamente pela FiveThirtyEight. As tabelas trazem informações sobre corridas (momento do embarque) na cidade de Nova Iorque nos EUA, no período de 01/04/2014 a 30/09/2014.
Mais informações no link https://github.com/fivethirtyeight/uber-tlc-foil-response

Solução:

Vamos propor o uso da linguagem R percorrendo o seguinte fluxo de trabalho para a entrega de previsões do nº corridas por hora aos departamentos internos da empresa.

  • Coleta de dados: usamos o repositório público de dados, definindo um projeto de trabalho no ambiente de programação para versionar o código de extração de dados.

  • Criação do banco de dados: transformamos a informação bruta de milhões de linhas de arquivos CSV para um banco de dados SQLite, possibilitando consultas de maneira ágil e fácil com pacotes e R.

  • Análise Exploratória de Dados: com o objetivo de conhecer melhor os dados à disposição, geramos estatísticas descritivas e gráficos de série temporal, focando como série de interesse o nº de corridas por hora do dia. Dessa forma é possível verificar que a média de corridas é de 1181 e que a série possui um forte componente sazonal. Além disso, podem ser identificados possíveis modelos candidatos seguindo processos AR e MA.

  • Especificação de modelos: existem diversos modelos à disposição, com abordagens de estatística e de machine learning, mas geralmente será necessário um prazo maior para testá-los e implementá-los. Sendo assim, focando no simples e rápido que funciona, definimos como variável dependente o número de corridas por hora e treinamos os modelos de séries temporais Random Walk (como benchmark de comparação), SARIMA, ETS, OLS, Prophet e ensemble (combinação dos dois melhores modelos).
  • Treinamento de modelos: usamos o framework do {tidyverts} para, em poucas linhas de código, esquematizar amostras de dados com janela crescente usando validação cruzada para previsão de 24×7 períodos (data points) a frente. Esse esquema tem como finalidade estimar os modelos para diversas amostras de dados, gerar previsão para cada amostra/modelo e, por fim, comparar o previsto versus observado.
  • Escolha de modelo: definimos o critério de escolha do modelo final, após o treinamento, a métrica de erro conhecida como RMSE. Quando menor seu valor, melhor (mais acurado) é o modelo. Calculamos a métrica por horizonte preditivo, assim podemos ver como os modelos performam no curto e "longo" prazo. O gráfico abaixo sintetiza os valores, mostrando a média do RMSE de todas as amostras de validação cruzada, sendo possível definir como modelo mais acurado aquele que é resultado da combinação de outros dois (Random Walk e ETS foram deixados de fora do gráfico pois performaram de maneira muito inferior aos demais, distorcendo a escala).

  • Previsão fora da amostra: com um modelo definido, chegamos na etapa final e de interesse para os usuários que irão consumir essa informação, ou seja, geramos as previsões fora da amostra pontuais (média) e a distribuição para computar intervalos de confiança. O gráfico abaixo apresenta essas previsões.

Próximos passos

Esses são alguns pontos interessantes em qualquer fluxo de previsão de séries temporais em larga escala que não foram implementados neste exercício e que ficam como sugestão para outros exercícios.

  • Criar uma API para consumo dos dados/previsões;
  • Criar uma dashboard para atender demanda por rápida análise dos modelos/previsões;
  • Usar infraestrutura de nuvem para automatizações e arquitetura de dados;
  • Avaliar a performance de outros modelos.

Saiba mais

Para se aprofundar nos tópicos confira os cursos aplicados da Análise Macro e obtenha todo o suporte necessário para dúvidas de R e Python sendo membro do Clube AM.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise do Censo Demográfico com o R

Como podemos analisar dados do Censo Demográfico para produzir pesquisas e implementar políticas públicas? Mostramos nesta postagem o resultado de uma breve análise dos dados preliminares do Censo Demográfico de 2022 usando o R.

Deploy de modelos com Python + Shinylive + GitHub gastando ZERO reais

Colocar modelos em produção pode ser um grande desafio. Lidar com custos monetários, infraestrutura operacional e complexidades de códigos e ferramentas pode acabar matando potenciais projetos. Uma solução que elimina todos estes obstáculos é a recém lançada Shinylive. Neste artigo mostramos um exemplo com um modelo de previsão para o preço do petróleo Brent.

Como automatizar tarefas repetitivas usando Python? Um exemplo para largar o Excel

Manter relatórios diários com dados e análises atualizados é um desafio, pois envolve várias etapas: coleta de dados, tratamento de informações, produção de análises e atualização de relatório. Para superar este desafio algumas ferramentas como Python + Quarto + GitHub podem ser usadas para automatizar tudo que for automatizável. Neste artigo mostramos um exemplo com dados do mercado financeiro.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.