Aula 9: Machine Learning para Inferência Causal
Aplicações no Mercado Financeiro Brasileiro
Objetivos de Aprendizagem
- Compreender como os métodos de Machine Learning podem ser adaptados para inferência causal
- Explorar técnicas de estimação de efeitos heterogêneos de tratamento
- Aprender a implementar modelos de Causal Forest e Double/Debiased Machine Learning
- Analisar aplicações destas técnicas em questões relevantes do mercado financeiro brasileiro
1. A Intersecção entre Machine Learning e Inferência Causal
Nesta aula final, exploraremos como as técnicas de Machine Learning (ML) podem ser adaptadas para abordar questões causais. Tradicionalmente, ML focava em previsão e classificação, enquanto a econometria causal concentrava-se na estimação de parâmetros interpretáveis. Hoje, estas áreas estão convergindo, combinando o poder preditivo do ML com o rigor da inferência causal.
Desafios Tradicionais da Inferência Causal
Até aqui, estudamos métodos "clássicos" de inferência causal que enfrentam alguns desafios:
- Alta dimensionalidade: Dificuldade em lidar com muitas covariáveis potencialmente relevantes
- Especificação do modelo: Necessidade de especificar corretamente a forma funcional
- Heterogeneidade de efeitos: Capturar como o efeito do tratamento varia entre diferentes subgrupos
- Seleção de covariáveis: Identificar quais variáveis incluir como controles
Os métodos de ML causal foram desenvolvidos para abordar estes desafios, combinando flexibilidade na modelagem com garantias para inferência causal.
Figura 1: A convergência entre Machine Learning e Inferência Causal
Verificação de Leitura #1
Qual é a principal vantagem de unir técnicas de Machine Learning com métodos de inferência causal?
2. Frameworks para Machine Learning Causal
Existem diversos frameworks para adaptar métodos de ML para inferência causal. Vamos focar nos dois principais que têm sido aplicados com sucesso em finanças e economia:
Adaptam algoritmos de árvore de decisão para estimar efeitos de tratamento heterogêneos (CATE - Conditional Average Treatment Effect).
Algoritmos principais:
- Causal Tree
- Causal Forest
- Generalized Random Forest
Ideia central: Particionam o espaço de covariáveis em regiões onde o efeito do tratamento é aproximadamente homogêneo.
Pontos fortes:
Limitações:
Usa ML para estimar componentes do modelo, removendo o viés gerado pela regularização ou complexidade do algoritmo.
Abordagens:
- Double ML
- Orthogonal ML
- Cross-Fitting
Ideia central: Dividir a tarefa em subproblemas de previsão e usar técnicas de ajuste ortogonal para corrigir vieses.
Pontos fortes:
Limitações:
2.1 Causal Forest para Efeitos Heterogêneos
Causal Forest é uma extensão de Random Forest adaptada para inferência causal, especialmente útil para identificar como o efeito de um tratamento varia entre diferentes indivíduos ou empresas.
Fundamentos do Causal Forest
Considerando o framework de resultados potenciais, para cada unidade i:
- Yi(1): Resultado se tratada
- Yi(0): Resultado se não tratada
- Di: Indicador de tratamento (1 = tratado, 0 = controle)
- Xi: Covariáveis
O efeito causal para a unidade i é τi = Yi(1) - Yi(0), mas nunca observamos ambos para a mesma unidade.
O Causal Forest estima o Efeito Médio de Tratamento Condicional (CATE):
Ou seja, como o efeito do tratamento varia com base nas características x.
Figura 2: Ilustração simplificada do funcionamento do Causal Forest
# Implementação de Causal Forest em Python usando EconML import numpy as np import pandas as pd from econml.dml import CausalForestDML from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier from sklearn.model_selection import train_test_split def causal_forest_analysis(df, X_cols, y_col, treatment_col, heterogeneity_cols=None, n_estimators=100): """ Implementa Causal Forest para estimar efeitos heterogêneos Args: df: DataFrame com os dados X_cols: Lista de colunas para covariáveis y_col: Nome da coluna de resultado treatment_col: Nome da coluna de tratamento heterogeneity_cols: Colunas para analisar heterogeneidade (opcional) n_estimators: Número de árvores na floresta Returns: Modelo treinado e efeitos heterogêneos """ # Preparar dados X = df[X_cols].values T = df[treatment_col].values.reshape(-1, 1) y = df[y_col].values # Dividir dados para honestidade X_train, X_test, T_train, T_test, y_train, y_test = train_test_split( X, T, y, test_size=0.5, random_state=42) # Configurar e treinar o modelo cf = CausalForestDML( model_y=RandomForestRegressor(n_estimators=n_estimators), model_t=RandomForestClassifier(n_estimators=n_estimators), n_estimators=n_estimators, min_samples_leaf=5, max_depth=None, verbose=0, random_state=42 ) cf.fit(y=y_train, T=T_train, X=X_train) # Estimar efeitos individuais te_pred = cf.effect(X_test) # Análise de heterogeneidade heterogeneity_results = {} if heterogeneity_cols: for col in heterogeneity_cols: if col in df.columns: # Agrupar efeitos por variável de interesse grouped = pd.DataFrame({ 'effect': te_pred.flatten(), 'group': df.loc[X_test.index, col] }).groupby('group')['effect'].mean() heterogeneity_results[col] = grouped return cf, te_pred, heterogeneity_results
2.2 Double Machine Learning (DML)
O Double ML (ou Debiased ML) é uma abordagem desenvolvida para permitir o uso de algoritmos ML para inferência causal, enquanto corrige o viés que pode surgir devido à regularização ou à complexidade do modelo.
Fundamentos do Double ML
Considerando o modelo parcialmente linear:
Onde D é o tratamento, X são as covariáveis, g(X) é uma função desconhecida, potencialmente complexa, e θ é o parâmetro de interesse.
O DML funciona em duas etapas principais:
- Primeira etapa: Estimar os modelos de previsão para:
- E[Y|X] = m(X) - usando y ~ X (modelo de resultado)
- E[D|X] = h(X) - usando D ~ X (modelo de propensity)
- Segunda etapa: Usar os resíduos ortogonais para estimar θ:
- Ṽ = D - h(X) (resíduos do tratamento)
- Ỹ = Y - m(X) (resíduos do resultado)
- θ̂ = cov(Ỹ,Ṽ) / var(Ṽ) (estimador DML)
Uma característica fundamental do DML é a divisão da amostra (cross-fitting) para evitar overfitting.
Figura 3: Fluxo do processo de Double Machine Learning
# Implementação de Double Machine Learning em Python import numpy as np import pandas as pd from sklearn.model_selection import KFold from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier from sklearn.linear_model import LinearRegression def double_ml(df, X_cols, y_col, d_col, n_splits=5, ml_model=None): """ Implementa Double Machine Learning para inferência causal Args: df: DataFrame com os dados X_cols: Lista de colunas para covariáveis y_col: Nome da coluna de resultado d_col: Nome da coluna de tratamento n_splits: Número de folds para cross-fitting ml_model: Modelo ML a ser usado (default: RandomForest) Returns: Estimativa do parâmetro causal e estatísticas de inferência """ # Preparar dados X = df[X_cols].values y = df[y_col].values d = df[d_col].values # Definir modelo ML padrão se não especificado if ml_model is None: ml_model_y = RandomForestRegressor(n_estimators=100, min_samples_leaf=5) ml_model_d = RandomForestRegressor(n_estimators=100, min_samples_leaf=5) else: ml_model_y = ml_model ml_model_d = ml_model # Configurar K-fold cross-fitting kf = KFold(n_splits=n_splits, shuffle=True, random_state=42) # Armazenar resultados por fold thetas = [] # Loop através dos folds for train_idx, test_idx in kf.split(X): # Dividir dados X_train, X_test = X[train_idx], X[test_idx] y_train, y_test = y[train_idx], y[test_idx] d_train, d_test = d[train_idx], d[test_idx] # Primeira etapa: modelagem de Y ml_model_y.fit(X_train, y_train) y_pred = ml_model_y.predict(X_test) # Primeira etapa: modelagem de D ml_model_d.fit(X_train, d_train) d_pred = ml_model_d.predict(X_test) # Segunda etapa: calcular resíduos y_resid = y_test - y_pred d_resid = d_test - d_pred # Estimar theta para este fold theta = np.cov(y_resid, d_resid)[0, 1] / np.var(d_resid) thetas.append(theta) # Calcular estimativa final e estatísticas theta_hat = np.mean(thetas) theta_std = np.std(thetas) / np.sqrt(n_splits) theta_ci_lower = theta_hat - 1.96 * theta_std theta_ci_upper = theta_hat + 1.96 * theta_std results = { 'theta_hat': theta_hat, 'std_error': theta_std, 'conf_int_95': [theta_ci_lower, theta_ci_upper], 'fold_estimates': thetas } return results
Verificação de Leitura #2
Qual é a principal diferença entre Causal Forest e Double Machine Learning?
3. Aplicações no Mercado Financeiro Brasileiro
Agora, vamos aplicar as técnicas de Machine Learning causal em três contextos importantes no mercado financeiro brasileiro. Estas aplicações demonstram o poder dessas abordagens para responder questões causais complexas no contexto financeiro.
3.1 Impacto Heterogêneo da Política Monetária nas Empresas Listadas na B3
A política monetária não afeta todas as empresas da mesma forma. Vamos ver como o Causal Forest pode ajudar a entender esta heterogeneidade.
Estudo de Caso: Heterogeneidade nos Efeitos das Mudanças da Taxa Selic
Questão causal: Como mudanças na taxa Selic afetam diferentemente empresas com características diversas?
Dados:
- Painel trimestral de empresas listadas na B3 (2010-2024)
- Variações da taxa Selic definidas pelo COPOM
- Características das empresas: tamanho, alavancagem, setor, governança, etc.
Abordagem: Utilizamos Causal Forest para estimar o CATE (Conditional Average Treatment Effect) das mudanças na Selic sobre o valor de mercado e outros indicadores financeiros das empresas.
Figura 4: Efeitos heterogêneos de aumentos na taxa Selic por características das empresas
Resultados principais:
- Empresas do setor imobiliário são as mais impactadas negativamente por aumentos na Selic (-6,0%)
- Empresas menores têm maior sensibilidade (-5,0%) em comparação com empresas grandes (-2,0%)
- Alto nível de alavancagem amplifica os efeitos negativos da política monetária contracionista
- Empresas com maior dependência de capital de giro mostram os maiores efeitos heterogêneos
Implicações: Estas descobertas permitem aos investidores e formuladores de políticas antecipar os impactos diferenciados das decisões do COPOM nos diversos segmentos do mercado acionário brasileiro.
3.2 Avaliando o Impacto de Mudanças Regulatórias com Double ML
Mudanças regulatórias são frequentes no mercado financeiro brasileiro. O Double ML permite estimar seus efeitos causais de forma rigorosa.
Estudo de Caso: Impacto da Instrução CVM 476
Questão causal: Qual o efeito da Instrução CVM 476 (que flexibilizou emissões de dívida) sobre o custo de capital das empresas brasileiras?
Contexto: Em 2009, a CVM introduziu a Instrução 476, que simplificou o processo de emissão de debêntures para "esforços restritos", reduzindo o tempo e os custos de novas emissões.
Dados:
- Emissões de debêntures antes e depois da regulação (2005-2014)
- Características das empresas emissoras
- Taxas, prazos e outras características das emissões
Desafio metodológico: Empresas que utilizaram a nova regulação são diferentes das que não utilizaram, gerando potencial viés de seleção.
Abordagem: Double ML para estimar o efeito causal da regulação, controlando para múltiplas covariáveis de forma flexível.
Figura 5: Resultados do Double ML para o impacto da Instrução CVM 476
Resultados principais:
- A Instrução CVM 476 causou uma redução média de 0,85 pontos percentuais no spread das debêntures
- O prazo médio das emissões aumentou em 1,65 anos
- O volume médio por emissão cresceu R$ 72,4 milhões
- Houve aumento significativo no número total de emissões
Implicações: A flexibilização regulatória teve efeito causal positivo no desenvolvimento do mercado de dívida corporativa, melhorando condições de financiamento para as empresas brasileiras.
3.3 Efeitos de Eventos Corporativos: Fusões e Aquisições
Outra aplicação importante no mercado financeiro é a análise do impacto de fusões e aquisições (F&A) no desempenho das empresas.
Estudo de Caso: Impacto de F&A na Eficiência Operacional
Questão causal: Fusões e aquisições causam melhorias na eficiência operacional das empresas adquirentes no contexto brasileiro?
Dados:
- Transações de F&A realizadas por empresas listadas na B3 (2000-2024)
- Indicadores de desempenho das empresas antes e após as transações
- Características estruturais das transações (horizontais, verticais, conglomerados)
Desafio metodológico: A decisão de realizar F&A é endógena e correlacionada com diversas características observáveis e não observáveis das empresas.
Abordagem: Combinamos Causal Forest (para efeitos heterogêneos) e Double ML (para efeitos médios) para uma análise completa.
Figura 6: Efeitos médios e heterogêneos de F&A na eficiência operacional
Resultados principais:
- Em média, F&A no Brasil resultam em crescimento de receita (+3,8%) e melhorias na eficiência operacional (+2,3%)
- Porém, a heterogeneidade é substancial: fusões horizontais mostram os maiores ganhos de eficiência
- F&A do tipo conglomerado mostram impactos negativos no ROA, mas leves ganhos em margem EBITDA
- As características da empresa adquirente, como governança corporativa e experiência prévia em aquisições, são determinantes importantes da heterogeneidade dos efeitos
Implicações: Os resultados indicam que nem todas as F&A criam valor e que certos tipos de transações têm maior probabilidade de sucesso no contexto brasileiro.
Verificação de Leitura #3
Com base nos estudos de caso apresentados, qual a principal vantagem de utilizar técnicas de ML causal no contexto do mercado financeiro brasileiro?
4. Desafios e Limitações do ML Causal
Apesar dos avanços nas técnicas de ML causal, ainda existem desafios importantes a considerar ao aplicá-las no contexto financeiro.
- Pressuposto de ignorabilidade condicional: A maioria dos métodos ainda depende da hipótese de que controlamos para todas as variáveis confundidoras relevantes
- Escolha de hiperparâmetros: Sensibilidade dos resultados às escolhas de regularização, profundidade de árvores, etc.
- Interpretabilidade: Modelos mais complexos podem dificultar a compreensão dos mecanismos causais
- Requisitos de dados: Necessidade de amostras grandes, especialmente para capturar efeitos heterogêneos em subgrupos
Mitigação:
- Análises de sensibilidade para testar a robustez dos resultados
- Métodos de validação cruzada para seleção de hiperparâmetros
- Métodos de importância de variáveis para entender os principais drivers
- Viés de sobrevivência: Empresas que saem do mercado podem criar seleção não aleatória na amostra
- Dinâmicas temporais: Efeitos que variam ao longo do tempo são difíceis de capturar com modelos estáticos
- Endogeneidade específica do mercado financeiro: Expectativas e antecipação de eventos podem contaminar a identificação causal
- Variáveis latentes: Fatores não observáveis importantes como "sentimento do mercado" ou "qualidade da gestão"
Mitigação:
- Combinação com métodos de eventos e designs de identificação estrutural
- Atenção especial a janelas temporais e potenciais antecipações
- Uso de variáveis instrumentais e proxies para capturar fatores latentes
Nota Importante
Lembre-se que o ML causal não substitui o pensamento cuidadoso sobre mecanismos de identificação. Um bom design de pesquisa é fundamental antes da aplicação destas técnicas. O ML causal é mais eficaz quando combinado com bons designs de identificação (como experimentos naturais, RDD, DiD, etc.).
5. Implementação Prática: Análise de Dados com Causal Forest
Vamos aplicar o método Causal Forest a um exemplo concreto: analisar o efeito heterogêneo de um choque de liquidez (redução de rating de crédito) no valor de mercado das empresas brasileiras.
# Análise de Efeitos Heterogêneos com Causal Forest em Python # Rebaixamento de Rating de Crédito e Impacto no Valor das Empresas import pandas as pd import numpy as np import matplotlib.pyplot as plt from econml.dml import CausalForestDML from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.inspection import partial_dependence # 1. Carregar e preparar os dados # Suponha que temos um DataFrame com empresas, características, tratamento (rebaixamento) e resultado (valor) df = pd.read_csv('dados_empresas_rating.csv') # 2. Definir variáveis de interesse # X: covariáveis (características das empresas) X_cols = ['tamanho', 'alavancagem', 'liquidez', 'rentabilidade', 'crescimento', 'idade', 'governanca', 'exportadora', 'setor_1', 'setor_2', 'setor_3'] X = df[X_cols] # T: tratamento (1 se a empresa sofreu rebaixamento, 0 caso contrário) T = df['rebaixamento'].values.reshape(-1, 1) # Y: resultado (variação percentual no valor de mercado) Y = df['var_valor_mercado'].values # 3. Dividir em treino e teste X_train, X_test, T_train, T_test, Y_train, Y_test = train_test_split( X, T, Y, test_size=0.3, random_state=42) # 4. Configurar e treinar o modelo Causal Forest cf_model = CausalForestDML( model_y=RandomForestRegressor(n_estimators=100, min_samples_leaf=10), model_t=RandomForestClassifier(n_estimators=100, min_samples_leaf=10), n_estimators=500, min_samples_leaf=10, max_depth=10, verbose=0, random_state=42 ) # Ajustar o modelo cf_model.fit(Y_train, T_train, X=X_train) # 5. Estimar efeitos individuais de tratamento te_test = cf_model.effect(X_test) df_test = X_test.copy() df_test['efeito_estimado'] = te_test # 6. Análise de heterogeneidade por características específicas # a) Tamanho da empresa tamanho_bins = pd.qcut(df_test['tamanho'], q=5, labels=False) efeitos_por_tamanho = df_test.groupby(tamanho_bins)['efeito_estimado'].mean() plt.figure(figsize=(10, 6)) plt.bar(range(len(efeitos_por_tamanho)), efeitos_por_tamanho.values) plt.xlabel('Quintil de Tamanho (1=Menor, 5=Maior)') plt.ylabel('Efeito Médio no Valor de Mercado (%)') plt.title('Efeito Heterogêneo do Rebaixamento de Rating por Tamanho da Empresa') plt.axhline(y=0, color='r', linestyle='-') plt.savefig('heterogeneidade_tamanho.png') # b) Alavancagem alavancagem_bins = pd.qcut(df_test['alavancagem'], q=5, labels=False) efeitos_por_alavancagem = df_test.groupby(alavancagem_bins)['efeito_estimado'].mean() plt.figure(figsize=(10, 6)) plt.bar(range(len(efeitos_por_alavancagem)), efeitos_por_alavancagem.values) plt.xlabel('Quintil de Alavancagem (1=Menor, 5=Maior)') plt.ylabel('Efeito Médio no Valor de Mercado (%)') plt.title('Efeito Heterogêneo do Rebaixamento de Rating por Alavancagem') plt.axhline(y=0, color='r', linestyle='-') plt.savefig('heterogeneidade_alavancagem.png') # 7. Importância das variáveis para heterogeneidade importancias = cf_model.feature_importances_ importancias_df = pd.DataFrame({'variavel': X_cols, 'importancia': importancias}) importancias_df = importancias_df.sort_values('importancia', ascending=False) plt.figure(figsize=(10, 6)) plt.barh(importancias_df['variavel'], importancias_df['importancia']) plt.xlabel('Importância Relativa') plt.title('Importância das Variáveis para Heterogeneidade de Efeitos') plt.tight_layout() plt.savefig('importancia_variaveis.png') # 8. Efeitos parciais para variáveis importantes fig, ax = plt.subplots(figsize=(12, 8)) result = partial_dependence(cf_model.model_cate, X_test, features=['alavancagem', 'liquidez'], kind='average') XX, YY = np.meshgrid(result["values"][0], result["values"][1]) Z = result["average"].reshape(XX.shape).T contour = ax.contourf(XX, YY, Z, cmap='viridis') cbar = plt.colorbar(contour) cbar.set_label('Efeito do Rebaixamento (%)') ax.set_xlabel('Alavancagem') ax.set_ylabel('Liquidez') ax.set_title('Efeito Conjunto de Alavancagem e Liquidez') plt.savefig('efeito_conjunto.png') # 9. Interpretação dos resultados print("Efeito médio do rebaixamento:", np.mean(te_test)) print("Desvio padrão dos efeitos:", np.std(te_test)) print("Mínimo efeito estimado:", np.min(te_test)) print("Máximo efeito estimado:", np.max(te_test)) # 10. Função para prever o efeito para uma nova empresa def prever_efeito_rebaixamento(empresa_caracteristicas): # empresa_caracteristicas deve ser um DataFrame com as mesmas colunas que X return cf_model.effect(empresa_caracteristicas)
Figura 7: Resultados da análise de heterogeneidade com Causal Forest
Interpretação dos Resultados
- Tamanho: Empresas maiores sofrem efeitos mais negativos do rebaixamento (-7% vs +4% para pequenas)
- Alavancagem: Quanto maior a alavancagem, mais negativo o impacto do rebaixamento
- Governança: Empresas com melhor governança são menos impactadas ou até se beneficiam
- Atividade Exportadora: Empresas exportadoras são menos sensíveis ao rebaixamento local
Estas descobertas permitem gerar insights acionáveis para gestores de portfólio e para as próprias empresas na gestão de riscos relacionados à classificação de crédito.
6. Considerações Finais e Perspectivas Futuras
Chegamos ao final de nossa jornada de aprendizado sobre inferência causal. O Machine Learning causal representa uma poderosa fronteira na análise de dados financeiros, combinando a flexibilidade dos algoritmos de ML com o rigor da análise causal.
Principais Aprendizados do Curso
Ao longo deste curso, exploramos:
- O problema fundamental da inferência causal e a importância do contrafactual
- Métodos clássicos de identificação: RCTs, variáveis instrumentais, diferenças em diferenças, regressão descontínua
- Métodos avançados de identificação: controle sintético, matching, técnicas de ponderação
- A integração de Machine Learning com inferência causal para análises mais robustas e flexíveis
A combinação destes métodos proporciona um poderoso toolkit para responder perguntas causais fundamentais no mercado financeiro brasileiro.
Tendências Emergentes
- Integração de ML causal com dados alternativos e big data
- Métodos de inferência causal para séries temporais financeiras
- Uso de aprendizado por reforço para estimar políticas ótimas
- Aplicações em ESG e sustentabilidade
- Inferência causal em mercados de criptoativos
Dicas para Aplicação Prática
- Comece pela teoria causal: defina claramente sua questão e mecanismo de identificação
- Escolha o método apropriado para sua pergunta específica
- Teste a robustez com múltiplos métodos
- Utilize ferramentas como EconML, DoWhy e CausalML
- Construa conhecimento domain-specific junto com o desenvolvimento técnico
Esperamos que este curso tenha fornecido uma base sólida para que você possa aplicar métodos de inferência causal em suas próprias análises e pesquisas no campo financeiro. Lembre-se que a causalidade é um conceito profundo que requer tanto rigor técnico quanto compreensão contextual do problema em questão.
Quiz Final - Verificação de Aprendizado
1. Qual das seguintes afirmações sobre Machine Learning causal é INCORRETA?
2. No contexto de análise de fusões e aquisições no mercado brasileiro, o que explica melhor a heterogeneidade nos efeitos sobre a eficiência operacional?
3. Qual é a principal vantagem do Double ML em comparação com métodos tradicionais de regressão para estimar efeitos causais?
Recursos Adicionais
- EconML (Microsoft Research): Implementações de Causal Forest, Double ML, etc.
- DoWhy (Microsoft Research): Framework para modelagem causal
- CausalML (Uber): Pacote focado em efeitos heterogêneos
- grf (Generalized Random Forests): Implementação em R dos métodos de Athey
- CausalImpact (Google): Para séries temporais
- Athey, S., & Imbens, G. W. (2019). Machine Learning Methods That Economists Should Know About
- Chernozhukov et al. (2018). Double/Debiased Machine Learning for Treatment Effects
- Wager, S., & Athey, S. (2018). Estimation and Inference of Heterogeneous Treatment Effects
- Pearl, J. (2019). The Seven Tools of Causal Inference
- Cunningham, S. (2021). Causal Inference: The Mixtape
Obrigado por participar deste PlayStat - uma jornada sobre inferêcia Estatística. Versão Beta - pode conter erros. Esperamos que as técnicas e conceitos discutidos sejam valiosos em sua jornada profissional e acadêmica na área de finanças e economia.