Projeto de análise de dados: resolvendo assimetria de informação com o Shiny

ciclo de análise de dados é uma poderosa metodologia de trabalho para resolver problemas através de dados. Com ela podemos ter uma visão geral sobre as etapas do processo, o que é fundamental para não se perder no caminho. No entanto, apenas ter essa compreensão não é suficiente, é preciso dar o próximo passo: colocar em prática uma análise de dados.

Nesse artigo mostramos como resolver um problema do cotidiano de todo brasileiro proprietário de algum veículo: em qual posto o combustível está mais barato? Usamos ferramentas de análise de dados como o Shiny para desenvolver uma solução com dados públicos, aplicando todo o ciclo de análise de dados através das linguagens R e Python.

Definição do problema e objetivos

A definição do problema a ser resolvido requer o conhecimento ou expertise na área de atuação. No caso dos preços de combustíveis sabemos que, com base na teoria econômica, pode existir o problema da informação assimétrica. Esse problema se refere a quando, em uma transação, uma das partes possui mais ou melhor informação do que a outra, o que pode criar um desequilíbrio no poder de negociação.

No caso do preço dos combustíveis, o dono do posto provavelmente possui mais e melhor informação do que o cliente que apenas vai abastecer seu veículo. O dono do posto define o preço do combustível com base em diversas variáveis e o preço na concorrência pode ser uma delas. O cliente, geralmente, abastece seu veículo no posto mais próximo e não possui conhecimento sobre o preço praticado no próximo posto. Assim, o dono de um posto pode praticar preços maiores do que a concorrência explorando a assimetria de informação. Essa é uma situação do cotidiano do brasileiro: o carro acusa que está na reserva, o motorista pára no posto A e abastece, roda mais alguns metros ou quilômetros e descobre que no posto B o preço era menor. 🙁

Sendo assim, vamos tentar resolver esse problema: reduzir a assimetria de informação referente ao preço de combustíveis. E utilizaremos a análise de dados com o objetivo de que haja menos surpresas no orçamento familiar do motorista e cliente de posto. Isso é extremamente relevante pois, por exemplo, a gasolina representa 4,7% do orçamento mensal das famílias brasileiras, conforme dados do IPCA/IBGE de março/2023, constituindo o subitem de maior peso dentro da cesta de produtos e serviços considerados na pesquisa.

Identificação e coleta de dados

Existem dados sobre o problema que queremos analisar? Onde os dados estão disponibilizados? Como os dados podem ser coletados? Os dados são confiáveis?

Essas são apenas algumas das perguntas pertinentes nesta etapa do ciclo de análise de dados. Felizmente, os dados de preços de combustíveis existem no Brasil e são disponibilizados publicamente para livre acesso pela ANP. No site é possível encontrar arquivos de dados sobre combustíveis de automotivos e gás de botijão, agregados por semestre, mês ou semana. Além disso, a agência ainda disponibiliza os metadados, que é uma boa prática e ajuda a entender os dados.

Agora que identificamos os dados, vamos definir o que precisamos para a análise e prosseguir para a coleta de dados. Para simplificar, vamos restringir a nossa análise aos dados do combustível gasolina comum nas 4 últimas semanas e somente para uma cidade, vamos escolher Rio de Janeiro-RJ como exemplo. Os dados a nível de Brasil para esse recorte estão disponíveis neste link. Note que o link pode estar quebrado no momento que você tentar acessá-lo, pois os sites do governo mudam com frequência.

Para coletar os dados, e para as demais etapas do projeto, vamos utilizar linguagem de programação. Na prática, é possível utilizar qualquer linguagem moderna para ciência de dados, como R e Python, pois independentemente da escolha é possível atingir o mesmo resultado, ou algo muito semelhante.

Abaixo estão os dados brutos coletados do site da ANP:


# Carregar pacotes
library(readr)

# Carregar dados brutos
link_anp <- paste0(
"https://www.gov.br/anp/pt-br/centrais-de-conteudo/dados-abertos/",
"arquivos/shpc/qus/ultimas-4-semanas-gasolina-etanol.csv"
)
dados_brutos <- readr::read_csv2(link_anp)
head(dados_brutos)

Para entender mais sobre coleta de dados veja o curso de Programação para Análise de Dados da Análise Macro.

Pré-processamento e análise exploratória de dados

Como pode ser visto, os dados da ANP são disponibilizados em formato CSV com várias colunas e linhas com informações sobre localidade, posto, preço de venda, data, bandeira e etc. Nosso interesse é nos dados de preço de venda da gasolina comum na cidade do Rio de Janeiro nas últimas 4 semanas. Aplicando esses filtros, chegamos na tabela de dados processados abaixo:


# Dados de preço da gasolina na cidade do Rio de Janeiro-RJ
dados_rio <- dados_brutos |>
dplyr::filter(
`Estado - Sigla` == "RJ",
Municipio == "RIO DE JANEIRO",
Produto == "GASOLINA"
) |>
dplyr::mutate(data = lubridate::dmy(`Data da Coleta`)) |>
dplyr::select(
-c(
"Produto",
"Valor de Compra",
"Unidade de Medida",
"Municipio",
"Estado - Sigla", "Regiao - Sigla",
"Data da Coleta"
)
)
head(dados_rio)

Revenda CNPJ da Revenda Nome da Rua Numero Rua Complemento Bairro Cep Valor de Venda Bandeira data
MULTI POSTO CENTRO AUTOMOTIVO LTDA. 07.303.380/0001-82 ESTRADA DO QUITUNGO 1610 NA BRAZ DE PINA 21215-565 5.29 BRANCA 2023-08-29
POSTO E GARAGEM DOM HELDER CAMARA LTDA 04.802.584/0001-70 AVENIDA DOM HELDER CAMARA 4539 NA DEL CASTILHO 20771-000 5.59 RAIZEN 2023-08-28
POSTO E AUTO SERVICO INSULANO LTDA 07.634.487/0001-03 ESTRADA DO DENDE 400 NA TAUA / ILHA DO GOVERNADOR 21920-000 5.69 VIBRA 2023-08-29
POSTO MANÉ GARRINCHA DE BOTAFOGO LTDA. 07.877.289/0001-70 RUA VOLUNTARIOS DA PATRIA 308 NA BOTAFOGO 22270-010 5.77 RAIZEN 2023-08-29
POSTO DE GASOLINA JAGUAR DO ANIL LTDA 07.752.635/0001-94 AVENIDA TEN. CEL. MUNIZ DE ARAGAO 1240 NA ANIL 22765-008 5.35 BRANCA 2023-08-30
MARQUES’S PETER AUTO POSTO LTDA 05.570.770/0001-93 RUA JOSE DOMINGUES 250 NA ENCANTADO 20756-130 5.68 VIBRA 2023-08-28

Em poucos comandos, os dados já estão prontos para serem analisados! Para entender mais sobre tratamento de dados veja o curso de Programação para Análise de Dados da Análise Macro.

Abaixo plotamos o histograma dos preços e sua evolução temporal média por cada data de coleta:


# Histograma
dados_rio |>
ggplot2::ggplot() +
ggplot2::aes(x = `Valor de Venda`) +
ggplot2::geom_histogram(binwidth = 0.1) +
ggplot2::scale_x_continuous(n.breaks = 10)


# Linha
dados_rio |>
dplyr::summarise(preco_medio = mean(`Valor de Venda`, na.rm = TRUE), .by = data) |>
ggplot2::ggplot() +
ggplot2::aes(x = data, y = preco_medio) +
ggplot2::geom_line() +
ggplot2::geom_point()

Note que o preço médio nominal diário da gasolina na cidade do Rio de Janeiro oscilou entre ~R$5,50 e ~R$5,70 por litro. A distribuição dos dados informa que existem postos que praticam preços abaixo e acima desses valores. Em outras palavras, apenas com estes dois gráficos o motorista já consegue saber se está pagando relativamente caro ou barato no posto em que abastece seu veículo.

Poderíamos continuar explorando mais a fundo os dados, mas vamos tentar avançar para as próximas etapas e tentar desenvolver a solução para o problema que queremos resolver. Na prática, podemos ir e voltar entre uma ou outra etapa do ciclo de análise de dados conforme a necessidade. O ciclo de análise de dados não é um processo linear e podemos voltar nessa etapa para fazer ajustes e explorações adicionais.

Proposta de solução

Temos um problema definido para ser solucionado, temos os dados e sabemos um pouco sobre como eles se comportam. O que está faltando agora é desenvolver a solução baseada nestes dados, usando ferramentas para esta finalidade, como o Shiny. Dashboards estão presentes em todo lugar atualmente, então não estamos inventando a roda e não precisaremos treinar o usuário para utilizar essa solução.

Shiny é uma biblioteca de desenvolvimento de dashboards e aplicativos web interativos, implementada em R e Python. Com ela é possível criar interfaces customizadas, alimentar dados, habilitar filtros e botões de interação e muitos mais! Para saber mais sobre o Shiny confira o curso de Produção de Dashboards da Análise Macro.

A ideia é fazer uma Prova de Conceito (PoC, na sigla em inglês), com a finalidade de entregar uma solução o mais rápido possível. Com isso feito, torna-se mais claro no projeto de análise de dados, com base em feedbacks e monitoramento, o que deu certo e o que precisa ser melhorado, assim como as próximas soluções analíticas que podem ser lançadas.

Abaixo expomos a implementação da dashboard analítica dos preços de gasolina comum praticados na cidade do Rio de Janeiro.

Acesse a dashboard pelo link: https://analisemacro.shinyapps.io/gasolinarj_r/

A aplicação desenvolvida é bastante simples e sem muito apelo visual, o que pode ser o próximo passo do projeto após finalizar esse primeiro PoC. A dashboard oferece algumas opções simples de interação e indicadores chave para o motorista acessar e tomar decisões rapidamente.

Outros recursos podem ser implementados e há bastante espaço para melhorar os existentes. Além disso, os dados da ANP para determinados pontos de coleta de preços podem ser descontinuados a qualquer momento, o que requer cuidado ao analisar os dados.

Validação da solução

Na etapa de validação dentro do ciclo de análise de dados o objetivo é verificar se o problema definido pode ser solucionado com a proposta de solução desenvolvida. Note que não desenvolvemos nenhum modelo que permita utilizar métricas tradicionais de avaliação, como RMSE ou Acurácia, portanto precisaremos avaliar a solução de maneira subjetiva ou coletando feedback de usuários. A segunda opção só é possível após um certo tempo, então vamos prosseguir com a primeira.

O problema era a assimetria de informação: o motorista ia no posto A e abastecia e depois verificava que no posto B o preço era menor. A dashboard desenvolvida ajuda o motorista a evitar esse tipo de situação? Possivelmente sim! Com os dados na palma da mão o motorista pode facilmente verificar os postos mais próximos de sua localização, assim como consultar os dados de preço praticados recentemente e historicamente. Além disso, os elementos da dashboard apresentam alguns indicadores para auxiliar o motorista na tomada de decisão.

Em suma, acreditamos que essa primeira versão da dashboard soluciona em boa medida o problema de assimetria de informação.

Implantação da solução

Na última etapa do ciclo de análise de dados é preciso tomar uma decisão sobre como a solução, uma vez que tenha sido validada, será implementada e/ou comunicada para seus usuários. No caso de uma dashboard, a implementação pode se dar por meio do processo conhecido como deploy ou publicação, que compreende disponibilizar a dashboard, usualmente por um link, para livre acesso dos usuários.

Dashboard desenvolvidas no framework Shiny podem ser publicadas de diversas formas, desde as mais simples até as mais sofisticadas. Uma possibilidade é utilizar o serviço gratuito Shinyapps.io: basta cadastrar uma conta de usuário e gerar uma chave de token para fazer o deploy da dashboard. Ao final do processo é gerado um link, como esse da dashboard acima: https://analisemacro.shinyapps.io/gasolinarj_r/

Após a publicação da dashboard (ou durante o desenvolvimento do projeto) é importante documentar todo o projeto e organizar as informações relevantes para comunicar essa solução aos potenciais usuários. Essa etapa é crucial para o sucesso do projeto, afinal não queremos criar dashboards que ninguém irá acessar. Então é importante comunicar bem as informações, criar storytelling de dados, imagens, vídeos, etc. para que o usuário consiga rapidamente compreender como a solução analítica pode ajudar ele.

Conclusão

Chegamos ao final dessa jornada por dentro da implementação de um projeto de análise de dados. O objetivo foi resolver um problema real com dados reais, visando explorar os desafios que podem ser encontrados no dia a dia de trabalho. Percorremos todas as etapas do ciclo analítico, desde a definição do problema até o deploy da solução desenvolvida, dando ênfase nos conceitos e possibilidades que se encontram no caminho. Escolhemos usar ferramentas modernas e práticas para projetos de dados, deixando claro que podem ser usadas outras alternativas, sem prejuízo dos resultados finais.

Quer aprender mais?

  •  Cadastre-se gratuitamente aqui no Boletim AM e receba toda terça-feira pela manhã nossa newsletter com um compilado dos nossos exercícios com exemplos reais de análise de dados envolvendo as áreas de Data Science, Econometria, Machine Learning, Macroeconomia Aplicada, Finanças Quantitativas e Políticas Públicas;
  •  Quer ter acesso aos códigos, vídeos e scripts de R/Python desse exercício? Vire membro do Clube AM aqui e tenha acesso à nossa Comunidade de Análise de Dados;
  •  Quer aprender a programar em R ou Python com Cursos Aplicados e diretos ao ponto em Data Science, Econometria, Machine Learning, Macroeconomia Aplicada, Finanças Quantitativas e Políticas Públicas? Veja nossos Cursos aqui.

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise regional do mercado de trabalho com dados do CAGED usando Python

Os microdados dos CAGED fornecem informações detalhadas a nível de cidade, sexo, raça, nível de instrução, idade, salário e outras sobre os trabalhadores formais do Brasil, possibilitando ricas análises regionais de dados. Neste artigo mostramos como acessar, processar e analisar estes dados utilizando o Python.

Transfer Learning: mostrando porque o Python está na ponta do desenvolvimento

A aprendizagem por transferência (transfer learning) é o reuso de um modelo pré-treinado em um novo problema. Portanto, sua utilização torna-se um avanço enorme para a previsão de diferentes tipos de variáveis, principalmente para aquelas ordenadas no tempo. Mostramos nesta postagem o uso do Transfer Learning com o Python para o caso de Séries Temporais.

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.