Quebras estruturais

Gerenciamento Quantitativo de Risco em Python

Jamsheed Shorish

Computational Economist

Risco e distribuição

  • Kit de ferramentas de gestão de risco
    • Mitigação de risco: MPT
    • Mensuração de risco: VaR, CVaR
  • Risco: dispersão, volatilidade
    • Variância (desvio padrão) como definição de risco
  • Conexão entre risco e distribuição dos fatores de risco como variáveis aleatórias
Gerenciamento Quantitativo de Risco em Python

Estacionariedade

  • Suposição: a distribuição é a mesma ao longo do tempo
  • Distribuição inalterada = estacionária
  • Fronteira eficiente no período da crise financeira global
    • Não estacionária
  • Técnicas de estimação exigem estacionariedade
    • Histórica: distribuição estacionária desconhecida a partir de dados passados
    • Paramétrica: classe de distribuição estacionária assumida
    • Monte Carlo: distribuição estacionária assumida para sorteios aleatórios
Gerenciamento Quantitativo de Risco em Python

Quebras estruturais

  • Não estacionária => talvez a distribuição mude ao longo do tempo
  • Assuma pontos específicos no tempo para a mudança
    • Divida os dados em subperíodos
    • Dentro de cada subperíodo, assuma estacionariedade
  • Quebra(s) estrutural(is): ponto(s) de mudança
    • Mudança na "tendência" da média e/ou volatilidade dos dados
Gerenciamento Quantitativo de Risco em Python

Exemplo: crescimento populacional da China

  • Examine o período 1950 - 2019
  • A tendência é aproximadamente linear...

Gráfico da população da China ao longo do tempo, 1950-2019

Gerenciamento Quantitativo de Risco em Python

Exemplo: crescimento populacional da China

  • Examine o período 1950 - 2019
  • A tendência é aproximadamente linear...
  • ...mas parece desacelerar a partir de 1990
  • Possível quebra estrutural perto de 1990.
  • Implica que a distribuição do saldo populacional (nascimentos - mortes) mudou
  • Possíveis motivos: política governamental, padrão de vida, etc.

Gráfico da população da China ao longo do tempo com setas de tendência, 1950-2019

Gerenciamento Quantitativo de Risco em Python

O teste de Chow

  • Exemplo anterior: evidência visual de quebra estrutural
  • Quantificação: medida estatística
  • Teste de Chow:
    • Testa a existência de quebra estrutural dado um modelo linear
    • Hipótese nula: sem quebra
    • Requer três regressões MQO
      • Regressão para o período inteiro
      • Duas regressões, antes e depois da quebra
    • Coletar a soma dos resíduos ao quadrado
    • A estatística de teste segue a distribuição "F"
Gerenciamento Quantitativo de Risco em Python

O teste de Chow em Python

  • Hipótese: quebra estrutural em 1990 para a população da China
  • Assuma um "modelo de fatores" linear: $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • Regressão MQO usando o objeto OLS do statsmodels no período completo 1950 - 2019
    • Obter a soma dos resíduos ao quadrado res.ssr
import statsmodels.api as sm
res = sm.OLS(log_pop, year).fit()

print('SSR 1950-2019: ', res.ssr)
SSR 1950-2019: 0.29240576138055463
Gerenciamento Quantitativo de Risco em Python

O teste de Chow em Python

  • Divida 1950 - 2019 nos subperíodos 1950 - 1989 e 1990 - 2019
  • Faça regressões MQO em cada subperíodo
    • Obter res_before.ssr e res_after.ssr
pop_before = log_pop.loc['1950':'1989']; year_before = year.loc['1950':'1989'];
pop_after  = log_pop.loc['1990':'2019']; year_after =  year.loc['1990':'2019'];

res_before = sm.OLS(pop_before, year_before).fit() res_after = sm.OLS(pop_after, year_after).fit()
print('SSR 1950-1989: ', res_before.ssr) print('SSR 1990-2019: ', res_after.ssr)
SSR 1950-1989: 0.011741113017411783
SSR 1990-2019: 0.0013717593339608077
Gerenciamento Quantitativo de Risco em Python

O teste de Chow em Python

  • Calcule a estatística do teste de Chow com distribuição F
    • Calcule o numerador
      • k = 2 graus de liberdade = 2 coeficientes MQO $\alpha$, $\beta$
    • Calcule o denominador
      • 66 graus de liberdade = número total de pontos (70) - 2*k
numerator = (ssr_total - (ssr_before + ssr_after)) / 2

denominator = (ssr_before + ssr_after) / 66
chow_test = numerator / denominator print("Chow test statistic: ", chow_test, "; Critical value, 99.9%: ", 7.7)
Chow test statistic: 702.8715822890057; Critical value, 99.9%: 7.7
Gerenciamento Quantitativo de Risco em Python

Vamos praticar!

Gerenciamento Quantitativo de Risco em Python

Preparing Video For Download...