Nowcasting do PIB: um modelo de fatores usando Python

Introdução

Neste exercício, implementamos o Nowcasting utilizando Modelos de Fatores Dinâmicos (Dynamic Factor Models) em Python, com o objetivo de prever o PIB dos EUA com base nos dados dos conjuntos FRED-MD e FRED-QD.

De forma simplificada, o nowcasting é uma técnica que permite prever o presente, ou até mesmo o futuro ou passado muito recente. A principal meta aqui é identificar um conjunto de variáveis capaz de captar a dinâmica da série de interesse, conforme ela ocorre.

No entanto, esse conjunto de variáveis pode ser bastante extenso, envolvendo dezenas, centenas ou até milhares de variáveis. Quando o número de variáveis excede o número de observações, não é possível estimar coeficientes em modelos paramétricos tradicionais, como a Regressão Linear (OLS). Mesmo que seja possível estimar esses coeficientes, incluir um grande número de variáveis no modelo pode resultar em overfitting, o que tende a gerar previsões imprecisas.

Para contornar esse problema, uma abordagem comum é o uso de modelos com fatores. Essencialmente, um fator permite reduzir o conjunto de variáveis a uma única fonte de variação comum entre elas, que geralmente é não-observável. A ideia é usar um conjunto de variáveis relacionadas a essa fonte e, ao extrair o componente comum de variação, obter uma aproximação dessa fonte não observada.

Para ilustrar, imagine que desejamos acompanhar em "tempo real" a evolução da atividade econômica. Sabemos que várias variáveis são afetadas ou afetam a atividade econômica, embora em direções e magnitudes diferentes, como a utilização de energia elétrica, a produção industrial e a confiança dos consumidores. Ao extrair o componente comum entre essas variáveis, podemos obter uma medida indireta da atividade econômica. Se tivermos essas informações disponíveis no instante t, também poderemos prever a atividade econômica em t — um Nowcast.

*O código deste exercício é baseado em Fulton (2020).*

Aprenda a coletar, processar e analisar dados na formação de Do Zero à Análise de Dados Econômicos e Financeiros com Python.

Quer aprender a como criar modelos de série econômicas brasileiras usando Machine Learning e IA Generativa? Veja nosso curso IA para previsão Macroeconômica usando Python.

Dynamic Factor Model

Apresentamos aqui o modelo de fator dinâmico, que pode ser encontrado na classe `DynamicFactorMQ`, que faz parte do componente de análise de séries temporais (especificamente no subcomponente de modelos de espaço de estados) da biblioteca `statsmodels`.

Modelo estatístico:

O modelo estatístico e o algoritmo EM usados para a estimativa dos parâmetros são descritos em Bańbura e Modugno (2014) e Bańbura et al. (2011).

Como nestes artigos, a especificação básica parte da "forma estática" típica do modelo de fator dinâmico:

    \[\begin{aligned} y_t & = \Lambda f_t + \epsilon_t \\ f_t & = A_1 f_{t-1} + \dots + A_p f_{t-p} + u_t \end{aligned}\]

A classe `DynamicFactorMQ` permite as generalizações do modelo descritas nas referências acima, incluindo:

- Limitar blocos de fatores a carregar apenas em certas variáveis observadas

- Dados de frequência mista mensal e trimestral, conforme descrito por Mariano e Murasawa (2010)

- Permitir autocorrelação (via especificações AR(1)) nos distúrbios idiossincráticos \epsilon_t

- Entradas ausentes nas variáveis observadas y_t

Atenção: *O código deste exercício foi gerado utilizando o pandas na versão 1.5.3. O motivo é que a classe `DynamicFactorMQ` não foi atualizada para versões recentes do pandas, gerando erros. Há um pull request no repositório do Github para a atualização da classe, entretanto, ainda não implementada no statsmodels.*

Estimativa de parâmetros

Quando há um grande número de variáveis observadas y_t, pode haver centenas ou até milhares de parâmetros a serem estimados. Nessa situação, pode ser extremamente difícil para os métodos típicos encontrar os parâmetros que maximizam a função de verossimilhança. Como esse modelo foi projetado para suportar um grande painel de variáveis observadas, o algoritmo EM é utilizado, pois pode ser mais robusto.

Em particular, o modelo acima está na forma de espaço de estados e, portanto, o módulo do statsmodels, statespace, pode ser usada para aplicar as rotinas do filtro de Kalman e suavização, que são necessárias para a estimativa.

Previsão e interpolação

Como o modelo está na forma de espaço de estados, uma vez que os parâmetros são estimados, é simples produzir previsões de qualquer uma das variáveis observadas y_t.

Além disso, para quaisquer entradas ausentes nas variáveis observadas y_t, também é simples produzir estimativas dessas entradas com base nos fatores extraídos de todo o conjunto de dados observados (estimativas "suavizadas" dos fatores). Em um modelo de frequência mista mensal/trimestral, isso pode ser usado para interpolar valores mensais para variáveis trimestrais.

 

Nowcasting, atualização de previsões e computação das "news"

 

Ao incluir tanto variáveis mensais quanto trimestrais, este modelo pode ser usado para produzir "nowcasts" de uma variável trimestral antes de sua publicação, com base nos dados mensais daquele trimestre. Por exemplo, a estimativa preliminar do PIB do primeiro trimestre (EUA) é tipicamente divulgada em abril, mas este modelo poderia produzir uma estimativa em março baseada em dados até fevereiro.

Muitos exercícios de previsão e nowcasting são atualizados frequentemente, em "tempo real", e é, portanto, importante que novos pontos de dados possam ser facilmente adicionados conforme chegam. Como esses novos pontos de dados fornecem novas informações, a previsão/nowcast do modelo mudará com novos dados, e também é importante que seja possível decompor facilmente essas mudanças em contribuições de cada série atualizada para as mudanças na previsão. Ambos os passos são suportados por todos os modelos de espaço de estados no Statsmodels – incluindo o modelo `DynamicFactorMQ` – como mostramos a seguir.

Dataset

Estimamos um modelo de fator dinâmico em um grande painel de dados econômicos divulgados com frequência mensal, juntamente com o PIB, que é divulgado apenas com frequência trimestral. Os conjuntos de dados mensais que utilizaremos vêm do [banco de dados FRED-MD (McCracken e Ng, 2016), e usaremos o PIB real do banco de dados complementar FRED-QD.

Data vintage

O conjunto de dados FRED-MD foi lançado em janeiro de 2015, e as edições mensais estão disponíveis desde então. O conjunto de dados FRED-QD foi totalmente lançado em maio de 2018, e as edições mensais estão disponíveis desde então. Nosso exercício básico usará o conjunto de dados de fevereiro de 2020 (que inclui dados até o mês de referência de janeiro de 2020), e então examinaremos como os dados atualizados nos meses de março a junho influenciaram a previsão do modelo para o crescimento do PIB real no segundo trimestre de 2020.

Transformações de dados

As suposições do modelo de fator dinâmico neste notebook exigem que os fatores e as variáveis observadas sejam estacionárias. No entanto, este conjunto de dados contém séries econômicas brutas que claramente violam essas suposições – por exemplo, muitas delas mostram tendências distintas. Como é típico nesses exercícios, transformamos as variáveis para induzir a estacionariedade. Em particular, os conjuntos de dados FRED-MD e FRED-QD incluem transformações sugeridas (codificadas de 1 a 7, que normalmente aplicam diferenças ou transformações de variação percentual) que aplicamos.

Outliers

Seguindo McCracken e Ng (2016), removemos outliers (definindo seus valores como ausentes), definidos como observações que estão a mais de 10 vezes o intervalo interquartil da média da série.
No entanto, neste exercício estamos interessados no "nowcasting" do crescimento do PIB real para o segundo trimestre de 2020, que foi muito afetado pelos fechamentos econômicos decorrentes da pandemia de COVID-19. Durante a primeira metade de 2020, há várias séries que incluem observações extremas, muitas das quais seriam excluídas por este teste de outliers. Como essas observações provavelmente são informativas sobre o PIB real no segundo trimestre de 2020, removemos outliers apenas para o período de janeiro de 1959 a dezembro de 2019.

Modelo

Especificação dos Fatores
Embora existam várias maneiras de identificar cuidadosamente o número de fatores a ser utilizado, aqui optaremos por uma estrutura ad-hoc da seguinte forma:
- Dois fatores globais (ou seja, fatores que carregam em todas as variáveis) que evoluem conjuntamente de acordo com um VAR(4).
- Um fator específico de grupo (ou seja, fatores que carregam apenas nas variáveis de seu grupo) para cada um dos 8 grupos descritos acima, com cada um evoluindo de acordo com um AR(1).

Multiplicidades dos Fatores

Aqui, queremos que todos os fatores de grupo sejam univariados, enquanto queremos um conjunto bivariado de fatores globais. Portanto, só precisamos especificar a parte `{'Global': 2}`, enquanto o restante será assumido como tendo multiplicidade 1 por padrão.
Ordens dos Fatores
Finalmente, precisamos especificar a ordem dos defasagens das autorregressões (vetoriais) que governam a dinâmica dos fatores. Isso é feito através do argumento `factor_orders`.
Vamos especificar que os fatores "Globais" evoluem de acordo com um VAR(4).
Resumo do Modelo

Como esses modelos podem ser um tanto complexos para configurar, pode ser útil verificar os resultados do método `summary` do modelo. Esse método produz três tabelas.

1. Especificação do Modelo: a primeira tabela mostra informações gerais sobre o modelo selecionado, a amostra, a configuração dos fatores e outras opções.

2. Variáveis Observadas / Cargas dos Fatores: a segunda tabela mostra quais fatores carregam em quais variáveis observadas. Essa tabela deve ser verificada para garantir que os argumentos `factors` e `factor_multiplicities` foram especificados conforme desejado.

3. Ordens dos Blocos de Fatores: a última tabela mostra os blocos de fatores (os fatores dentro de cada bloco evoluem conjuntamente, enquanto entre blocos os fatores são independentes) e a ordem da autoregressão (vetorial).

Model Specification: Dynamic Factor Model
Model: Dynamic Factor Model # of monthly variables: 127
+ 10 factors in 9 blocks # of quarterly variables: 1
+ Mixed frequency (M/Q) # of factor blocks: 9
+ AR(1) idiosyncratic Idiosyncratic disturbances: AR(1)
Sample: 2000-01 Standardize variables: True
- 2020-01
Observed variables / factor loadings
Dep. variable Global.1 Global.2 Output and Income Labor Market Housing Consumption, orders, and inventories Money and credit Interest and exchange rates Prices Stock market
Real Personal Income X X X
Real personal income ex ... X X X
IP Index X X X
IP: Final Products and N... X X X
IP: Final Products (Mark... X X X
IP: Consumer Goods X X X
IP: Durable Consumer Goo... X X X
IP: Nondurable Consumer ... X X X
IP: Business Equipment X X X
IP: Materials X X X
IP: Durable Materials X X X
IP: Nondurable Materials X X X
IP: Manufacturing (SIC) X X X
IP: Residential Utilitie... X X X
IP: Fuels X X X
Capacity Utilization: Ma... X X X
Help-Wanted Index for Un... X X X
Ratio of Help Wanted/No.... X X X
Civilian Labor Force X X X
Civilian Employment X X X
Civilian Unemployment Ra... X X X
Average Duration of Unem... X X X
Civilians Unemployed - L... X X X
Civilians Unemployed for... X X X
Civilians Unemployed - 1... X X X
Civilians Unemployed for... X X X
Civilians Unemployed for... X X X
Initial Claims X X X
All Employees: Total non... X X X
All Employees: Goods-Pro... X X X
All Employees: Mining an... X X X
All Employees: Construct... X X X
All Employees: Manufactu... X X X
All Employees: Durable g... X X X
All Employees: Nondurabl... X X X
All Employees: Service-P... X X X
All Employees: Trade, Tr... X X X
All Employees: Wholesale... X X X
All Employees: Retail Tr... X X X
All Employees: Financial... X X X
All Employees: Governmen... X X X
Avg Weekly Hours : Goods... X X X
Avg Weekly Overtime Hour... X X X
Avg Weekly Hours : Manuf... X X X
Avg Hourly Earnings : Go... X X X
Avg Hourly Earnings : Co... X X X
Avg Hourly Earnings : Ma... X X X
Housing Starts: Total Ne... X X X
Housing Starts, Northeas... X X X
Housing Starts, Midwest X X X
Housing Starts, South X X X
Housing Starts, West X X X
New Private Housing Perm... X X X
New Private Housing Perm... X X X
New Private Housing Perm... X X X
New Private Housing Perm... X X X
New Private Housing Perm... X X X
Real personal consumptio... X X X
Real Manu. and Trade Ind... X X X
Retail and Food Services... X X X
New Orders for Consumer ... X X X
New Orders for Durable G... X X X
New Orders for Nondefens... X X X
Unfilled Orders for Dura... X X X
Total Business Inventori... X X X
Total Business: Inventor... X X X
Consumer Sentiment Index X X X
M1 Money Stock X X X
M2 Money Stock X X X
Real M2 Money Stock X X X
Monetary Base X X X
Total Reserves of Deposi... X X X
Reserves Of Depository I... X X X
Commercial and Industria... X X X
Real Estate Loans at All... X X X
Total Nonrevolving Credi... X X X
Nonrevolving consumer cr... X X X
MZM Money Stock X X X
Consumer Motor Vehicle L... X X X
Total Consumer Loans and... X X X
Securities in Bank Credi... X X X
Effective Federal Funds ... X X X
3-Month AA Financial Com... X X X
3-Month Treasury Bill: X X X
6-Month Treasury Bill: X X X
1-Year Treasury Rate X X X
5-Year Treasury Rate X X X
10-Year Treasury Rate X X X
Moody’s Seasoned Aaa Cor... X X X
Moody’s Seasoned Baa Cor... X X X
3-Month Commercial Paper... X X X
3-Month Treasury C Minus... X X X
6-Month Treasury C Minus... X X X
1-Year Treasury C Minus ... X X X
5-Year Treasury C Minus ... X X X
10-Year Treasury C Minus... X X X
Moody’s Aaa Corporate Bo... X X X
Moody’s Baa Corporate Bo... X X X
Trade Weighted U.S. Doll... X X X
Switzerland / U.S. Forei... X X X
Japan / U.S. Foreign Exc... X X X
U.S. / U.K. Foreign Exch... X X X
Canada / U.S. Foreign Ex... X X X
PPI: Finished Goods X X X
PPI: Finished Consumer G... X X X
PPI: Intermediate Materi... X X X
PPI: Crude Materials X X X
Crude Oil, spliced WTI a... X X X
PPI: Metals and metal pr... X X X
CPI : All Items X X X
CPI : Apparel X X X
CPI : Transportation X X X
CPI : Medical Care X X X
CPI : Commodities X X X
CPI : Durables X X X
CPI : Services X X X
CPI : All Items Less Foo... X X X
CPI : All items less she... X X X
CPI : All items less med... X X X
Personal Cons. Expend.: ... X X X
Personal Cons. Exp: Dura... X X X
Personal Cons. Exp: Nond... X X X
Personal Cons. Exp: Serv... X X X
S&P’s Common Stock Price... X X X
S&P’s Composite Common S... X X X
S&P’s Composite Common S... X X X
VXO X X X
Real Gross Domestic Prod... X X X
Factor blocks:
block order
Global.1, Global.2 4
Output and Income 1
Labor Market 1
Housing 1
Consumption, orders, and inventories 1
Money and credit 1
Interest and exchange rates 1
Prices 1
Stock market 1

Previsão

Embora os dados originais nos conjuntos de dados FRED-MD/QD para o PIB Real estejam em "Bilhões de Dólares Corrigidos de 2012", essa variável foi transformada para a taxa de crescimento anualizada trimestral (mudança percentual) para inclusão no modelo. Da mesma forma, a Taxa de Desemprego Civil estava originalmente em "Percentual", mas foi transformada na mudança de 1 mês (primeira diferença) para inclusão no modelo.

Como os dados transformados foram fornecidos ao modelo, os métodos de previsão e previsão produzirão previsões e previsões no espaço transformado. (Lembrete: a etapa de transformação, que fizemos antes de construir o modelo, é diferente da etapa de padronização, que o modelo lida automaticamente e que não precisamos reverter manualmente).

Abaixo, calculamos e plotamos as previsões diretamente do modelo associadas ao PIB Real e à taxa de desemprego.

 

Nowcasting e atualizações em tempo real

Os exercícios de previsão acima foram baseados em nosso objeto de resultados base, que foi calculado usando a base de dados de fevereiro de 2020. Isso foi antes de qualquer efeito da pandemia de COVID-19 e perto do fim de uma expansão econômica historicamente longa. Como resultado, as previsões acima pintam um quadro relativamente otimista para a economia, com forte crescimento do PIB real e uma contínua queda na taxa de desemprego. No entanto, os dados econômicos de março a junho mostraram fortes efeitos econômicos negativos decorrentes da pandemia e das interrupções associadas à atividade econômica.

É simples atualizar nosso modelo para levar em conta novos dados e produzir novas previsões. Além disso, podemos calcular o efeito que cada nova observação tem em nossas previsões. Para ilustrar, consideramos o exercício de previsão do crescimento do PIB real no segundo trimestre de 2020. Como este é o trimestre atual para a maior parte desse período, este é um exemplo de "nowcasting".

Para entender por que a previsão mudou tanto, podemos calcular os impactos de cada nova informação em cada uma das atualizações de dados (o que chamamos de "news").

Abaixo, mostramos como foi os impactos do vintage de abril comparado ao de março. Separamos quais as dez novas observações tiveram o maior impacto (em valor absoluto) na previsão de crescimento do PIB real para o segundo trimestre de 2020 (2020Q2).

observed forecast (prev) news weight impact
update date updated variable
2020-03 IP: Final Products and Nonindustrial Supplies -6.53 -0.10 -6.42 0.61 -3.94
Initial Claims 253.49 0.94 252.55 -0.01 -2.05
Moody’s Baa Corporate Bond Minus FEDFUNDS 3.66 2.10 1.56 -0.65 -1.01
IP: Final Products (Market Group) -6.52 -0.12 -6.39 -0.13 0.83
VXO 63.88 19.50 44.38 -0.01 -0.58
IP: Manufacturing (SIC) -6.46 0.05 -6.51 0.06 -0.41
Moody’s Aaa Corporate Bond Minus FEDFUNDS 2.39 1.25 1.14 -0.35 -0.40
IP: Consumer Goods -6.06 -0.21 -5.85 -0.07 0.39
All Employees: Total nonfarm -0.46 0.15 -0.61 0.53 -0.32
6-Month Treasury Bill: -1.18 -0.06 -1.12 0.27 -0.30

- A primeira coluna, "update date", é a data da nova observação.

- A segunda coluna, "updated variable", é a variável que foi atualizada.

- A terceira coluna, "observed", mostra o valor realmente registrado.

- A quarta coluna, "forecast (prev)", mostra o valor que havia sido previsto no vintage anterior (neste caso, no vintage de março de 2020).

- A quinta coluna, "news", mostra o componente inesperado da atualização (é igual a observado - previsão anterior).

- A sexta coluna, "weight", mostra o quanto essa combinação de data/variável influencia a previsão em questão.

- A última coluna, "impact", mostra o quanto a previsão de crescimento do PIB real em 2020Q2 mudou com base apenas na nova observação capturada por cada linha da tabela.

A partir desta tabela, podemos ver que, no vintage de abril, os maiores impactos na previsão do PIB real para 2020Q2 vieram de:

- Pedidos iniciais de seguro-desemprego e o Índice de Volatilidade CBOE S&P 100 (VXO), que foram muito mais altos do que o esperado.

- Spreads de títulos corporativos (AAA e BAA), que também foram mais altos do que o esperado.

- Produção industrial (incluindo produtos finais, manufatura, materiais duráveis e o índice geral) e utilização da capacidade, que foram muito mais baixos do que o esperado.

Referências

Bańbura, Marta, and Michele Modugno. "Maximum likelihood estimation of factor models on datasets with arbitrary pattern of missing data." Journal of Applied Econometrics 29, no. 1 (2014): 133-160.

Bańbura, Marta, Domenico Giannone, and Lucrezia Reichlin. "Nowcasting." The Oxford Handbook of Economic Forecasting. July 8, 2011.

Bok, Brandyn, Daniele Caratelli, Domenico Giannone, Argia M. Sbordone, and Andrea Tambalotti. 2018. "Macroeconomic Nowcasting and Forecasting with Big Data." Annual Review of Economics 10 (1): 615-43.

Fulton, Chad. "Large dynamic factor models, forecasting, and nowcasting". (2020) Acesso em: https://www.chadfulton.com/

Mariano, Roberto S., and Yasutomo Murasawa. "A coincident index, common factors, and monthly real GDP." Oxford Bulletin of Economics and Statistics 72, no. 1 (2010): 27-46.

McCracken, Michael W., and Serena Ng. "FRED-MD: A monthly database for macroeconomic research." Journal of Business & Economic Statistics 34, no. 4 (2016): 574-589.

Quer aprender mais?

Clique aqui para fazer seu cadastro no Boletim AM e baixar o código que produziu este exercício, além de receber novos 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 diretamente em seu e-mail.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Criando IA Assistant usando Shiny no Python

Nesta postagem, ensinamos a como criar um chatbot interativo utilizando o Shiny Python. Veremos os principais conceitos sobre o módulo Chat do Shiny e como integrá-lo a modelos de IA generativa, como Gemini, para criar um chatbot funcional em poucos passos.

Como coletar dados para relatórios de câmbio com Python

O monitoramento do mercado cambial permite tomar melhores decisões de consumo e investimento, por sua influência em diversos preços da economia. Neste artigo, mostramos rotinas simples de Python para coleta e análise de dados que são comumente utilizados em relatórios de câmbio.

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.