Измерение риска

Количественное управление рисками на Python

Jamsheed Shorish

CEO, Shorish Research

Распределение убытков

  • Пример с валютой Forex:
    • Стоимость портфеля в долларах США: USD 100
    • Фактор риска = курс EUR / USD
    • Стоимость портфеля в евро при 1 EUR = 1 USD: USD 100 x EUR 1 / USD 1 = EUR 100.
    • Стоимость портфеля в евро при r EUR = 1 USD: = USD 100 x EUR r / 1 USD = EUR 100 x r
    • Убыток = EUR 100 - EUR 100 x r = EUR 100 x (1 - r)
  • Распределение убытков: случайные реализации r => распределение убытков портфеля в будущем

Гистограмма убытков по Forex

Количественное управление рисками на Python

Максимальный убыток

  • Каков максимальный убыток портфеля?
  • Ограничить убытки со 100%-й уверенностью невозможно
  • Уровень доверия: заменяет 100%-ю уверенность на вероятность верхней границы
  • Позволяет отвечать на вопросы вроде: «Каков максимальный убыток в 95% случаев?»
    • Здесь уровень доверия равен 95%.
Количественное управление рисками на Python

Value at Risk (VaR)

  • VaR — статистика, измеряющая максимальный убыток портфеля при заданном уровне доверия
  • Типичные уровни доверия: 95%, 99% и 99,5% (обычно в виде десятичных дробей)
  • Пример с Forex: если в 95% случаев курс EUR / USD не ниже 0,40, то:
    • стоимость портфеля не менее USD 100 x 0,40 EUR / USD = EUR 40,
    • убыток портфеля не более EUR 40 - EUR 100 = EUR 60,
    • таким образом, 95% VaR составляет EUR 60.

Временной ряд курса EUR/USD с отсечением на уровне 0,40

Количественное управление рисками на Python

Conditional Value at Risk (CVaR)

  • CVaR — ожидаемый убыток при условии, что убыток не меньше VaR
  • Равен математическому ожиданию в хвосте распределения убытков:
    • $$\textnormal{CVaR}(\alpha) := \frac{1}{1-\alpha}\mathbb{E} \int_{\textnormal{VaR}(\alpha)}^{\bar{x}} x f(x) dx,$$
    • $f(\cdot)$ = функция плотности распределения убытков
    • $\bar{x}$ = верхняя граница убытка (может быть бесконечностью)
    • $\textnormal{VaR}(\alpha)$ = VaR при уровне доверия $\alpha$.
  • Пример с Forex:
    • 95% CVaR = ожидаемый убыток для 5% случаев, когда стоимость портфеля меньше EUR 40

График распределения убытков с хвостовой зависимостью VaR и CVaR

Количественное управление рисками на Python

Вычисление VaR

  1. Задайте уровень доверия, например 95% (0.95)
  2. Создайте Series наблюдений loss
  3. Вычислите loss.quantile() при заданном уровне доверия
  4. VaR = результат .quantile() при нужном уровне доверия

  5. Распределение убытков scipy.stats: можно также использовать функцию процентных точек .ppf()

loss = pd.Series(observations)

VaR_95 = loss.quantile(0.95) print("VaR_95 = ", VaR_95)
Var_95 = 1.6192834157254088
Количественное управление рисками на Python

Вычисление CVaR

  1. Задайте уровень доверия, например 95% (0.95)
  2. Создайте или используйте выборку из распределения убытков
  3. Вычислите VaR при заданном уровне доверия, например 0.95.
  4. Вычислите CVaR как ожидаемый убыток (для нормального распределения используйте scipy.stats.norm.expect()).
losses = pd.Series(scipy.stats.norm.rvs(size=1000))

VaR_95 = scipy.stats.norm.ppf(0.95)
CVaR_95 = (1/(1 - 0.95))*scipy.stats.norm.expect(lambda x: x, lb = VaR_95)
print("CVaR_95 = ", CVaR_95)
CVaR_95 = 2.153595332530393
Количественное управление рисками на Python

Визуализация VaR

  • Гистограмма распределения убытков для 1000 наблюдений из N(1,3)

Гистограмма убытков с нормальным распределением

Количественное управление рисками на Python

Визуализация VaR

  • Гистограмма распределения убытков для 1000 наблюдений из N(1,3)
    • VaR$_{95}$ = 5,72 — VaR при уровне доверия 95%

Гистограмма убытков с 95% VaR

Количественное управление рисками на Python

Визуализация VaR

  • Гистограмма распределения убытков для 1000 наблюдений из N(1,3)
    • VaR$_{95}$ = 5,72 — VaR при уровне доверия 95%
    • VaR$_{99}$ = 7,81 — VaR при уровне доверия 99%

Гистограмма убытков с 95% и 99% VaR

Количественное управление рисками на Python

Визуализация VaR

  • Гистограмма распределения убытков для 1000 наблюдений из N(1,3)
    • VaR$_{95}$ = 5,72 — VaR при уровне доверия 95%
    • VaR$_{99}$ = 7,81 — VaR при уровне доверия 99%
    • VaR$_{99.5}$ = 8,78 — VaR при уровне доверия 99,5%
  • Значение VaR возрастает по мере роста уровня доверия

Гистограмма убытков с 95%, 99% и 99,5% VaR

Количественное управление рисками на Python

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

Количественное управление рисками на Python

Preparing Video For Download...