Welkom!

Kwantitatief risicobeheer in Python

Dr. Jamsheed Shorish

Computational Economist

Over mij

  • Computationeel econoom
  • Gespecialiseerd in:
    • asset pricing
    • financiële technologie ("FinTech")
    • computer­toepassingen voor economie en finance
  • Co-docent, "Economic Analysis of the Digital Economy" aan de ANU
  • Shorish Research (België): computationele bedrijfstoepassingen
Kwantitatief risicobeheer in Python

Wat is Quantitative Risk Management?

  • Quantitative Risk Management: studie van kwantificeerbare onzekerheid
  • Onzekerheid:
    • Toekomstige uitkomsten zijn onbekend
    • Uitkomsten beïnvloeden planningsbeslissingen
  • Risicobeheer: effecten van ongunstige uitkomsten beperken
  • Kwantificeerbare onzekerheid: factoren vinden om risico te meten
    • Voorbeeld: brandverzekering. Welke factoren verhogen brandrisico?
  • Deze cursus: focus op risico van een financiële portefeuille
Kwantitatief risicobeheer in Python

Risicobeheer en de wereldwijde financiële crisis

  • Grote Recessie (2007 - 2010)
    • Wereldwijd groeiverlies > $2 biljoen
    • Verenigde Staten: bijna $10 biljoen verlies aan huishoudvermogen
    • Amerikaanse aandelenmarkten verloren ca. $8 biljoen
  • Mondiale financiële crisis (2007-2009)
    • Grote verschuivingen in fundamentele assetwaarden
    • Enorme onzekerheid over toekomstige rendementen
    • Hoge volatiliteit van assetrendementen
    • Risicobeheer was cruciaal voor succes of falen
Kwantitatief risicobeheer in Python

Korte herhaling: financiële portefeuilles

  • Financiële portefeuille
    • Verzameling assets met onzekere toekomstige rendementen
    • Aandelen
    • Obligaties
    • Valuta ('forex')
    • Aandelenopties
  • Uitdaging: risico kwantificeren om onzekerheid te beheren
    • Optimale beleggingsbeslissingen nemen
    • Rendement maximaliseren, gegeven risicobereidheid
Kwantitatief risicobeheer in Python

Rendement kwantificeren

  • Portefeuillerendement: gewogen som van assetrendementen
    • Pandas datalibrary
    • DataFrame prices
    • .pct_change()-methode
    • .dot()-methode van returns
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Kwantitatief risicobeheer in Python

Risico kwantificeren

  • Volatiliteit van portefeuillerendement = risico
  • Bereken volatiliteit via covariantiematrix
  • Gebruik .cov() op returns en annualiseer

 

 

covariance = returns.cov()*252

print(covariance)

Voorbeeld van een covariantiematrix tussen 4 assets

Kwantitatief risicobeheer in Python

Risico kwantificeren

  • Volatiliteit van portefeuillerendement = risico
  • Bereken volatiliteit via covariantiematrix
  • Gebruik .cov() op returns en annualiseer
  • Diagonaal van covariance: varianties per asset  

   

covariance = returns.cov()*252

print(covariance)

Voorbeeld covariantiematrix met variantie op de diagonaal gemarkeerd

Kwantitatief risicobeheer in Python

Risico kwantificeren

  • Volatiliteit van portefeuillerendement = risico
  • Bereken volatiliteit via covariantiematrix
  • Gebruik .cov() op returns en annualiseer
  • Diagonaal van covariance: varianties per asset
  • Buitendiagonalen van covariance: covarianties tussen assets
covariance = returns.cov()*252

print(covariance)

Voorbeeld covariantiematrix met covarianties op de buitendiagonalen gemarkeerd

Kwantitatief risicobeheer in Python

Portefeuillerisico

  • Hangt af van asset-weights in de portefeuille
  • Portefeuillevariantie $\sigma_p^2$ is $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • Matrixvermenigvuldiging kan met de @-operator in Python
  • Meestal gebruiken we standaarddeviatie i.p.v. variantie
weights = [0.25, 0.25, 0.25, 0.25] # Veronderstelt vier assets

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
Kwantitatief risicobeheer in Python

Volatiliteitstijdreeks

  • Je kunt volatiliteit ook door de tijd berekenen
  • Gebruik een 'window' voor een vaste periode (bv. week, 30-daagse 'maand')
  • Series.rolling() maakt een window
  • Observeer de trend en mogelijke extreme events
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

30-daags rollend venster van geannualiseerde rendementsvolatiliteit

Kwantitatief risicobeheer in Python

Laten we oefenen!

Kwantitatief risicobeheer in Python

Preparing Video For Download...