Rupturi structurale

Managementul Cantitativ al Riscului în Python

Jamsheed Shorish

Computational Economist

Risc și distribuție

  • Instrumente de gestionare a riscului
    • Atenuarea riscului: MPT
    • Măsurarea riscului: VaR, CVaR
  • Risc: dispersie, volatilitate
    • Varianța (deviația standard) ca definiție a riscului
  • Legătura dintre risc și distribuția factorilor de risc ca variabile aleatoare
Managementul Cantitativ al Riscului în Python

Staționaritate

  • Ipoteză: distribuția este constantă în timp
  • Distribuție neschimbată = staționară
  • Frontiera eficientă în perioada crizei financiare globale
    • _Nu_ este staționară
  • Tehnicile de estimare necesită staționaritate
    • Istorică: distribuție staționară necunoscută din date trecute
    • Parametrică: clasă de distribuție staționară presupusă
    • Monte Carlo: distribuție staționară presupusă pentru extrageri aleatoare
Managementul Cantitativ al Riscului în Python

Rupturi structurale

  • Non-staționar => distribuția se poate schimba în timp
  • Se presupun momente specifice ale schimbării
    • Datele se împart în sub-perioade
    • În fiecare sub-perioadă se presupune staționaritate
  • Rupturi structurale: puncte de schimbare
    • Schimbare în „tendința" mediei și/sau volatilității datelor
Managementul Cantitativ al Riscului în Python

Exemplu: creșterea populației Chinei

  • Examinăm perioada 1950 - 2019
  • Tendința este aproximativ liniară...

Graficul populației Chinei în timp, 1950-2019

Managementul Cantitativ al Riscului în Python

Exemplu: creșterea populației Chinei

  • Examinăm perioada 1950 - 2019
  • Tendința este aproximativ liniară...
  • ...dar pare să încetinească după 1990
  • Posibilă ruptură structurală în jurul anului 1990.
  • Implică faptul că distribuția populației nete (nașteri - decese) s-a schimbat
  • Cauze posibile: politici guvernamentale, nivel de trai etc.

Graficul populației Chinei în timp cu săgeți de tendință, 1950-2019

Managementul Cantitativ al Riscului în Python

Testul Chow

  • Exemplul anterior: dovezi vizuale pentru ruptura structurală
  • Cuantificare: măsură statistică
  • Testul Chow:
    • Testează existența rupturii structurale într-un model liniar
    • Ipoteza nulă: nu există ruptură
    • Necesită trei regresii OLS
      • Regresia pentru întreaga perioadă
      • Două regresii, înainte și după ruptură
    • Se colectează suma pătratelor reziduurilor
    • Statistica de test urmează distribuția „F"
Managementul Cantitativ al Riscului în Python

Testul Chow în Python

  • Ipoteză: ruptură structurală în 1990 pentru populația Chinei
  • Se presupune un model factorial liniar: $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • Regresie OLS cu obiectul OLS din statsmodels pe perioada 1950 - 2019
    • Se extrage suma pătratelor reziduurilor 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
Managementul Cantitativ al Riscului în Python

Testul Chow în Python

  • Se împarte 1950 - 2019 în sub-perioadele 1950 - 1989 și 1990 - 2019
  • Se efectuează regresii OLS pentru fiecare sub-perioadă
    • Se extrag res_before.ssr și 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
Managementul Cantitativ al Riscului în Python

Testul Chow în Python

  • Se calculează statistica testului Chow distribuită F
    • Se calculează numărătorul
      • k = 2 grade de libertate = 2 coeficienți OLS $\alpha$, $\beta$
    • Se calculează numitorul
      • 66 grade de libertate = numărul total de puncte de date (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
Managementul Cantitativ al Riscului în Python

Să exersăm!

Managementul Cantitativ al Riscului în Python

Preparing Video For Download...