Mierzenie ryzyka portfela

Wprowadzenie do analizy portfela w Pythonie

Charlotte Werger

Data Scientist

Ryzyko portfela

  • Inwestowanie wiąże się z ryzykiem: wartość aktywów może rosnąć lub spadać
  • Oczekiwana stopa zwrotu jest zmienną losową
  • Rozproszenie stóp zwrotu wokół średniej mierzy wariancja $\sigma^2$ — powszechna miara zmienności
  • $\sigma^2 = \frac{\sum\limits_{i=1}^N (X -\mu)^2}{N}$

Ryzyko jako równowaga

Wprowadzenie do analizy portfela w Pythonie

Wariancja

$$

  • Wariancja poszczególnych aktywów jest różna: niektóre mają większe rozproszenie wokół średniej
  • Wariancja portfela nie jest prostą ważoną sumą wariancji składników
  • Ponieważ stopy zwrotu aktywów są skorelowane, obliczenia stają się złożone

Rozkłady o wysokiej i niskiej wariancji

Wprowadzenie do analizy portfela w Pythonie

Wariancja i korelacja a ryzyko portfela

$$

  • Korelacja między aktywem 1 a 2 oznaczana jest $\rho_{1,2}$ i określa, w jakim stopniu aktywa poruszają się razem
  • Wariancja portfela uwzględnia wariancje poszczególnych aktywów ($\sigma_1^2, \sigma_2^2$ itd.), ich wagi ($w_1, w_2$) oraz wzajemną korelację
  • Odchylenie standardowe ($\sigma$) jest pierwiastkiem kwadratowym wariancji ($\sigma^2$); obie wielkości mierzą zmienność
Wprowadzenie do analizy portfela w Pythonie

Obliczanie wariancji portfela

$$ Wzór na wariancję portfela

  • $\rho_{1,2} \sigma_1 \sigma_2$ to kowariancja aktywu 1 i 2
  • Kowariancję można też zapisać jako $ \sigma_{1,2} $
  • Pozwala to napisać:

Wzór na wariancję portfela — zapis skrócony

Wprowadzenie do analizy portfela w Pythonie

Skrócony zapis wariancji portfela

Wzór na wariancję portfela

  • Można to zapisać w notacji macierzowej, wygodniejszej w kodzie:

Wariancja portfela w notacji macierzowej

  • Innymi słowy, w Pythonie obliczamy:

    Wariancja portfela = Transponowane wagi x (Macierz kowariancji x Wagi)

Wprowadzenie do analizy portfela w Pythonie

Wariancja portfela w Pythonie

price_data.head(2)

ticker        AAPL       FB        GE       GM       WMT
date                    
2018-03-21    171.270    169.39    13.88    37.58    88.18
2018-03-22    168.845    164.89    13.35    36.35    87.14
# Calculate daily returns from prices
daily_returns = df.pct_change()
# Construct a covariance matrix for the daily returns data
cov_matrix_d = daily_returns.cov()
Wprowadzenie do analizy portfela w Pythonie

Wariancja portfela w Pythonie

# Construct a covariance matrix from the daily_returns
cov_matrix_d = (daily_returns.cov())*250
print (cov_matrix_d)

        AAPL          FB          GE          GM          WMT                    
AAPL    0.053569    0.026822    0.013466    0.018119    0.010798
FB      0.026822    0.062351    0.015298    0.017250    0.008765
GE      0.013466    0.015298    0.045987    0.021315    0.009513
GM      0.018119    0.017250    0.021315    0.058651    0.011894
WMT     0.010798    0.008765    0.009513    0.011894    0.041520
weights = np.array([0.2, 0.2, 0.2, 0.2, 0.2])
Wprowadzenie do analizy portfela w Pythonie

Wariancja portfela w Pythonie

# Calculate the variance with the formula
port_variance = np.dot(weights.T, np.dot(cov_matrix_a, weights))
print (port_variance)

0.022742232726360567
# Just converting the variance float into a percentage
print(str(np.round(port_variance, 3) * 100) + '%')

2.3%
port_stddev = np.sqrt(np.dot(weights.T, np.dot(cov_matrix_a, weights)))
print(str(np.round(port_stddev, 3) * 100) + '%')
15.1%
Wprowadzenie do analizy portfela w Pythonie

Czas na ćwiczenia!

Wprowadzenie do analizy portfela w Pythonie

Preparing Video For Download...