Tag

previsão combinada Archives - Análise Macro

Previsão do Desemprego: Redes Neurais vs. Previsões do Focus

By | Data Science

Motivação

Na vida real dificilmente encontramos em séries temporais (econômicas) características desejáveis como estacionariedade e linearidade. Modelos econométricos bastante conhecidos como o ARIMA podem contornar o primeiro problema ao diferenciar a série, mas falham em capturar não linearidades. Dessa forma, modelos não lineares precisam ser empregados e um candidato natural é o modelo de redes neurais.

A arquitetura de uma rede neural simples

As redes neurais são métodos de previsão baseados em modelos matemáticos simples do cérebro, capazes de realizar aprendizado de máquina. Elas permitem relacionamentos não lineares complexos entre a variável de interesse e suas regressoras.

Uma rede neural pode ser pensada como uma rede de "neurônios" organizados em camadas. Os regressores (ou inputs) formam a camada inferior e as previsões (ou outputs) formam a camada superior. Também pode haver camadas intermediárias contendo "neurônios ocultos". As redes neurais mais simples não contêm camadas ocultas e são equivalentes a regressões lineares.

O diagrama a seguir mostra a versão de rede neural de uma regressão linear com quatro regressores. Os coeficientes associados a esses regressores são chamados de "pesos". As previsões são obtidas por uma combinação linear dos inputs. Os pesos são selecionados na estrutura da rede neural usando um "algoritmo de aprendizado" cujo objetivo é minimizar uma "função de custo" - como o EQM - e é comumente chamado de "algoritmo de aprendizagem por retropropagação do erro".

Fonte: Hyndman and Athanasopoulos (2021)

Uma rede neural com camada oculta

Uma vez que adicionamos uma camada intermediária com neurônios ocultos, a rede neural se torna não linear. Um exemplo simples é mostrado no diagrama a seguir.

Fonte: Hyndman and Athanasopoulos (2021)

Isso é conhecido como uma rede multilayer feed-forward network, onde cada camada de nós recebe entradas das camadas anteriores. As saídas dos nós em uma camada são entradas para a próxima camada. As entradas para cada nó são combinadas usando uma combinação linear ponderada. O resultado é então modificado por uma função não linear (como uma função sigmoide) antes de ser gerado. Isso tende a reduzir o efeito de valores extremos de entrada, tornando a rede um pouco robusta a outliers.

O número de camadas ocultas e o número de nós em cada camada oculta devem ser especificados.

Autoregressão de rede neural (NNAR)

Em se tratando de séries temporais, valores defasados da série podem ser usados como entradas em uma rede neural, assim como usamos valores defasados em um modelo autorregressivo (AR).

Tomando como exemplo uma rede neural com uma camada oculta, usamos a notação NNAR(p, k) para indicar que existem p entradas defasadas e k nós na camada oculta. Por exemplo, um modelo NNAR(9, 3) é uma rede neural com as últimas nove observações usadas como entradas para prever a saída yt e possui 3 neurônios na camada oculta.

Da mesma forma, podemos representar e usar o NNAR para séries sazonais, como é característico em dados que buscam representar o mercado de trabalho de uma economia, por exemplo a taxa de desocupação.

O modelo tem como vantagem a menor complexidade e maior interpretabilidade em relação a um modelo com múltiplas camadas ocultas. Para saber mais veja Hyndman e Athanasopoulos (2021) e Faraway e Chatfeld (1998).

Modelo híbrido: ARIMA + NNAR

De forma a explorar as características lineares e não lineares da série temporal da taxa de desocupação brasileira (PNADC-M/IBGE), e seguindo Chakraborty et al. (2020), propomos um algoritmo em dois estágios que constrói um modelo híbrido de previsão, assumindo que os modelos podem captar as características separadamente e então suas previsões podem ser combinadas. O diagrama abaixo sintetiza a abordagem:

Exemplo com a taxa de desocupação

Para testar empiricamente a abordagem proposta, implementamos o algoritmo usando o pacote {fable} (veja um tutorial aqui) no R e comparamos os resultados com as previsões de mercado disponibilizadas no sistema de expectativas (Focus) do Banco Central do Brasil (BCB). Há poucos dados de expectativas de mercado para a taxa de desocupação (PNADC-M), dado que a coleta dessa informação se iniciou em 2021 pelo BCB, limitando a comparação. O objetivo é verificar se o modelo híbrido ARIMA+NNAR supera em termos de acurácia as previsões de mercado.

O exercício foi implementado usando validação cruzada e considerando uma janela amostral crescente, partindo de 112 observações iniciais e adicionando 1 observação a cada iteração. As previsões foram geradas no horizonte de 6 meses (pseudo) fora da amostra a partir de cada sub amostra de validação cruzada, possibilitando o cálculo de métricas de acurácia por horizonte preditivo (1, 2, ..., 6 meses).

Os dados do Focus foram tratados de modo a filtrar a expectativa mais recente disponível para uma dada data de referência. O IBGE divulga a taxa de desocupação mensalmente com um atraso de ≈ 1 mês, dessa forma consideramos como horizonte preditivo, de forma a comparar as previsões, a diferença em meses da expectativa registrada no Focus na data j em relação a data de referência t deste indicador. Dado a assincronia/atraso de divulgação da maioria dos dados econômicos em relação as suas datas de referência, as expectativas registradas no Focus após a data de referência são tomadas como expectativas futuras (o BCB aceita expectativas para o indicador até a data anterior a sua divulgação).

Resultados

O gráfico abaixo compara, por horizonte de previsão, o modelo híbrido ARIMA+NNAR e as previsões de mercado do Focus através da métrica de erro RMSE e pelo U de Theil. Por ambas as métricas o modelo proposto apresenta resultados melhores em relação ao benchmark de mercado, superando também as previsões de um modelo de passeio aleatório nos horizontes de 1 a 2 meses.

A tabela abaixo apresenta outras métricas de acurácia calculadas:

Comentários

Os resultados apresentados estão em linha com o encontrado por Chakraborty et al. (2020) para diversas outras economias que apresentam taxas de desemprego com características semelhantes à série brasileira, como Canada, Alemanha, Japão, Holanda, Nova Zelândia, Suécia e Suíça.

Apesar disso, melhorias e aprofundamentos da abordagem podem ser objeto de futura investigação. Como exemplo, destacamos que a abordagem é intensiva computacionalmente, havendo contribuições tanto do algoritmo do ARIMA quanto do NNAR para a morosidade dos procedimentos de estimação e previsão.

Códigos de R para replicação estão disponíveis para membros do Clube AM da Análise Macro.

Referências

Chakraborty, T., Chakraborty, A. K., Biswas, M., Banerjee, S., & Bhattacharya, S. (2020). Unemployment Rate Forecasting: A Hybrid Approach. Computational Economics. doi:10.1007/s10614-020-10040-2

Faraway, J., & Chatfeld, C. (1998). Time series forecasting with neural networks: A comparative study using the air line data. Journal of the Royal Statistical Society: Series C (Applied Statistics), 47(2), 231–250.

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

Complete Subset Regression (CSR): um MQO turbinado?

By | Data Science

A inflação medida pelo IPCA é uma variável que possivelmente pode ser relacionada com uma série de outras variáveis, desde indicadores de nível de atividade, de expectativas, de mercado de trabalho até indicadores de política monetária, para citar alguns. E no mundo de hoje há uma abundância de dados, uma simples navegação até o sistema SGS do BCB já possibilita encontrar milhares de séries temporais. Dessa forma, rapidamente podemos incorrer na armadilha da alta dimensionalidade dentro de um problema de previsão, ou seja, quando temos mais variáveis (K) do que observações (T). Isso é especialmente comum em problemas de previsão de séries macroeconômicas, como o exemplo do IPCA, mas acontece em outras áreas também.

Portanto, como estimar relações entre as variáveis e construir previsões com essa dimensionalidade de dados? Como você escolhe quais variáveis relacionar e define quais são as mais importantes?

Mesmo que você não esteja em uma situação de problema de alta dimensionalidade, se as variáveis forem altamente correlacionadas e a variável que você deseja prever apresentar muitos ruídos, problemas como multicolinearidade e overfitting poderão aparecer, pois o modelo tentará ajustar o ruído. Você poderia então contornar esses problemas ao selecionar algumas variáveis para estimar um modelo em que K < T, mas a seleção das variáveis pode trazer outro problema que é selecionar variáveis que não ajudam em termos de performance preditiva, ou seja, você poderia perder informação útil para o modelo.

Uma outra solução poderia ser estimar vários modelos com diferentes seleções de variáveis em cada e, então, combinar as previsões individuais destes modelos. O comum dessa abordagem são modelos univariados, onde o interesse é prever a variável dependente usando vários modelos, cada um com uma variável independente diferente. No entanto, você provavelmente precisará mais do que um modelo univariado para explicar sua variável de interesse. Nesse caso, outra abordagem possível pode ser estimar modelos para todas as combinações possíveis de variáveis, porém o procedimento pode ser rapidamente inviável computacionalmente se o número de variáveis for muito grande.

O método CSR

A abordagem do método Complete Subset Regression (CSR) busca solucionar alguns desses problemas, pois permite definir um número k de variáveis e estimar todos os possíveis modelos com k < K variáveis (por isso subset), ou seja, teremos um total de K! / (k!(K - k)!) modelos estimados. Por exemplo, se você tem K = 20 variáveis e define k = 15 serão estimados 15504 modelos. A previsão do CSR é, então, gerada a partir da média das previsões obtidas por cada modelo.

Esse método é relativamente novo e simples, apresentado por Elliott et al. (2013), sendo bastante interessante para problemas de previsão com alta dimensionalidade. Conforme os autores, podemos destacar algumas das principais vantagens do CSR:

  • Leva em conta o viés de variável omitida;
  • Aplica pesos flexíveis aos coeficientes das regressões;
  • É capaz de produzir menor erro de previsão fora da amostra em relação ao MQO e benchmarks.

Os autores também discutem, entre outros tópicos, o tradeoff entre viés e variância no contexto do método. Se você estiver interessado, estes e outros detalhes — assim como resultados de aplicações empíricas — são abordados no paper referenciado. Vale a pena conferir!

Em resumo, o CSR é um método recursivo em três simples etapas:

  1. Estime todos os modelos possíveis com k < K variáveis;
  2. Calcule as previsões de todos os modelos;
  3. Calcule a média de todas as previsões para obter a previsão final.

Apesar da simplicidade e das vantagens, o método parece ser ainda pouco difundido na área de ciência de dados. Portanto, a seguir mostramos como implementar o CSR utilizando a linguagem R.

Implementação no R

No R, a implementação do método CSR pode ser feita através do pacote {HDeconometrics}, que adota um procedimento adicional em relação ao método CSR original, conforme descrito em Garcia et al. (2017). O procedimento adicional envolve, em resumo, uma etapa de pré-seleção de variáveis em termos de poder de previsão; isso é feito com base na estatística t dos coeficientes estimados por regressões da variável de interesse contra cada K variável candidata. Estas variáveis pré-selecionadas são, então, usadas no método CSR.

Como exemplo, seguindo a provocação inicial do texto, definimos como interesse a previsão da inflação brasileira, medida pelo IPCA (% a.m.). A fonte de dados utilizada será o dataset de Garcia et al. (2017), que traz uma série de variáveis referentes a índices de preços, variáveis macroeconômicas, de expectativas, etc., além da própria variável de interesse. O dataset compreende a janela amostral de janeiro/2003 a dezembro/2015, totalizando 156 observações e 92 variáveis.

Os dados e o código de exemplo são disponibilizados nos próprios exemplos de uso na documentação do {HDeconometrics}, sendo que apenas adaptamos para demonstrar com a finalidade de previsão. Se você tiver interesse em um exemplo com dados mais atualizados e em uma estratégia de previsão completa, confira o curso de Modelos Preditivos da Análise Macro.

O pacote {HDeconometrics} está disponível para instalação através do GitHub, conforme o comando abaixo:

Os dados podem ser carregados para o seu Global Environment conforme abaixo:

Em seguida realizamos a preparação dos dados, com vistas a estimar um modelo na forma do IPCA corrente contra defasagens das variáveis regressoras candidatas, definindo as últimas 24 observações como alvo de previsão:

Por fim, o modelo pode ser estimado definindo o valor de K, que é o número de variáveis selecionadas na etapa de pré-seleção, e de k, que é o número de variáveis utilizadas em cada possível regressão do método CSR. Opcionalmente, podem ser definidas variáveis como parâmetros fixos no modelo, através do argumento fixed.controls. Nesse caso, definimos a primeira defasagem do IPCA como parâmetro fixo, indicando o índice da coluna correspondente em x, o que significa que cada possível modelo terá k + 1 variáveis.

A seguir estimamos o modelo, calculamos as previsões 24 períodos a frente (pseudo fora da amostra) e plotamos o resultado comparando o valor observado do IPCA versus o previsto pelo modelo no período.

Apesar de ser um exemplo simples e sem muita robustez metodológica da forma como implementado, o resultado parece não ser ruim e, de fato, quando comparamos com outros modelos como Bagging, LASSO, etc., o método CSR se destaca em termos de acurácia de previsão do IPCA. Sinta-se livre para estimar outros modelos e realizar a comparação, assim como calcular o erro de previsão e métricas de acurácia.

Referências

Elliott, G., Gargano, A., & Timmermann, A. (2013). Complete subset regressions. Journal of Econometrics, 177(2), 357-373.

Vasconcelos, Gabriel F. R. (2022). HDeconometrics: Implementation of several econometric models in high-dimension. R package version 0.1.0.

Vasconcelos, Gabriel F. R. (2017, May 31). Complete Subset Regressions, simple and powerful. R-bloggers. https://www.r-bloggers.com/2017/05/complete-subset-regressions-simple-and-powerful/

Garcia, M. G., Medeiros, M. C., & Vasconcelos, G. F. (2017). Real-time inflation forecasting with high-dimensional models: The case of Brazil. International Journal of Forecasting, 33(3), 679-693.

 

Gerando Previsões Combinadas para a Inflação a partir dos grupos do IPCA

By | Comentário de Conjuntura

A inflação cheia medida pelo IPCA em um período t qualquer nada mais é do que a soma da contribuição da inflação em cada um dos seus nove grupos, de acordo com os pesos dos mesmos no índice. Em outros termos,

(1)   \begin{align*} \pi_t = \sum_{i=1}^{9} \pi_{t,i}^{g} p_{t,i}^{g} \end{align*}

onde \pi_t é a inflação cheia, \pi_{t,i}^{g} é a inflação em t no grupo i e p_{t,i}^{g} é o peso em t do grupo i no índice cheio. De modo a ilustrar, podemos baixar com o pacote sidrar, as variações e os pesos desses nove grupos do IPCA, conforme o código abaixo.


## Pacotes
library(sidrar)
library(ggplot2)
library(forecast)
library(timetk)
library(zoo)
library(scales)
library(tidyverse)

## Baixar e tratar os dados
tab1 = get_sidra(api='/t/2938/n1/all/v/63,66/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202,v66%204')
tab2 = get_sidra(api='/t/1419/n1/all/v/63,66/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202,v66%204')
tab3 = get_sidra(api='/t/7060/n1/all/v/63,66/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202,v66%204')

series = c(7170, 7445, 7486, 7558, 7625, 7660,
7712, 7766, 7786)

names = c('Alimentos', 'Habitação', 'Art de Resid',
'Vestuário', 'Transporte', 'Saúde e cuid pessoais',
'Despesas Pessoas', 'Educação', 'Comunicação')

var1 <- matrix(NA, ncol=length(series),
nrow=nrow(tab1)/length(series)/2)

peso1 <- matrix(NA, ncol=length(series),
nrow=nrow(tab1)/length(series)/2)

var2 <- matrix(NA, ncol=length(series),
nrow=nrow(tab2)/length(series)/2)

peso2 <- matrix(NA, ncol=length(series),
nrow=nrow(tab2)/length(series)/2)

var3 <- matrix(NA, ncol=length(series),
nrow=nrow(tab3)/length(series)/2)

peso3 <- matrix(NA, ncol=length(series),
nrow=nrow(tab3)/length(series)/2)

for(i in 1:length(series)){

var1[,i] <- tab1Valor[tab1`Variável (Código)`==63&
tab1`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]  var2[,i] <- tab2Valor[tab2`Variável (Código)`==63& tab2`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]

var3[,i] <- tab3Valor[tab3`Variável (Código)`==63&
tab3`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]  peso1[,i] <- tab1Valor[tab1`Variável (Código)`==66& tab1`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]

peso2[,i] <- tab2Valor[tab2`Variável (Código)`==66&
tab2`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]  peso3[,i] <- tab3Valor[tab3`Variável (Código)`==66& tab3`Geral, grupo, subgrupo, item e subitem (Código)`==series[i]]
}

variacao = ts(rbind(var1, var2, var3), start=c(2006,07), freq=12)
peso = ts(rbind(peso1, peso2, peso3), start=c(2006,07), freq=12)

Assim, a inflação medida pelo IPCA nada mais será do que a variação vezes o respectivo peso do grupo. Com isso em mente, nós podemos gerar a previsão para cada grupo e depois recuperar a previsão da inflação cheia a partir dessas previsões individuais. O resultado é exposto no gráfico abaixo.

A previsão para a inflação em janeiro, por essa metodologia, é de 0,47%.

________________

(*) Para aprender a fazer esse tipo de projeção, veja nossos cursos de Previsão Macroeconométrica e Modelos Preditivos aplicados à Macroeconomia.

(**) Os códigos completos do exercício estão disponíveis no Clube AM.

Desemprego seguirá elevado nos próximos meses

By | Comentário de Conjuntura

Ao longo de 2019, conforme previsão feita nesse espaço, a taxa de desemprego se manteve em patamar ainda elevado. Ao reestimar nossos modelos de previsão com dados mais recentes, conforme documentado na edição 53 do Clube do Código, obtemos resultados ainda bastante críticos. De fato, o desemprego deve permanecer ainda elevado nos próximos meses, se consolidando no principal problema macroeconômico do país.

Previsões para a Taxa de Desemprego
SARIMA Kalman BVAR Combinada
2019 Oct 11.7 11.6 11.7 11.6
2019 Nov 11.7 11.4 11.7 11.5
2019 Dec 11.7 11.3 11.6 11.4
2020 Jan 12.3 11.7 11.6 11.6
2020 Feb 12.9 12.1 11.5 11.9
2020 Mar 13.4 12.5 11.4 12.2

A tabela  acima resume as previsões geradas pela combinação de três modelos por meio do Erro Quadrático Médio (EQM) dos mesmos. Isto é, um modelo com maior EQM tem menor peso na combinação. Essa previsão pode ser expressa no gráfico abaixo.

A seguir, nós controlamos pela sazonalidade da série, dando uma visão melhor do comportamento da taxa de desemprego nos próximos meses.

A previsão é que o desemprego, já feito o ajuste sazonal, chegue a março do próximo ano em 11,6% da PEA, um valor ainda bastante elevado. Para além desses três modelos, também estimei um modelo com outro conjunto de variáveis explicativas, a saber: (i) índice coincidente de desemprego da FGV; (ii) índice antecedente de emprego da FGV; (iii) índice de incerteza econômica da FGV; (iv) pesquisas no Google pela palavra 'emprego'; (v) IBC-BR; (vi) taxa de juros Selic.

Com base em cenários estatísticos para essas variáveis, o desemprego se comportará conforme a tabela abaixo, com intervalo de confiança de 40%:

Previsões para a Taxa de Desemprego
Lower Média Upper
Out/19 11.0 11.3 11.6
Nov/19 11.0 11.3 11.6
Dez/19 11.1 11.4 11.7
Jan/20 11.1 11.5 11.8
Fev/20 11.2 11.5 11.8
Mar/20 11.2 11.5 11.8

A seguir, colocamos um gráfico com essas projeções a partir do modelo alternativo com variáveis exógenas:

Os resultados, ao considerarmos um conjunto mais amplo de variáveis explicativas para a taxa de desemprego, são um pouco melhores do que a previsão combinada. Contudo, o nível do desemprego ainda permanece oscilando no intervalo entre 11% e 11,8%, o que leva a população desocupada a flutuar entre 11,6 e 12,5 milhões de pessoas. Um número ainda bastante elevado.

_______________

(*) Para aprender a fazer previsão combinada, conheça nosso Curso de Construção de Cenários e Previsões usando o R.

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

Assinar Gratuitamente