Category

Data Science

Modelagem e Previsão em 6 Passos: fluxo de trabalho com séries temporais

By | Data Science

Produzir modelos preditivos para séries temporais é uma tarefa difícil e bastante valorizada no mercado de trabalho. São diversos os procedimentos que um profissional dessa área precisa sempre ter no radar e, se generalizarmos isso em um fluxo, a distância entre a idealização do modelo e sua implementação pode ser mais curta e menos árdua. Neste texto descrevemos resumidamente o dia a dia de um profissional que trabalha com previsões e mostramos um exemplo de rotinas em R!

Fluxo de trabalho

O processo de desenvolver modelos preditivos para séries temporais pode ser generalizado e dividido em 6 etapas:

Fonte: Hyndman and Athanasopoulos (2021)

Este fluxo, em resumo, descreve como é o dia a dia de trabalho de modelagem e previsão em algumas etapas organizadas. São elas:

Preparar os dados

O primeiro passo é preparar os dados no formato correto para uso em modelos. Esse processo pode envolver a coleta e importação de dados, a identificação de valores ausentes, agregação/sumarização/ajustes/filtros nas séries e outras tarefas de pré-processamento (veja um post sobre coleta de dados aqui). O objetivo será, em geral, construir uma matriz de variáveis onde cada variável terá sua própria coluna, cada linha formará uma observação e os valores são armazenados nas células. Esse é o princípio de dados "tidy". A facilidade que o pacote {tsibble} e outros do {tidyverse} oferecem simplifica consideravelmente esta etapa usando o R.

Vale dizer que muitos modelos têm pressupostos e requisitos diferentes, sendo que você precisará levar isso em consideração ao preparar os dados. Alguns exigem que a série seja estacionária, outros exigem que não haja valores ausentes. Dessa forma, você precisará conhecer bem os seus dados enquanto os prepara e a análise exploratória é outra etapa que caminhará lado a lado.

Visualizar os dados

A visualização é uma etapa essencial para a compreensão dos dados. Suas séries temporais apresentam tendência? Possuem sazonalidade? Há quebras ou observações extremas nas séries (outliers)? Observar seus dados, através de uma análise exploratória (veja um post sobre aqui no blog) permite identificar estes padrões comuns e, posteriormente, especificar um modelo apropriado. Essa etapa pode andar em conjunto com a etapa de preparação dos dados, de modo que após entender os dados você talvez precise voltar a um passo anterior e aplicar uma transformação, por exemplo, nas séries. Os pacotes {ggplot2}, {feasts}, {fabletools} e outros oferecem formas elegantes e práticas de visualizar seus dados.

Definir o modelo

Existem muitos modelos de séries temporais diferentes que podem ser usados para previsão. Especificar um modelo apropriado para os dados é essencial para produzir previsões. Nesse sentido, além de conhecer os seus dados você precisará ter conhecimento sobre os modelos que pretende trabalhar. Papers publicados são, em geral, boas fontes para buscar esse conhecimento técnico.

Grande parte dos modelos econométricos é descrita em Hyndman and Athanasopoulos (2021) e podem ser implementados pelo pacote {fable} através de funções específicas como ARIMA(), TSLM(), VAR(), etc., cada uma usando uma interface de fórmula (y ~ x). As variáveis de resposta são especificadas à esquerda da fórmula e a estrutura do modelo, que pode variar, é escrita à direita. Para outros modelos fora do escopo do {fable} a lógica e sintaxe é semelhante, quase sempre utilizando uma interface de fórmula.

Estimar o modelo

Uma vez que um modelo apropriado é definido, passamos à estimação do modelo com os dados. Uma ou mais especificações de modelo podem ser estimadas usando a função model() do pacote {fabletools} — framework que contempla grande parte dos modelos econométricos; para outros modelos há pacotes e funções específicas, mas com sintaxe semelhante.

Avaliar a performance

Após termos um modelo estimado, é importante verificar o desempenho dele nos dados. Existem várias ferramentas de diagnóstico disponíveis para verificar o ajuste do modelo, assim como medidas de acurácia que permitem comparar um modelo com outro; o RMSE é a métrica mais comumente utilizada para a maioria dos problemas de previsão. Conforme o diagnóstico do modelo, em seguida possivelmente sejam necessárias readequações, seja na especificação ou até mesmo nos dados utilizados. Em outras palavras, o fluxo de trabalho não é simplesmente um amontoado de procedimentos a serem implementados sequencialmente, mas sim um processo de descobrimento que envolve, na vida real, sucessivas tentativas e erros.

Além disso, se o interesse é previsão, há técnicas como a validação cruzada que auxiliam na tomada de decisão entre mais de um modelo (veja um post sobre isso aqui no blog). É sempre preferível ter mais de um modelo "candidato" potencialmente usado para fazer previsões, além de modelos básicos para simples comparação.

Realizar previsões

Com um modelo especificado, estimado e diagnosticado, é hora de produzir as previsões fora da amostra. Para alguns modelos você poderá simplesmente chamar uma função, como a forecast() ou predict() no R, especificando o número de períodos (horizonte de previsão) que deseja obter previsões; para outros você precisará prover uma tabela com os valores futuros das variáveis regressoras utilizadas no modelo, que servirá para produzir as previsões da variável de interesse, ou seja, você precisará de cenários.

Exemplo no R

Com esse esquema em mente, vamos ilustrar o fluxo de trabalho com um exercício prático e didático: construir um modelo de previsão para a taxa de crescimento anual do PIB brasileiro.

Para reproduzir o exercício a seguir você precisará dos seguintes pacotes:

Preparar os dados

Por conveniência, utilizaremos o dataset global_economy armazenado como um objeto tsibble, trazendo variáveis econômicas em frequência anual para diversos países. Nosso interesse é a série da taxa de crescimento do PIB brasileiro:

Visualizar os dados

Visualização é uma etapa essencial para entender os dados, o que permite identificar padrões e modelos apropriados. No nosso exemplo, primeiro criamos um gráfico de linha para plotar a série do PIB brasileiro usando a função autoplot():

Podemos também plotar os correlogramas ACF e PACF para identificar o processo estocástico da série, obtendo alguns modelos candidatos:

Definir o modelo

Existem muitos modelos de séries temporais diferentes que podem ser usados para previsão, e especificar um modelo apropriado para os dados é essencial para produzir previsões. Nesse exercício didático focaremos em modelos univariados simples para explicar o PIB brasileiro.

Se formos analisar somente pelos correlogramas ACF e PACF, podemos identificar alguns modelos possivelmente candidatos: ARIMA(1,0,2), ARIMA(1,0,0) e ARIMA(0,0,2). Contudo, se nossa leitura estiver incorreta, podemos contar ainda com a tecnologia ao nosso favor utilizando a seleção automatizada da estrutura do modelo. Isso é possível graças ao algoritmo de seleção automatizada da especificação do ARIMA criado pelo prof. Rob Hyndman.

Por fim, além destes possíveis modelos candidatos, também estimaremos um modelo de benchmark na forma de um passeio aleatório, apenas para ter uma base de comparação de previsões dos modelos.

Estimar o modelo

Identificado um modelo (ou mais) apropriado, podemos em seguida fazer a estimação usando a função model()1. Existem diversas funções especiais para definir a estrutura do modelo e em ambos os lados da fórmula podem ser aplicadas transformações. Nesse caso definiremos apenas a estrutura básica do ARIMA; a função ARIMA() também define automaticamente a estrutura sazonal, mas você pode desabilitar isso (consulte detalhes da documentação do {fable}).

O objeto resultante é uma "tabela de modelo" ou mable, com a saída de cada modelo em cada coluna.

Diagnóstico do modelo

Para obter os critérios de informação use a função glance():

Os critérios de informação indicam que, dos modelos estimados, o modelo automatizado ARIMA(1,1,1) apresentou o menor valor de AICc — seguido pelos demais identificados pelos correlogramas ACF e PACF. Com a função gg_tsresiduals() podemos verificar o comportamento dos resíduos deste modelo, indicando que os resíduos se comportam como ruído branco:

Um teste de autocorrelação (Ljung Box) retorna um p-valor grande, também indicando que os resíduos são ruído branco:

Também pode ser interessante visualizar o ajuste do modelo. Utilize a função augment() para obter os valores estimados:

Outros diagnósticos e avaliações podem ser realizados. Se você estiver especialmente interessado em previsão, considere implementar o método de validação cruzada, como explicado neste post.

Realizar previsões

Com o modelo escolhido, previsões podem ser geradas com a função forecast() indicando um horizonte de escolha.

Perceba que os pontos de previsão médios gerados são bastante similares a um processo de passeio aleatório (equivalente a um ARIMA(0,1,0)). O trabalho adicional de especificar termos AR e MA trouxe pouca diferença para os pontos de previsão neste exemplo, apesar de ser perceptível que os intervalos de confiança do modelo auto ARIMA são mais estreitos do que de um passeio aleatório.

Além disso, a previsão fora da amostra gerada ficou bastante aquém dos dados reais para a taxa de crescimento do PIB brasileiro observados no horizonte em questão, configurando apenas um exercício didático.

Saiba mais

Este é apenas um exercício simples e didático demonstrando um fluxo de trabalho de modelagem e previsão. Existem diversos tópicos que podem ser aprofundados e se você quiser saber mais confira o curso de Modelos Preditivos da Análise Macro.

Confira também outros exercícios aplicados com pacotes do {tidyverts}:

Referências

Hyndman, R. J., & Athanasopoulos, G. (2021) Forecasting: principles and practice, 3rd edition, OTexts: Melbourne, Australia. OTexts.com/fpp3. Accessed on 2022-04-01.

 


1A função suporta estimação dos modelos com computação paralela usando o pacote {future}, veja detalhes na documentação e este post para saber mais sobre o tema.

Afinal, o que é Probabilidade?

By | Hackeando o R

Infelizmente não possuímos uma bola de cristal de forma que possamos prever o futuro, e por isso, sempre há uma incerteza em relação a um resultado. Entretanto, apesar de ser extremamente difícil ter 100% de certeza, podemos quantificar essa incerteza, e pelo menos, haver a possibilidade de acertar um certo nível de um resultado. No post de hoje explicamos o que é probabilidade e o seu papel na Análise de Dados.

Antes de introduzir o conceito da probabilidade, devemos entender o conceito de aleatoriedade. A grosso modo, algo é aleatório quando sabemos que haverá um resultado, porém, não sabemos qual será o valor deste resultado, ou seja, segue uma distribuição de probabilidade e não um valor determinístico.

Podemos utilizar o velho exemplo dos dados de seis lados. Se jogarmos o dado, saberemos que o resultado será entre um a seis, porém, não sabemos qual será o seu valor. Essas possibilidade de resultados do dado (um a seis) é chamado de Espaço Amostral. Cada lado desse dado representa uma fração da possibilidade do resultado, sendo sua soma igual a 1 (100%).

Se a probabilidade depende do número de casos favoráveis de cair um lado do dado e do número do casos possíveis, então podemos definir pela equação da probabilidade teórica.

     $$P(evento) = \frac{n°de casos que podem ocorrer}{total de resultados possíveis}$$

No caso do dado, qual a probabilidade de cair no número dois? Obviamente 1/6.

Construímos um tibble com os valores do dado, e "jogamos" ele com a função sample_n

A função set.seed permite que possamos obter o mesmo resultado sempre. Útil para reprodutibilidade e comunicação dos resultados.

E se estivermos jogando um jogo em que não possamos tirar o mesmo lado novamente? Devemos então levar em conta a amostra sem reposição.

Caso não houvesse esta regra, poderíamos rodar o dado novamente com reposição, utilizando o argumento replace = TRUE na função.

Isto nos ajuda a entender o conceito de Independência de eventos, que no caso, aplica-se a rodar o dado com reposição, isto porque, rodar o dado na primeira vez não afeta o resultado da probabilidade na segunda. O que não podemos dizer sobre o caso de rodar o dado sem reposição, o que leva a termo eventos dependentes.

Distribuição de probabilidades

Uma distribuição de probabilidades é uma lista dos possíveis resultados que um evento pode ter, e como cada resultado é comum entre si. Elencaremos duas formas de distribuição de probabilidade: Discreta e Contínua

Discreta

Uma distribuição é considerada discreta quando seus números são contagens em formato de inteiros. Em relação ao dado, sua distribuição segue como discreta devido ao fato de que, teoricamente, seus resultados possuem a mesma probabilidade (1/6).

Contínua

Uma distribuição é considerada contínua quando o resultado pode ser qualquer valor entre dois outros valores. Uma importante distribuição contínua pode ser representada pela distribuição normal, muito famosa pelo seu formato de sino. Esta distribuição, construída por um histograma, possui uma forma simétrica e o seu centro equivale a sua média.

Podemos gerar uma distribuição normal utilizando a função rnorm.

Veja que o histograma acima não representa fielmente a distribuição normal perfeitamente, porém, se adicionarmos cada vez mais valores, poderemos ver que a distribuição cada vez mais se aproxima de uma normal.

Isso ocorre devido ao que é conhecido como Teorema Central do Limite, que permite dizer que quanto maior a amostra, mais a distribuição dos dados se tornam normais e próximas da média.

____________________________________________

Quer saber mais?

Veja nossos cursos de R e Python aplicados para a Análise de Dados e Economia

Validação Cruzada de Séries Temporais

By | Data Science

Quando estimamos um modelo para previsão de séries temporais precisamos avaliar sua performance preditiva. Separar os dados em uma amostra de treino e outra de teste é a forma mais simples de verificar como o modelo performa em dados pseudo fora da amostra, através do cálculo do erro de previsão. Entretanto, a escolha das amostras é arbitrária, o que traz a tona um método mais sofisticado: a validação cruzada. Neste exercício abriremos a caixa preta por trás do assunto mostrando como implementar a técnica no R.

Neste método há uma série de amostras de teste, cada uma consistindo em h observações, ou seja, são os períodos usados para gerar previsões a partir do modelo. A amostra de treino correspondente, usada para estimação do modelo, consiste apenas de observações que ocorreram antes das observações que formam a amostra de teste. Assim, nenhuma observação futura pode ser usada na construção da previsão.

O diagrama a seguir ilustra um esquema de validação cruzada de séries temporais, com uma série de amostras de treino e de teste, para quando se deseja avaliar a performance preditiva do modelo em h = 1 períodos à frente, onde as observações azuis formam as amostras de treino e as observações laranja formam as amostras de teste.

Fonte: Hyndman e Athanasopoulos (2021).

Operacionalização

Dado esse esquema de separação de uma série de amostras de treino e de teste de uma série temporal, o método de validação cruzada pode ser resumido como um procedimento recursivo:

  1. Para cada amostra de treino estime o modelo;
  2. Utilize o modelo estimado para gerar previsões h períodos à frente;
  3. Calcule o erro de previsão com a amostra de teste e a saída da etapa 2.

Ao final, obtém-se a métrica de acurácia (ME, RMSE, MAE, etc.) do modelo pela média de cada iteração.

Esse método é relativamente simples, mas bastante útil para validar a performance de modelos independentemente da amostra de treino/teste escolhida, trazendo uma "visão global" do modelo. A validação cruzada é largamente utilizada por praticantes de machine learning, além de ser uma prática comum em papers que tratam de previsão de séries temporais. Vale pontuar que existem variações do método, que deixaremos para explorar em uma outra oportunidade.

Implementação no R

Mostraremos duas formas de implementar validação cruzada de séries temporais no R:

  1. Através da família de pacotes {tidyverts};
  2. Abrindo a caixa preta e escrevendo o código manualmente.

Em ambos os casos utilizaremos modelos univariados simples, apenas para demonstrar o método, aplicados ao principal índice de preços da economia brasileira, o IPCA, com a finalidade de avaliar as previsões 12 períodos à frente. A primeira amostra de validação cruzada conterá 180 observações e será acrescentado 1 observação sucessivamente até o total de observações excluindo as últimas 12.

Antes de começar você deve ter disponível os seguintes pacotes no seu ambiente de R:

O código abaixo prepara os dados de exemplo. Para saber mais sobre coleta de dados macroeconômicos confira este post no blog da Análise Macro.

Exemplo com {tidyverts}

O primeiro exemplo de implementação de validação cruzada utilizará os pacotes da família {tidyverts}, que é um ótimo framework para trabalhar com séries temporais no R (confira este post sobre o assunto). Sendo assim, o primeiro passo que precisamos fazer é criar as amostras de treino de validação cruzada (observações azuis na ilustração). Isso pode ser feito conforme abaixo (note que removemos as últimas 12 observações, para poder calcular o erro de previsão da última amostra corretamente):

Agora temos uma série de amostras, partindo de 180 observações e acrescentando 1 sucessivamente, que utilizaremos para estimar os modelos de exemplo e gerar previsões. Isso é feito conforme o código abaixo. Note que criamos uma coluna para salvar a informação do horizonte temporal da previsão (isso é opcional, sendo útil apenas quando você quer analisar a acurácia por horizonte preditivo).

Por fim, podemos calcular as métricas de acurácia média considerando todas as amostras e previsões geradas, conforme abaixo:

Como resultado podemos gerar a visualização abaixo, onde é possível analisar os modelos em termos de acurácia (RMSE) por horizonte preditivo:

Exemplo manual

Conforme visto, os procedimentos adotados para implementar o método de validação cruzada de séries temporais são extremamente simples utilizando os pacotes do {tidyverts}. Entretanto, nem sempre teremos à disposição, dentro deste ou outros frameworks, todos os modelos de interesse para implementação rápida através de um pacote. Na vida real, é comum que surjam novos modelos ou que os pacotes implementem e disponibilizem apenas uma parcela do que existe por aí. Nestes casos, será seu trabalho escrever um código que implemente a validação cruzada com tal modelo.

Para exemplificar, abaixo escrevo uma função que implementa o esquema de validação cruzada de forma semelhante ao que acabamos de ver. O modelo utilizado é, por conveniência, o ARIMA automatizado e a definições de amostras são idênticas ao exemplo anterior. Note que o código fica significativamente mais complexo, principalmente para iniciantes, mas é um destino natural de todo profissional que deseje se aventurar por estes caminhos.

A função implementa o que foi destacado previamente, referente ao método recursivo da validação cruzada, retornando uma lista com uma tabela do RMSE por horizonte preditivo e outra com as previsões geradas a cada iteração. Fique à vontade para adaptar ou melhorar a função conforme suas necessidades.

Com a função criada, basta utilizá-la junto aos dados para obter os resultados:

Por fim, plotamos os resultados desta abordagem manual com a abordagem anterior. Note que o RMSE calculado difere levemente. Não investiguei o motivo, mas acredito que seja decorrente de alguma parametrização diferente entre o algoritmo de forecast::auto.arima() e fable::ARIMA().

Saiba mais

Este exercício simples é um ponto de partida para você começar a implementar a validação cruzada em seus modelos de previsão de séries temporais. Caso deseje se aprofundar, confira o curso de Modelos Preditivos da Análise Macro, onde implementamos diversos modelos para séries temporais da economia brasileira.

Referências
Hyndman, R.J., & Athanasopoulos, G. (2021) Forecasting: principles and practice, 3rd edition, OTexts: Melbourne, Australia. OTexts.com/fpp3. Accessed on <2022-05-12>.

O que é Análise Exploratória de Dados?

By | Hackeando o R

Nunca saberemos o que dizem os dados se nunca os analisarmos, este é o princípio da Análise Exploratória de Dados. A AED potencializa a pesquisa com dados, permitindo que analistas consigam entender o que de fato o conjunto de dados descreve. No post de hoje, introduzimos o conceito de AED e demonstramos um exemplo com o R.

O que é AED?

Como dito, a AED é um conjunto de métodos que o analista utiliza para descrever um determinado conjunto de dados, permitindo compreender o comportamento de diversas variáveis. Permite também solidificar uma base para criar hipóteses e modelos preditivos/causais.

Apesar de crucial, a AED causa dificuldades naqueles que querem entrar no mundo dos dados, e o motivo é simples: cada conjunto de dados se comporta de uma forma, portanto, apesar de uma metodologia, cada "ferramenta" da metodologia se encaixa melhor em determinado dataset, enquanto em outros não, portanto, saber diferenciar quais "ferramentas" devem ser utilizadas é parte de um conhecimento analítico e crítico.

Mas afinal, qual metodologia é essa ? De quais formas podemos "entrevistar" nossos dados e retirar insights? Os meios mais importantes são:

  • Classificar as variáveis em categóricas ou quantitativas;
  • Sumarizar os dados utilizando estatísticas descritivas;
  • Visualizar os dados utilizando gráficos.

Como dito, cada um desse processo pode haver inúmeras ferramentas, cada qual se encaixa melhor para um conjunto de dados em específico. Iremos realizar um exercício tomando como base o dataset peguins do pacote {palmerpenguins}, que possui dados de medidas dos corpos de pinguins, por espécies, por sexo e por ilha em Palmer Station na Antárctica.  Explicaremos como podemos ler o dataset, bem como cada qual ferramenta podemos utilizar inserido no contexto de cada processo acima.

Antes de começar a AED, precisamos olhar nosso conjunto de dados e assegurar que eles devem ter os seguintes requisitos: deve seguir uma forma retangular/tabular de colunas e linhas; cada linha deve representar uma observação; cada coluna representa uma variável. Abaixo, carregamos o pacote e vemos como é o dataset penguins.

Veja que o dataset segue uma forma retangular com colunas e linhas, o que facilita o uso da linguagem e de outro softwares para realizar uma análise dos dados. Como dito, chamamos a colunas de variáveis e linhas de observações, e qual o significado disto?

Observações remetem uma única observação do dataset e suas características, desde indivíduos, tempo, país e no caso do dataset acima, uma amostra sobre as informações de pinguins em Palmer Station, com um total de 334 linhas.

As características destes pinguins são representadas pelas colunas, chamadas de variáveis. Ocorre uma variação de cada observação ao longo das linhas, portanto, as variáveis provêm informações preciosas sobre algo. Há 8 variáveis no dataset penguins.

Cada variável possui um tipo diferente, e que para cada tipo existe uma ferramenta adequada para a análise. A classificação destas variáveis é realizada de forma relativamente arbitrária, com um certo padrão na escolha destes tipos. Elas podem ser:

  • Categóricas: Assume valores que dizem respeito sobre a qualidade ou característica de cada observação.  Os valores são não numéricos, como strings (caracteres) ou lógicos. É subdividido em binário, nominal e ordinal.
    • Binário: Assume apenas dois valores, normalmente como sim ou não; True ou False; 0 ou 1 ou qualquer outra característica de dois valores;
    • Nominal: Valores qualitativos que assumem mais de dois valores, como país, nome, espécie do pinguim, etc.
    • Ordinal: Valores qualitativos que assumem mais de dois valores e também possuem uma ordem intrínseca, como pequeno, médio, grande, dias da semana e etc.
  • Quantitativas: variáveis quantitativas são valores numéricos que dizem respeito a grandeza de uma variável. Assumem valores contínuos ou discretos.
    • Contínuo: em teoria, assumem uma distância não padrão entre uma observação e outra, bem como essa distância pode ser um número infinito de possíveis valores.
    • Discreto: assumem apenas valores fixos entre duas observações.

Classificação de variáveis

Vemos no dataset qual variável se encaixa melhor em cada classificação, remetemos novamente ao quadro anterior, e utilizamos a função glimpse() para entender como o R reconhece as variáveis. Veja que não é difícil tirar conclusões sobre.

  1. species (fct) - categóricos - nominal: Espécie do pinguim
  2. island (fct) - categórico - nominal: Ilha do pinguim
  3. bill_length_mm (double) - quantitativo - continuo: comprimento do cúlmen
  4. bill_depth_mm (double)  - quantitativo - continuo: profundidade do cúlmen
  5. flipper_length_mm - (integer) - quantitativo  - contínuo: comprimento da nadadeira
  6. body_mass_g (integer) - quantitativo - contínuo: massa corporal
  7. sex (fct) - categórico - binário: Sexo do Pinguim
  8. year (integer) - categórico - ordinal:  Ano

Explorando: variáveis categóricas

Antes de explorar os dados, devemos primeiro realizar uma pergunta a nós mesmos: o que eu quero analisar? De fato, podemos simplesmente realizar visualizações e construir estatísticas descritivas com todas as variáveis, mas antes, realizar a definição de uma pergunta sobre o que analisar facilita a direção do trabalho.

Com isso, podemos realizar a pergunta: Qual a distribuição de pinguins por espécies em cada ilha? E o sexo? Podemos explorar as variáveis categóricas a fim de obter as respostas.

As variáveis categóricas devem ser exploradas em formato de contagem, afinal, como não são numéricas não podemos utilizar de medidas estatísticas diretamente. Utilizamos a função count() do pacote {dplyr} para realizar o cálculo.

Em poucas linhas obtivemos os resultado das perguntas criadas acima. O interessante do count() é que é também útil para alegar um problema constante na AED: valores faltantes no dataset.  Não iremos lidar diretamente com este problema aqui, porém, tomaremos cuidado com eles na análise.

Outro método mais amigável para investigar variáveis categóricas é através da visualização. Utilizaremos o pacote ggplot2 para gerar um gráfico de barras, que é uma das melhores ferramentas para averiguar a distribuição dos dados categóricos.



Interessante, não? Podemos partir para como lidar com as variáveis quantitativas.

Explorando variáveis quantitativas

Será que pinguins de diferentes ilhas possuem tamanhos de bicos muito diferentes? Qual espécie possui, em média, uma massa corporal maior? Aqui podemos utilizar diretamente de medidas estatísticas. Para as perguntas, podemos realizar uma combinação da função group_by() para agrupar por categóricas, e em seguida utilizar a função summarise() para aplicar o cálculo de uma medida estatística para cada grupo.

Veja que ambas as perguntas foram respondidas, uma por meio do desvio padrão e outro por meio da média. Com cada resposta seria possível realizar ainda mais perguntas sobre os dados, como: A variação do comprimento do bico em cada ilha ocorre devido as distribuição de espécies por ilha? Além da espécie, é necessário levar em conta a distribuição do sexo de penguim por espécie para tirar conclusões sobre o peso? De fato, poderíamos criar cada vez mais perguntas e seguir uma caminho para Análise, por isso, é sempre necessário escolher um direcionamento antes de começar um AED.

Como seria exaustivo responder todas as perguntas aqui, continuaremos a utilizar diferentes ferramentas para entender as perguntas feitas anteriormente. Os gráficos podem ser nossos aliados.

____________________________________________

Essas são algumas das ferramentas que podemos utilizar para que possamos realizar uma Análise Exploratória de Dados. Existem inúmeras outras técnicas e que você pode aprender com nossos cursos de R e Python aplicados para a Análise de Dados e Economia. Confira:

Fazendo limpeza de dados Macroeconômicos com R e o Python

By | Hackeando o R, Python

O processo de limpeza de dados é extremamente importante para a análise de dados. Sem esta etapa, seria impossível lidar com dados "sujos", dos quais possuem formatos, classes e estruturas não compatíveis com o R e o Python, principalmente para o modo de lidar com dados Macroeconômicos. O objetivo do post de hoje será mostrar os pontos principais que devem ser levados em consideração ao realizar o processo de limpeza de dados.

Ao realizar a importação de dados Macroeconômicos, é comum enfrentar alguns desafios para efetivamente lidar com o dataset, sendo eles:

  • Nomes de colunas indesejadas;
  • Colunas (variáveis) não necessárias;
  • Filtragem;
  • Formatos/tipos dos dados de variáveis não corretos;
  • Problemas com o formato de data

Cada problema listado acima pode ser resolvido facilmente utilizando o R e o Python. Elencaremos cada problema em ambas as linguagens

Limpeza de dados Macroeconômicos no R

Tomaremos como exemplo a série do PIB a preços de mercado em milhões retirado do Ipeadata utilizando o pacote {ipeadatar}. O primeiro passo será investigar o data frame e sua estrutura

Vemos que o data frame já é importado em classe tibble com cinco colunas, representando o código, a data, o valor da série, o nome do território e o código territorial, respectivamente. Não há motivos para manter as colunas que não sejam a de data e do valor da série, portanto, iremos remover estas colunas utilizando a função select().

O próximo passo, este mais a gosto do usuário, será renomear as colunas do objeto. Como queremos que sejam facilmente reconhecidos as variáveis, utilizaremos nomes que sugerem o seu significado.

Um ponto interessante do R é a facilidade de manipulação com séries temporais. Ao inspecionar o tibble, vemos que há um intervalo trimestral para as observações, seria interessante, portanto, utilizar um formato de data mais conveniente para o caso. Podemos realizar a mudança utilizando a função yearquarter() do pacote {tsibble}.

Fácil até então, certo? Porém, nem sempre pode ser tão facilitado assim. Um caso em que as variáveis não são importadas com seus devidos formatos ocorre ao utilizar o pacote {sidrar} para obter dados do Sidra - IBGE.

Como exemplo podemos utilizar a Pesquisa Mensal de Serviços da Tabela 6442. Obtemos sua API através do site do Sidra.

Ao analisar o data frame importado, não parece tão simples, certo? O primeiro passo para a limpeza, será definir quais variáveis necessitamos e destas, quais devem ser realizadas as manipulações. Para o momento, queremos o valor da variável, a coluna que define a categoria que o valor se encaixa, uma representado se o valor possui ou não ajuste sazonal, uma coluna definindo qual medida se refere a variável, sendo os valores a receita nominal ou o volume, e não menos importante, a data das observações.

O processo será selecionar estas colunas citadas, mudar seus nomes, filtrar a categoria de interesse da medida, mudar de long para wide e por fim, realizar as mudanças necessárias para a data.

Limpeza de dados Macroeconômicos no Python

Todos os procedimentos acima podem ser feitos também utilizando o Python. Seremos mais diretos desta vez, importando a tabela 1442 do Sidra com a biblioteca {sidrapy} que se refere aos dados do IPCA.

O primeiro procedimento será avaliar  o data frame importado e realizar os ajustes necessários.

Veja que os dados importados possuem colunas com nomes diferentes daqueles importados pelo R, a diferença estão que as colunas com os verdadeiros nomes estão localizados na primeiro observação do data frame, ou seja, precisamos substituir as colunas pela primeira observação.

O segundo passo será selecionar apenas as variáveis de interesse, bem como alterar os seus nomes para algo mais útil.

Por fim, devemos realizar o filtro para a variação do IPCA mensal, de acordo com a categoria inserida na coluna 'variable' e em seguida, alterar a coluna de data para o tipo datetime e a realocar para o índice do data frame.

Quer saber mais sobre R e Python?

Veja nossos cursos de:

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente