Rotture strutturali

Gestione quantitativa del rischio in Python

Jamsheed Shorish

Computational Economist

Rischio e distribuzione

  • Strumenti di gestione del rischio
    • Mitigazione del rischio: MPT
    • Misurazione del rischio: VaR, CVaR
  • Rischio: dispersione, volatilità
    • Varianza (deviazione standard) come definizione di rischio
  • Legame tra rischio e distribuzione dei fattori di rischio come variabili casuali
Gestione quantitativa del rischio in Python

Stazionarietà

  • Assunzione: la distribuzione è la stessa nel tempo
  • Distribuzione invariata = stazionaria
  • Frontiera efficiente nel periodo della crisi finanziaria globale
    • Non stazionaria
  • Le tecniche di stima richiedono stazionarietà
    • Storica: distribuzione stazionaria ignota dai dati passati
    • Parametrica: classe di distribuzioni stazionarie assunta
    • Monte Carlo: distribuzione stazionaria assunta per le estrazioni casuali
Gestione quantitativa del rischio in Python

Rotture strutturali

  • Non stazionaria => la distribuzione può cambiare nel tempo
  • Supponi punti specifici di cambio
    • Suddividi i dati in sottoperiodi
    • All'interno di ogni sottoperiodo, assumi stazionarietà
  • Rottura strutturale: punto/i di cambio
    • Cambio nel «trend» della media e/o della volatilità dei dati
Gestione quantitativa del rischio in Python

Esempio: crescita della popolazione cinese

  • Esamina il periodo 1950 - 2019
  • Il trend è circa lineare...

Grafico della popolazione della Cina nel tempo, 1950-2019

Gestione quantitativa del rischio in Python

Esempio: crescita della popolazione cinese

  • Esamina il periodo 1950 - 2019
  • Il trend è circa lineare...
  • ...ma sembra rallentare intorno al 1990
  • Possibile rottura strutturale vicino al 1990.
  • Implica che la distribuzione della popolazione netta (nati - morti) sia cambiata
  • Possibili motivi: politiche pubbliche, tenore di vita, ecc.

Grafico della popolazione della Cina nel tempo con frecce di trend, 1950-2019

Gestione quantitativa del rischio in Python

Il test di Chow

  • Esempio precedente: evidenza visiva di rottura strutturale
  • Quantificazione: misura statistica
  • Test di Chow:
    • Verifica l'esistenza di una rottura strutturale dato un modello lineare
    • Ipotesi nulla: nessuna rottura
    • Richiede tre regressioni OLS
      • Regressione per l'intero periodo
      • Due regressioni, prima e dopo la rottura
    • Raccogli la somma dei residui al quadrato
    • La statistica di test segue la distribuzione "F"
Gestione quantitativa del rischio in Python

Il test di Chow in Python

  • Ipotesi: rottura strutturale nel 1990 per la popolazione cinese
  • Assumi un «factor model» lineare: $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • Regressione OLS usando OLS di statsmodels sull'intero periodo 1950 - 2019
    • Recupera la somma dei residui al quadrato 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
Gestione quantitativa del rischio in Python

Il test di Chow in Python

  • Dividi 1950 - 2019 nei sottoperiodi 1950 - 1989 e 1990 - 2019
  • Esegui regressioni OLS su ciascun sottoperiodo
    • Recupera 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
Gestione quantitativa del rischio in Python

Il test di Chow in Python

  • Calcola la statistica del test di Chow (distribuita F)
    • Calcola il numeratore
      • k = 2 gradi di libertà = 2 coefficienti OLS $\alpha$, $\beta$
    • Calcola il denominatore
      • 66 gradi di libertà = numero totale di dati (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
Gestione quantitativa del rischio in Python

Esercitiamoci!

Gestione quantitativa del rischio in Python

Preparing Video For Download...