Постановка задачи
Инвестор собрал портфель из высокодоходных облигаций. И ему, конечно, хочется понять, какова вероятность того, что за время удержания в портфеле случится ровно два дефолта? Или три? Не более четырех? А может быть, он хочет прикинуть, с какой вероятностью потери окажутся настолько велики, что портфель покажет отрицательную доходность?
Он вспоминает теорию вероятности: для таких задач есть биномиальное распределение. И быстро обнаруживает, что классическая формула Бернулли работает только при условии, что вероятность дефолта одинакова для всех облигаций.
Но в реальном портфеле это почти никогда не так. У каждой бумаги свой рейтинг, свой эмитент, своя вероятность дефолта: у одной — 3%, у другой — 12%, у третьей — 7%.
Что делать? Как быть?
Можно, конечно, перебрать все возможные комбинации дефолтов — например, для портфеля из 20 облигаций это больше миллиона вариантов. Но есть способ гораздо проще и элегантнее.
Итеративная процедура
Допустим, у нас в портфеле имеется n облигаций и заданы вероятности дефолтов на определенном горизонте (cumulative default probabilities)
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀q₁, q₂, …, qₙ.
Мы хотим найти ℙ(L = k) — вероятность того, что за время удержания портфеля произойдет ровно k дефолтов.
Если предположить, что события дефолтов независимы, то случайная величина L (общее число дефолтов) подчиняется так называемому биномиальному распределению Пуассона (Poisson binomial distribution). Это распределение суммы независимых, но не одинаково распределённых бернуллиевских случайных величин. Мы можем построить его итеративно, добавляя по одной облигации, последовательно вычисляя распределение вероятностей числа дефолтов.
Обозначим:
⠀⠀pₖ[ j ] = ℙ(произошло k дефолтов среди первых j облигаций)
Вероятность иметь k дефолтов после добавления j-й облигации равна сумме вероятностей следующих событий
- среди первых j − 1 облигаций было k дефолтов и в новой облигации не случился дефолт.
- среди первых j − 1 облигаций было k − 1 дефолтов и в новой облигации случился дефолт:
⠀⠀⠀⠀⠀⠀pₖ[ j ]=pₖ[ j−1]⋅(1−qⱼ) + pₖ₋₁[ j−1]⋅qⱼ
Начальные условия (для первой облигации):
⠀⠀⠀⠀⠀⠀p₀[1] = 1- q₁, p₁[1] = q₁
После прохода по всем n облигациям получаем полный вектор распределения вероятностей pₖ, k = 0, … , n.
Из полученного распределения легко найти необходимые метрики портфеля: вероятности того, что потери превысят заданный порог, квантили для расчета Value-at-Risk, условный VaR (Expected Shortfall) и т. д. Заметим, что нам не нужно знать вид распределения ℙ(L = k) для определения ожидаемых потерь портфеля 𝔼[L] в силу линейности математического ожидания. Для этого достаточно исходного набора вероятностей q₁, q₂, …, qₙ.
Вводим корреляции
Однако события дефолтов нельзя считать независимыми. Дефолты коррелированы и эта корреляция (как считается) растет во времена экономических кризисов. Поэтому наш алгоритм нуждается в дополнении.
Мы можем учесть корреляцию дефолтов через однофакторную модель гауссовской копулы. В этой модели вводится общий фактор — нормально распределенная случайная величина M ∼ N(0,1), а условная вероятность дефолта j-й облигации при заданном значении M выражается через ее безусловную вероятность qⱼ и параметр корреляции ρ:
Тогда общее распределение количества дефолтов получается усреднением условных распределений по фактору M:
В опубликованном на Google Colab файле приведен код Python, реализующий данный алгоритм на примере портфеля из 20 облигаций, каждая номиналом в одну денежную единицу. Вы можете задавать кумулятивные вероятности дефолтов облигаций в портфеле, величину корреляции (приближенно ее можно считать средним уровнем корреляции по портфелю), норму возмещения при дефолте и т.д. Учёт индивидуальных корреляций — вполне выполнимая задача, но для демонстрационных целей текущей версии кода достаточно.
Распределение HPR и метрики
Рассмотрим портфель бескупонных облигаций с одинаковым сроком до погашения, равным горизонту инвестирования. В этом случае мы точно знаем будущую стоимость облигации при отсутствии дефолта. Иначе мы бы столкнулись с неопределенностью, связанной с изменением процентных ставок:
- цена облигации на промежуточную дату заранее неизвестна
- возникает проблема реинвестирования купонов
Если дефолта не произошло, инвестор получает заранее известную сумму (номинал). Если дефолт случился, вложенные средства теряются полностью.
Таким образом, вся неопределенность сводится к тому, какие именно облигации не доживут до погашения. Мы можем сосредоточиться исключительно на распределении дефолтов, не внося в модель дополнительных допущений о ставках реинвестирования или о ценах облигаций на промежуточные даты.
Именно этот вариант реализован в приведенном ниже коде, опубликованном на Google Colab. Мы предполагаем, что инвестиции распределены равномерно между всеми облигациями портфеля. Таким образом, каждая бумага составляет долю 1/n от общей суммы вложений. В нашем примере с 20 облигациями это 5% портфеля на каждую.