Monte Carlo симуляция портфеля: где ломается оценка риска
Точечный расчёт риска опирается на один сценарий: средняя доходность, заданное отклонение, выбранный горизонт. Ответ выглядит аккуратно, пока рынок ведёт себя ожидаемо, и рассыпается на первом разрыве.
Monte Carlo симуляция портфеля заменяет одно число распределением исходов, но держится на входных допущениях: как описана волатильность активов, учтены ли корреляции между инструментами, меняется ли матрица связей в стрессовых режимах. Если связи зафиксированы константой, оценка риска портфеля занижает хвосты — а именно там лежат потери, к которым стратегия не готова.
Второй разрыв — ручные допущения. Ставки, горизонты и правила ребалансировки часто заданы «по опыту» и нигде не проверены. Проверка гипотез на исторических данных показывает, что часть из них не выдерживает и одного кризисного периода: параметры подогнаны под прошлый тренд и не воспроизводятся на новых данных.
Третий — несходимость. Два прогона на одном наборе данных дают разные квантили потерь, и решение зависит от того, какой результат открыли первым. Устойчивость стратегии подтверждается только тогда, когда симуляция воспроизводима: фиксированный генератор, одни и те же входы, сходимость оценки при росте числа прогонов.
Ниже — как это закрывается: от спецификации входных распределений до критериев приёмки, по которым результат считается достоверным.
Что даёт внедрение: измеримые эффекты для оценки риска
Первый измеримый эффект — скорость подготовки сценариев. Когорту рыночных сценариев раньше собирали вручную: срезы доходностей, корреляционные матрицы, волатильности сводили в таблицы и согласовывали между подразделениями. Декларативное описание генератора Monte Carlo снимает этот этап — новый набор сценариев собирается в разы быстрее, а не за дни.
Воспроизводимость расчётов держится на полной фиксации входа. Прогон сохраняет зерно генератора, версию модели, срез данных и параметры распределений, поэтому отчёт, посчитанный сегодня, воспроизводится через месяцы с тем же результатом. Это закрывает класс ошибок «в отчёте одни цифры, при пересчёте другие»: расхождение видно сразу и объяснимо.
Устранение ручных допущений — самый ощутимый сдвиг. Доля операций, где параметры переносили руками из писем, локальных файлов и таблиц, на критическом пути падает до нуля: и данные, и настройки приходят из версионированного источника. Класс ошибок из-за устаревшего или чужого среза уходит целиком — модель не может молча посчитать по прошлому периоду.
Нагрузочная устойчивость расчёта проявляется в том, как растёт объём. Увеличение числа траекторий на порядок — это добавление вычислителей и параллельная раскладка задач, а не переписывание модели. Время расчёта остаётся предсказуемым, пока растёт число сценариев, а не сложность логики.
Контроль версий моделей замыкает контур. Модель, её параметры и код генератора живут в репозитории под тегами: по любому отчёту видно, какой версией он получен, а откат к предыдущей версии не стирает историю и не ломает воспроизводимость следующих прогонов.
Подходы к моделированию портфеля: сравнение режимов
Режим расчёта выбирают по горизонту планирования и по тому, насколько важны хвостовые сценарии. Историческое моделирование берёт форму распределения из фактических рядов доходностей и быстро отвечает на вопрос, что будет при повторении знакомого рынка, но не выходит за пределы уже случившихся событий.
Полный перебор сценариев строит детерминированную сетку по каждому активу и покрывает комбинации, которых в истории не было. Ограничение подхода — комбинаторный рост числа траекторий: сетку приходится сужать по числу активов и шагов, иначе расчёт перестаёт быть обозримым. Ниже — когда какой режим уместен.
| Режим расчёта | Когда подходит | Ограничения |
|---|---|---|
| Историческое моделирование | Проверка структуры портфеля на знакомых рыночных режимах | Не выходит за пределы наблюдённой истории, чувствительно к выбранному окну |
| Полный перебор сценариев | Поиск граничных условий и стресс-проверки | Комбинаторный рост числа траекторий, нужен узкий набор параметров |
| Смешанный подход | Длинный горизонт планирования с гипотетическими ветками | Больше допущений задаётся экспертно, сложнее объяснять |
На практике режимы комбинируют: исторические окна задают форму распределений, перебор — границы, а горизонт определяет, сколько шагов разыгрывать. В отчёте вклад каждого режима показываем отдельно — видно, откуда взялась итоговая оценка риска.
Этапы разработки: от аудита данных до передачи в эксплуатацию
Порядок работ фиксируем заранее, чтобы результат воспроизводился: одни и те же входные данные должны давать один и тот же отчёт на любой машине и через месяц, и через год. Поэтому расчёт строится как формализованный конвейер с контрольными точками, где на каждом шаге видно, что именно было принято и почему.
-
Аудит исходных данных. Смотрим ряды доходностей по каждому инструменту: пропуски, выбросы, дробления, смены валюты котировки, расхождения между источниками. Дефекты закрываем правилами до расчёта, иначе генератор случайных чисел тиражирует ошибку на тысячи сценариев.
-
Постановка задачи. Фиксируем горизонт, состав портфеля, доверительные уровни и метрики, по которым принимаются решения: просадка, вероятность недостижения цели, распределение доходности по квантилям. От этого зависит и число прогонов, и способ отбора сценариев.
-
Проектирование схемы расчёта. Согласуем допущения о распределениях, корреляциях и способе их восстановления — параметрический подход или выборка блоками, чтобы сохранить автокорреляцию. Генератор запускаем с фиксированным зерном: результат воспроизводим, а инженерное изменение видно отдельно от случайного разброса.
-
Калибровка модели. Оцениваем волатильность и матрицу корреляций по скользящим окнам, проверяем, насколько оценка чувствительна к длине окна. Добавляем стресс-сценарии, где корреляции сходятся к единице — так модель не занижает риск в кризис.
-
Проверка на исторических периодах. Прогоняем модель на отрезках с известным исходом и сравниваем прогноз с фактом: попадает ли фактическая просадка в расчётный интервал, устойчив ли результат при смене зерна. Расхождения разбираем и либо уточняем допущения, либо явно фиксируем как ограничение.
-
Передача в эксплуатацию. Отдаём регламент обновления данных, настроенный пересчёт по расписанию, контроль расхождений и документацию по параметрам. Команда заказчика проводит прогон самостоятельно под нашим сопровождением — до того, как мы отключаемся.
Что передаём на руки: модели, конфигурации, регламенты
Расчёт, который нельзя повторить, бесполезен: если не зафиксированы допущения, источник котировок и параметры генератора траекторий, следующий аналитик получит другое распределение на тех же данных и не поймёт причины расхождения. Поэтому передаём не только код, но и полный контур воспроизводимости — от описания модели до регламента пересчёта.
- Документация модели: перечень допущений, виды распределений доходностей, корреляционная матрица, горизонт прогноза, границы применимости и известные расхождения с фактическими данными.
- Конфигурации расчёта: файлы параметров — число траекторий, шаг ребалансировки, источники котировок, обработка корпоративных действий; версионируются вместе с кодом, чтобы результат откатывался к прежнему состоянию.
- Схема потоков данных: от загрузки рыночных рядов и очистки выбросов до агрегации перцентилей и построения кривой распределения итоговой стоимости, с точками контроля качества на каждом переходе.
- Инструкции для аналитиков: как запустить сценарий, как добавить инструмент в портфель, как читать отчёт по хвостовым квантилям и отличать изменение модели от сдвига рыночных данных.
- Регламент запуска и обновления: периодичность пересчёта, ответственный за запуск, порядок действий при расхождении с контрольным результатом и при обновлении модели.
- Тесты воспроизводимости: фиксированный набор траекторий с эталонным результатом — после правок сразу видно, что расчёт не «поехал» и распределение осталось сопоставимым.
- Журнал изменений модели: что менялось, по чьей инициативе и как это повлияло на форму распределения и оценки риска.
Кейс: как изменилась оценка риска после внедрения
Расчёт риска портфеля жил на трёх разрозненных источниках: выгрузки из учётной системы, таблицы аналитиков и файлы с историческими котировками, которые обновляли вручную по данным Bloomberg. Набор активов, горизонт, число траекторий и корреляционную матрицу каждый раз задавали правкой скриптов, поэтому прогон нельзя было повторить один в один.
Сценарии готовили 15 рабочих дней, а итог зависел от того, кто собирал выгрузку: расхождения в 95-м квантиле потерь между подразделениями доходили до 12 пунктов, и ещё неделя уходила на сверку.
| Что измеряли | До | После |
|---|---|---|
| Подготовка набора сценариев | 15 рабочих дней | 2 дня |
| Доля ручных операций в прогоне | около 70% | около 15% |
| Расхождения в отчётности по риску | 12 пунктов | 1 пункт |
| Разброс 95-го квантиля между прогонами | ±18% | ±2% |
| Время прогона на полном портфеле | 40 минут | 6 минут |
Источники свели в одно хранилище с версионированием: загрузка котировок получает дату среза и контрольную сумму, а сценарий ссылается на конкретную версию набора, а не на «последний файл на диске». Параметры прогона — горизонт, число траекторий, зерно генератора, корреляционная матрица — вынесены в конфигурацию. Одинаковый вход даёт одинаковый выход, а отчёт собирается из одного расчётного ядра, поэтому расхождения между подразделениями уходят на уровне источника данных.
Ручной труд сместился со сборки данных на проверку модели: аналитики подтверждают допущения и смотрят на хвост распределения вместо сведения таблиц. Откат к прошлому расчёту — переключение ссылки на предыдущий срез.
Чем сценарный анализ отличается от стресс-тестирования?
Это не два варианта одной процедуры, а два слоя контроля риска. Сценарный анализ строит распределение исходов: тысячи прогонов с разными комбинациями доходностей, волатильностей и корреляций дают не одну цифру, а картину — медиану, квантили и форму хвоста. Стресс-тестирование отвечает на другой вопрос: выживает ли портфель при одном неблагоприятном условии, которое задано вручную.
Поэтому различаются и метрики. Распределение даёт величину риска под заданным доверительным уровнем, ожидаемые потери в хвосте, вероятность просадки глубже лимита и долю прогонов с требованием довнести обеспечение. Стресс даёт точечный ответ: на каком шаге срабатывают принудительные закрытия и остаётся ли капитал положительным.
Различие и в допущениях о связях между активами. В сценарном анализе зависимости воспроизводятся статистической моделью — и в хвосте они усиливаются, что почти не видно на спокойных данных. В стрессе связи задаются жёстко: рисковые активы падают вместе, ликвидность исчезает, спреды расширяются. Поэтому стресс намеренно пессимистичнее распределения и не претендует на вероятность.
Отсюда и выбор метода. Вопрос «где ломается портфель и какой запас прочности нужен» закрывает стресс-тестирование; вопрос «сколько капитала держать и как часто нарушается лимит» — распределение из прогонов. Базельский комитет требует оба инструмента именно потому, что вероятность события и выживаемость под давлением — разные вопросы.
Технические сомнения: данные, точность, воспроизводимость
Перед стартом расчёта всплывает один и тот же набор сомнений: откуда берутся исходные данные и насколько они полны, можно ли доверять разбросу на выходе, повторится ли результат через полгода. Всё это проверяемые вещи, и по каждой есть ответ.
Каждый запуск пишет журнал: снимок рыночных данных с источником и временем, версия модели, число сценариев, зерно генератора. Поэтому результат воспроизводим, а расхождение с предыдущим прогоном объясняется параметрами, а не «случайностью».
Что делаете с пропусками и выбросами в истории?
Пропуски закрываем только на коротких разрывах внутри ряда, длинные разрывы и выбросы помечаем и исключаем из оценки параметров. В отчёте видно, сколько точек отброшено и как это сдвинуло распределение доходностей.
Это точечный прогноз или диапазон?
На выходе распределение, а не одно число: медиана, квантили потерь, вероятность просадки глубже заданного уровня. Устойчивость проверяем на исторических периодах и стрессовых сценариях, чтобы крайние квантили не плыли при смене окна оценки.
Повторится ли расчёт на том же наборе данных?
Да — при фиксированном зерне и той же версии модели результат совпадает, это закрыто автоматической проверкой. Если состав сценариев меняется, разницу видно в сравнении двух прогонов.
Как встроить расчёт в отчётность и обновлять модель?
Результаты выгружаем в форматах, которые уже читает ваша отчётность; допущения модели лежат в отдельном конфигурационном файле, поэтому обновление не требует переписывать код. Новую версию сначала прогоняем параллельно со старой и показываем разницу.
Обсудим вашу задачу: что прислать для оценки
Чтобы оценка была по делу, а не «плюс-минус порядок», достаточно прислать описание задачи и то, чем вы располагаете по данным. Ниже — минимальный набор. Если чего-то нет, отметим это как открытый вопрос и предложим, как закрыть.
- Цель расчёта. Какие решения принимаются по результатам: сравнение стратегий, проверка лимитов, стресс-сценарии, регулярная отчётность перед комитетом.
- Состав портфеля. Классы активов, доли, валюты, допустимые диапазоны отклонений, есть ли неторгуемые или низколиквидные позиции.
- Данные. Исторические ряды или их источник, глубина и частота, пропуски, учёт корпоративных событий и комиссий.
- Правила модели. Горизонт, число сценариев, частота ребалансировки, ограничения по ликвидности и объёму сделки.
- Выходные метрики. Распределение доходности, вероятность просадки, квантильные оценки потерь, нужные срезы и формы отчётов.
- Как результат попадает к людям. Выгрузка в файлы, дашборд, интеграция с учётной системой, права доступа, журнал запусков.
- Воспроизводимость и нагрузка. Должен ли прогон повторяться до цифры при том же наборе исходных данных и за какое время полный расчёт должен укладываться.
Полное техническое задание готовить не нужно — по этому набору мы восстанавливаем логику расчёта и границы работы. В ответ присылаем оценку объёма, план работ по этапам, перечень допущений и вопросы, которые стоит снять до старта. Опишите задачу — вернёмся с оценкой и планом.







