Strukturella brott

Kvantitativ riskhantering i Python

Jamsheed Shorish

Computational Economist

Risk och fördelning

  • Verktygslåda för riskhantering
    • Riskreducering: MPT
    • Riskmätning: VaR, CVaR
  • Risk: spridning, volatilitet
    • Varians (standardavvikelse) som riskmått
  • Koppling mellan risk och fördelning av riskfaktorer som stokastiska variabler
Kvantitativ riskhantering i Python

Stationäritet

  • Antagande: fördelningen är densamma över tid
  • Oförändrad fördelning = stationär
  • Den effektiva fronten under den globala finanskrisen
    • Inte stationär
  • Estimeringsmetoder kräver stationäritet
    • Historisk: okänd stationär fördelning från historiska data
    • Parametrisk: antagen stationär fördelningsklass
    • Monte Carlo: antagen stationär fördelning för slumpdragningar
Kvantitativ riskhantering i Python

Strukturella brott

  • Icke-stationär => fördelningen förändras möjligen över tid
  • Anta specifika tidpunkter för förändring
    • Dela upp data i delperioder
    • Inom varje delperiod antas stationäritet
  • Strukturella brott: förändringspunkter
    • Förändring i "trend" för medelvärde och/eller volatilitet i data
Kvantitativ riskhantering i Python

Exempel: Kinas befolkningstillväxt

  • Undersöker perioden 1950–2019
  • Trenden är ungefär linjär...

Graf över Kinas befolkningsutveckling, 1950–2019

Kvantitativ riskhantering i Python

Exempel: Kinas befolkningstillväxt

  • Undersöker perioden 1950–2019
  • Trenden är ungefär linjär...
  • ...men verkar avta från omkring 1990
  • Möjligt strukturellt brott runt 1990.
  • Tyder på att fördelningen av nettobfolkning (födslar – dödsfall) förändrades
  • Möjliga orsaker: statlig politik, levnadsstandard m.m.

Graf över Kinas befolkningsutveckling med trendpilar, 1950–2019

Kvantitativ riskhantering i Python

Chow-testet

  • Föregående exempel: visuella bevis för strukturellt brott
  • Kvantifiering: statistiskt mått
  • Chow-testet:
    • Testar förekomsten av strukturellt brott givet en linjär modell
    • Nollhypotes: inget brott
    • Kräver tre OLS-regressioner
      • Regression för hela perioden
      • Två regressioner, före och efter brottet
    • Samla in summan av kvadrerade residualer
    • Teststatistikan följer en "F"-fördelning
Kvantitativ riskhantering i Python

Chow-testet i Python

  • Hypotes: strukturellt brott 1990 för Kinas befolkning
  • Antag en linjär "faktormodell": $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • OLS-regression med statsmodelss OLS-objekt över hela perioden 1950–2019
    • Hämta summan av kvadrerade residualer 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
Kvantitativ riskhantering i Python

Chow-testet i Python

  • Dela upp 1950–2019 i delperioderna 1950–1989 och 1990–2019
  • Utför OLS-regressioner för varje delperiod
    • Hämta res_before.ssr och 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
Kvantitativ riskhantering i Python

Chow-testet i Python

  • Beräkna den F-fördelade Chow-teststatistikan
    • Beräkna täljaren
      • k = 2 frihetsgrader = 2 OLS-koefficienter $\alpha$, $\beta$
    • Beräkna nämnaren
      • 66 frihetsgrader = totalt antal datapunkter (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
Kvantitativ riskhantering i Python

Nu kör vi en övning!

Kvantitativ riskhantering i Python

Preparing Video For Download...