All Posts By

diogowolff

Relatório AM #4 - Inflação

By | Indicadores

Como comentamos no nosso Relatório nº 2, a trajetória da inflação atual parece indicar uma espécie de estagflação, com nível elevado em conjunto com um nível de atividade ainda abaixo do usual. Esse resultado parece estar se revertendo aos poucos, com o resultado recente de crescimento do PIB, porém ainda consideramos que a inflação é, de modo geral, resultado de choques. Podemos ver os resultados recentes do PIB na tabela abaixo:

É evidente que o crescimento é puxado pelo crescimento da agropecuária e da exportação. Os setores de indústria e serviços aparentam ter estabilizado, condizente com os resultados do post de semana passada de nowcasting do PIB, que indica alta correlação entre o PIB e o consumo de energia. Como a evidência recente é de que o consumo de energia já está em patamares pré-pandemia, o crescimento da produção industrial através da recuperação utilização da capacidade instalada está perdendo espaço, tendo se realizado em maior parte no terceiro trimestre de 2020.

Ademais, mantemos a previsão que apresentamos de 0.709% para o IPCA mensal. Para chegarmos nela, utilizamos modelagem econométrica de ponta, como em todos os trabalhos aqui da Análise Macro. O valor final é combinação de 3 tipos de modelo, CSR, bagging e regressão lasso, tendo dezenas de variáveis explicativas disponíveis ao público geral como entradas. Com isso, desenvolvemos uma previsão de qualidade, e que pode ser reproduzida por qualquer aluno de nossos cursos.

Hackeando o R: métodos de clustering

By | Hackeando o R

No Hackeando o R de hoje, vamos concluir os posts dessa série de machine learning introduzindo métodos de clustering no R. Essas ferramentas são muito utilizadas para a análise de dados não-supervisionados, ou seja, dados que não possuem uma variável de resposta para servir como validação da previsão. Quando tratamos informações dessa natureza, o objetivo da modelagem estatística passa a ser então identificar subgrupos dentro das observações disponíveis, através da possível formação de agrupamentos (os chamados clusters) delas em regiões distintas no espaço dos seus possíveis valores. Com isso, vamos focar em dois métodos de agrupamento:o K-means clustering e o hierarchical clustering.

Para ilustrar, pense que você possui uma coleção de dados sobre clientes de sua loja, e quer identificar possíveis segmentos de mercado para especializar seus anúncios. Não há uma mensuração específica que indique que o indivíduo i faz parte do segmento y, porém, de posse dos dados de n indivíduos, podemos construir grupos de indivíduos que são estatisticamente parecidos.

Nesse contexto, o método de K-means clustering busca gerar subgrupos que minimizam suas variâncias dentro de cada grupo. O ponto importante desse método é que ele exige que se escolha previamente o número de grupos que serão encontrados, e o algoritmo utilizado para gerar a divisão não necessariamente encontra o melhor resultado, então devemos rodá-lo múltiplas vezes. Abaixo, geramos dados que possuem dois grupos, e então testamos a função kmeans() do pacote base do R. Note que fornecemos ao R o número de grupos que queremos utilizar (k=2) e o número de vezes para rodar o modelo (nstart=20):

set.seed(2)
x=matrix(rnorm(50*2), ncol=2)
x[1:25, 1]=x[1:25, 1]+3
x[1:25, 2]=x[1:25, 2]-4

km.out=kmeans(x, 2, nstart=20)

plot(x, col=(km.out$cluster+1), main= "K-Means Clustering
com 2 grupos", xlab ="", ylab="", pch=20, cex=2)


Já no caso do hierarchial clustering, não nos preocupamos tanto com a escolha de número de grupos, que é feita antes da análise e é relativamente arbitrária, e sim com o método de aproximação a ser feito. A análise hierárquica constroi uma árvore chamada dendrograma, cujas folhas são observações e os galhos são grupos de tamanho crescente conforme você se aproxima do tronco. Para gerarmos os grupos, primeiramente identificamos a distância entre cada uma das observações (considerando elas grupos de 1 indivíduo), e formamos o primeiro grupo com as duas mais próximas. Então, calculamos a distância entre todos os grupos (com alguma métrica pré-definida) e geramos o novo grupo com os dois mais próximos, e seguimos recursivamente até gerarmos a árvore final. Abaixo, geramos a árvore com nossos dados, considerando a distância entre os grupos como a maior distância entre um ponto de um grupo e um ponto de outro:


hc.complete=hclust(dist(x), method="complete")
plot(hc.complete)

É importante notar que a distância horizontal entre as observações não reflete na sua distância real. No exemplo, a observação 42 parece mais próxima da 26 do que da 37 ou da 50, porém ela na verdade é próxima do cluster formado por essas 3. Com isso, o que importa para definirmos a proximidade é a distância vertical entre as observações no dendrograma. Com essa estrutura montada, podemos gerar os clusters escolhendo qual altura utilizar para seccionar a árvore. Abaixo, cortaremos a árvore em 2 clusters.


cutree(hc.complete, 2)

Como exemplo final, iremos aplicar os métodos sobre dados de células de câncer da base NCI60. Primeiramente, vamos padronizar os dados. Isso é importante pois variáveis de escala muito maior acabam dominando a variação de outras variáveis, tornando mais difícil encontrarmos relações entre elas.


library(ISLR)

nci.labs=NCI60$labs
nci.data=NCI60$data

sd.data=scale(nci.data)

data.dist=dist(sd.data)

Vamos agora cortar a árvore:


hc.out=hclust(dist(sd.data))
hc.clusters=cutree(hc.out, 4)

plot(hc.out, labels=nci.labs)
abline(h=139, col ="red")

Conteúdos como esse podem ser encontrados no nosso Curso de Machine Learning usando o R.

_____________________

Relatório AM #3 - Mercado de trabalho

By | Indicadores

Na semana passada, a taxa de desemprego foi divulgada em 14.7% no 1º trimestre, o que equivale a cerca de 14.8 milhões de desempregados. Esses dados podem ser resumidos na tabela abaixo:

É importante notar que houve uma mudança na nomenclatura da PNAD: PIA é agora população total, PEA é força de trabalho, e a PNEA é fora da força. Vemos que houve um aumento da força de trabalho, simultaneamente com aumento da população desocupada. O nível de desemprego claramente é anormal, como resultado da crise de 2020, porém a variação vista nos últimos 2 meses tem, além do fator restrições sobre o comércio devido à nova onda de casos, um fator cíclico anual:

A taxa de desemprego após um choque como o visto atualmente traz grande preocupação para o futuro, devido ao fenômeno da histerese. Com o maior número de desempregados, a chance de uma pessoa passar mais tempo sem emprego é maior, o que pode causar uma diminuição de seu capital humano, tornando ainda mais difícil sua reinserção no mercado de trabalho, gerando um ciclo vicioso. Abaixo, podemos ver que a população que está há mais de 2 anos sem emprego aumentou ao longo de 2020, evidenciando esse problema:

Outro ponto que tem sido muito discutido atualmente é a relevância dos dados do CAGED, devido a dúvidas sobre sua validade como medida do mercado de trabalho após a mudança em sua metodologia. Abaixo, os resultados do saldo nos últimos meses:

 

 

Como podemos ver, apesar de diminuir em magnitude, o saldo de admissões está positivo nos últimos meses, o que parece discordar com a taxa de desemprego crescente. Esse dado se torna ainda mais duvidoso ao compararmos com as estatísticas da PNAD contínua:

Como podemos ver, o nível de empregados com carteira diminuiu nos dados mais recentes, sendo o nível geral compensado por trabalhadores sem carteira e autônomos. Para justificar um saldo positivo como apresentado acima, teríamos que supor uma grande redução no número de demissões, o que não condiz com o movimento sazonal de começo de ano. Com isso, os dados do CAGED parecem ter se tornado demasiadamente problemáticos para serem confiáveis.

O gráfico apresentado acima faz parte do nosso monitor de mercado de trabalho. Ele é um aplicativo interativo, que realiza diversas visualizações e facilita a compreensão de tudo que está acontecendo na macroeconomia em tempo real. Também estamos publicando outros 3 monitores: de inflação, atividade e do mercado de crédito.

Dicas de R: a modelagem de Support Vector Machines

By | Hackeando o R

No Dicas de R de hoje, seguindo nossa trajetória de modelos de machine learning, vamos introduzir support vector machines (SVMs). Essa metodologia é amplamente utilizada para a classificação de dados que possuem duas classes, porém pode ser expandida para dados com mais classes. Com isso, vamos apresentar a teoria por trás do SVM de modo simplificado, e mostrar como podemos utilizar esse modelo no R.

A ideia por trás do SVM em seu formato mais básico é utilizar a separabilidade das classes para criar um classificador. Para fazer isso, considerando os dados no espaço multi-dimensional das variáveis explicativas, buscamos criar um hiperplano (uma estrutura de menor dimensão que separa o espaço em dois) que prevê a classe de uma observação comparando o valor das variáveis explicativas (ou seja, a posição da observação no espaço) em relação a si. Como de modo geral é possível criar infinitos tais planos, o método básico (chamado de maximal margin classifier) encontra o plano que é mais distante das observações de treino. Com isso, podemos mostrar que esse método depende apenas dos pontos de cada classe que ficam mais próximos do hiperplano, que são chamados de support vectors.

Como apenas esses "pivôs" importam, a variância do método básico é bem alta. Com isso, para reduzir tal variância (e, por consequência, gerando algum viés), podemos permitir que algumas observações de treino fiquem a pouca distância do classificador, ou até mesmo fiquem no lado errado do hiperplano. Esse novo modelo é chamado de support vector classifier, e tem derivação parecida com o anterior, porém compartilha um problema com o primeiro: a dependência da separabilidade.

Pode ser o caso de que a separação entre as classes seja como uma parábola, ou, uma classe fique ao redor da outra no espaço. Nessas situações, um separador linear terá péssimos resultados, exigindo uma maior complexidade da especificação, onde entram então as SVMs. Não vamos entrar em toda a matemática por trás, mas de modo resumido, modelos SVM expandem o universo das variáveis explicativas para suas transformações, criando um hiperplano em volta não apenas das combinações lineares das variáveis em nível como também de funções delas.

Agora, vamos mostrar um exemplo no R de uma SVM. Para isso, utilizaremos o pacote e1071, que implementa diversas ferramentas estatísticas.


library(e1071)

x=matrix(rnorm(20*2), ncol = 2)
y=c(rep(-1,10), rep(1, 10))
x[y==1,] = x[y==1,] + 1
plot(x, col=(3-y))


Como podemos ver, os dados gerados não possuem a propriedade de separabilidade, logo o modelo simples não geraria um bom resultado. Abaixo, rodamos o modelo com um separador linear:


dat=data.frame(x=x, y=as.factor(y))

svmfit=svm(y ~ . , data=dat, kernel= "linear", cost=10,
scale=FALSE)

plot(svmfit, dat)

Para utilizarmos especificações diferentes, como polinomial e radial, basta modificar o argumento kernel, que define a "máquina" utilizada.

Conteúdos como esse podem ser encontrados no nosso Curso de Machine Learning usando o R.

_____________________

Relatório AM #2 - nossa perspectiva sobre a inflação para o ano

By | Indicadores

Um tema que tem se mostrado preocupante nos últimos meses é a trajetória da inflação. Com o lockdown no começo do ano passado, presenciamos uma brusca redução nas taxas de inflação entre o primeiro e segundo trimestres de 2020, consequência direta e esperada de uma economia em paralisação quase plena. O resultado esperado na época era de uma retomada gradual, porém eficiente, de modo que os níveis de produção e emprego, assim como o da inflação, retornariam ao patamar esperado ao final do ano. A realidade acabou sendo diferente, como pode ser vista no gráfico abaixo.

Após os meses de inflação abaixo do intervalo da meta, observamos uma escalada veloz no segundo semestre de 2020, culminando em um nível de inflação acima do intervalo superior da meta em 2021, estando atualmente em 6.76%. É difícil resumir os fatos que explicam essa elevação, porém podemos citar alguns:

  • As incertezas políticas vivenciadas no país, com grande indecisão sobre o rumo do governo e dos gastos públicos (que podem ser influenciados com um viés eleitoral), tornam o risco agregado do país maior.
  • Efeitos externos, como a escalada dos preços de commodities que ocorreu entre o final do ano passado e o começo desse ano, geram grande pressão por parte da produção sobre os preços, causando efeitos desiguais sobre os núcleos de inflação. Os choque de oferta no ano passado impactaram fortemente alimentos, sendo produzidos majoritariamente para a exportação e gerando inflação nos preços domésticos, enquanto que no momento a alta dos combustíveis impacta em maior nível os custos de transporte da população.

Nesse contexto, é importante notar que, enquanto o resultado ao longo do final do ano passado poderia configurar uma estagflação, como vimos no relatório de semana passada, a economia parece estar de modo geral em recuperação, logo a inflação vista atualmente não é resultado apenas de choques, mas também de seu valor esperado antes da pandemia. Abaixo, deixamos as previsões modeladas pelos economistas da Análise Macro, com expectativas para os próximos meses:

A previsão feita pelo nosso modelo para o mês de maio é de 0.70%, acima de maior parte das expectativas reportadas pelo consenso de mercado, observado pelo boletim Focus.

No resultado acumulado de 12 meses, esse valor equivale a uma inflação de 7.95%, aproximadamente.

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

Assinar Gratuitamente
{"cart_token":"","hash":"","cart_data":""}