Измерение риска портфеля

Введение в анализ портфеля на Python

Charlotte Werger

Data Scientist

Риск портфеля

  • Инвестиции сопряжены с риском: отдельные активы могут расти или падать
  • Ожидаемая доходность — это случайная величина
  • Разброс доходностей вокруг среднего измеряется дисперсией $\sigma^2$ — распространённой мерой волатильности
  • $\sigma^2 = \frac{\sum\limits_{i=1}^N (X -\mu)^2}{N}$

Риск как баланс

Введение в анализ портфеля на Python

Дисперсия

$$

  • Дисперсия отдельного актива варьируется: у одних разброс вокруг среднего больше, у других меньше
  • Дисперсия портфеля не равна просто взвешенной сумме дисперсий составляющих активов
  • Поскольку доходности активов коррелируют, расчёт усложняется

Распределения с высокой и низкой дисперсией

Введение в анализ портфеля на Python

Как дисперсия и корреляция связаны с риском портфеля?

$$

  • Корреляция между активами 1 и 2 обозначается $\rho_{1,2}$ и показывает, в какой мере активы движутся вместе
  • Дисперсия портфеля учитывает дисперсии отдельных активов ($\sigma_1^2, \sigma_2^2, etc$), их веса в портфеле ($w_1, w_2$), а также корреляцию между ними
  • Стандартное отклонение ($\sigma$) равно квадратному корню из дисперсии ($\sigma^2$); оба показателя измеряют волатильность
Введение в анализ портфеля на Python

Вычисление дисперсии портфеля

$$ Формула дисперсии портфеля

  • $\rho_{1,2} \sigma_1 \sigma_2$ называется ковариацией между активами 1 и 2
  • Ковариацию также записывают как $ \sigma_{1,2} $
  • Это позволяет переписать формулу:

Переписанная формула дисперсии портфеля

Введение в анализ портфеля на Python

Сокращённая запись дисперсии портфеля

Формула дисперсии портфеля

  • Её можно переписать в матричной форме, которую удобнее использовать в коде:

Дисперсия портфеля в матричной записи

  • Иными словами, в Python нужно вычислить следующее:

    Дисперсия портфеля = Транспонированные веса × (Матрица ковариаций × Веса)

Введение в анализ портфеля на Python

Дисперсия портфеля в Python

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()
Введение в анализ портфеля на Python

Дисперсия портфеля в Python

# 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])
Введение в анализ портфеля на Python

Дисперсия портфеля в Python

# 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%
Введение в анализ портфеля на Python

Давайте потренируемся!

Введение в анализ портфеля на Python

Preparing Video For Download...