GAN-генерация рыночных сценариев: почему тесты не ловят риск
Классический провал в проектах с синтетическими рыночными данными выглядит одинаково. Состязательную пару обучают на истории спокойного рынка: там мало разрывов, волатильность меняется мягко, а хвосты распределения почти не представлены. На выходе получаются гладкие ряды — они выглядят правдоподобно на графике и без замечаний проходят базовые статистические проверки.
Дальше стресс-тестирование стратегий превращается в формальность. Модель показывает устойчивый профиль на тысячах сгенерированных траекторий, потому что все они — вариации одного и того же спокойного режима. Дискриминатор перестаёт отличать синтетику от реальных котировок, метрики сходства растут, и это принимают за признак качества. Фактически генератор выучил средний режим и разучился воспроизводить редкие события — именно те, ради которых его строили.
Цена ошибки проявляется не в отчёте, а в реальной торговле. Первый же разрыв ликвидности или каскад стопов даёт нереалистичные сценарии обратного знака: стратегия, прошедшая все проверки, рассыпается на живых позициях, а не на бумаге.
Обвал качества генератора почти всегда объясняется тремя причинами: узким окном обучающих данных, отсутствием проверки на хвостах распределения и метриками, которые измеряют гладкость ряда вместо реалистичности. Плюс отсутствие контроля на переобучение под конкретную стратегию — генератор незаметно подстраивается под неё, и тест теряет смысл. Разбираем, как это закрывается.
Измеримый эффект: покрытие редких режимов и устойчивость стратегий
Эффект генеративных сценариев измеряется не красотой синтетических рядов, а тремя группами чисел: покрытие редких режимов, устойчивость стратегии при смене режима и воспроизводимость проверок. До внедрения тестовый контур собирался вручную — аналитик вырезал из истории несколько эпизодов, обычно последний обвал и пару спокойных лет, остальные режимы в проверки не попадали.
Генератор обучается на биржевых архивах и котировальных лентах (Refinitiv и внутренние источники) и синтезирует именно то, чего в выборке мало: разрывы ликвидности, смену корреляций, затяжные тренды с редкими откатами. Доля ручных сценариев в наборе проверок падает с примерно 70% до 10–15%, а покрытие редких событий растёт с единичных эпизодов до нескольких десятков на горизонт.
Устойчивость стратегии проверяется на сдвиге режима: один и тот же набор правил прогоняется на исторических и синтетических окнах, результат сравнивается по просадке, доле прибыльных периодов и поведению при отсутствии ликвидности. Видно не абстрактное «стратегия работает», а на каком именно режиме она ломается и какой запас нужен, чтобы это пережить.
Воспроизводимость держится на фиксации параметров инициализации генератора, версии набора данных, конфигурации обучения и порогов отбора сценариев. Любой прогон повторяется через месяц и даёт тот же набор проверок — динамика метрик перестаёт зависеть от того, кто именно собирал тесты и как расчертил историю.
Способы обучения модели: сравнение режимов и ограничений
Режим обучения определяет, какие сценарии генератор вообще способен выдать, поэтому сравнивать подходы стоит по покрытию редких событий, а не по правдоподобию отдельной траектории. На практике режимы не заменяют друг друга: обучение на исторических данных задаёт базовое распределение, агентная модель рынка добавляет реакцию на действия участников, гибридный подход удерживает экономические и регуляторные границы ряда.
| Подход | Когда подходит | Ограничения |
|---|---|---|
| Обучение на исторических данных | Есть длинная чистая история по инструменту, режим рынка стабилен | Воспроизводит только пройденные режимы, редкие события недоучтены, хвосты сглаживаются |
| Поверх агентной модели рынка | Нужен отклик на действия участников и смену правил торговли | Ошибка калибровки агентов переносится в сценарии, время расчёта растёт |
| Гибрид правил и обучения | Часть динамики описана регламентом, часть — статистикой | Границу между правилом и моделью приходится проводить вручную и пересматривать |
| Дообучение на данных заказчика | Есть свои сделки, котировки или портфель, важна специфика инструмента | Мало данных — риск переобучения, нужен контроль утечки будущего в признаки |
Комбинируем последовательно: история как база, поверх — агентная модель, финальный слой — дообучение на данных заказчика с замороженной частью весов. Совместимость проверяем не по одной метрике, а по набору: сохранение тяжёлых хвостов и кластеризации волатильности, отсутствие утечки будущего, устойчивость при смене режима. Если режим не проходит хотя бы одну проверку, в работу он не идёт — генератор остаётся воспроизводимым и объяснимым.
Как проходит внедрение: этапы инженерной работы
Генератор, обученный на сырых данных, выдаёт ряды, правдоподобные на графике и ломающиеся на проверке: теряются связи между активами, занижается частота резких движений. Поэтому порядок работ идёт от данных и критериев приёмки к модели, а не наоборот.
- Аудит данных и постановка задачи. Проверяем историю на пропуски, разрывы и смену рыночного режима. Сразу описываем, что генератор обязан воспроизводить: волатильность, автокорреляции, тяжёлые хвосты доходностей.
- Проектирование генератора. Подбираем архитектуру под число активов и объём истории, задаём размерность скрытого пространства и способ учёта режима рынка. Согласуем состав входов — только история или ещё внешние факторы.
- Обучение и стабилизация. Удерживаем баланс генератора и дискриминатора, добавляем регуляризацию против запоминания исторических участков: иначе модель пересказывает прошлое вместо новых сценариев.
- Валидация правдоподобия. Статистические проверки — форма распределения, автокорреляция, кластеризация волатильности; экономические — сохранение связей между активами. Отдельно смотрим отложенный период, которого модель не видела.
- Передача модели. Отдаём веса, скрипт генерации с фиксируемым источником случайности, описание входов и выходов, инструкцию по запуску: результат воспроизводится у вас без нашего участия.
- Приёмка результата и регламент. Сверяем метрики с порогами, зафиксированными до старта, разбираем расхождения. Дальше прописываем периодичность переобучения и метрики, по отклонению которых запускается обновление.
Комплект передачи: конфигурации, схемы и регламенты валидации
Комплект передачи собираем так, чтобы ваша команда могла воспроизвести обучение, проверить качество и переобучить модель без нашего участия. Это не презентация с графиками, а рабочий набор в вашем репозитории, по которому инженер повторит прогон и получит сопоставимый результат.
- Конфигурации обучения — параметры генератора и дискриминатора, состав признаков (доходности, объёмы, макро-индикаторы), окна истории, начальные значения генератора случайных чисел, критерий остановки. Прогон по этим файлам воспроизводится, а не «примерно похоже».
- Схема контура данных — откуда приходят котировки и сделки, как обрабатываются пропуски, выбросы и разрывы торгов, где лежат фиксированные срезы для повторяемых проверок.
- Регламент валидации — что считаем правдоподобным сценарием: форма распределения доходностей, хвостовые события, автокорреляция, поведение на периодах, которых модель не видела. Плюс пороги, при которых сценарий отклоняется.
- Документация модели — архитектура, границы применимости, известные слабые места (недооценка резких разворотов) и перечень режимов рынка, на которых модель проверена.
- Разграничение доступа — роли на данные, веса и журналы экспериментов: кто меняет конфигурацию, кто запускает обучение, кто только читает результаты.
- Регламент переобучения — триггеры (сдвиг распределения, рост расхождения с реальными данными), периодичность, порядок прогона и откат к предыдущим весам.
- Инструкция по запуску — развёртывание окружения, генерация сценариев и проверка по критериям приёмки.
Комплект остаётся у вас и не зависит от нашей инфраструктуры: обновлять конфигурации, менять пороги валидации и запускать переобучение можно своими силами, а мы подключаемся там, где нужна доработка.
Кейс: как выросло покрытие редких режимов в тестах
Заказчик — команда риск-контроля по рыночным позициям. Набор тестов для модели риска собирался вручную: аналитики вырезали окна из истории и достраивали редкие режимы правками. Пока рынок был спокойным, это работало, но обвалы, разрывы ликвидности и затяжные боковики попадали в набор единичными примерами — порядка 8% сценариев. Проверки выглядели зелёными, а на живом рынке модель уходила в отрицательные прогнозы.
Мы обучили генератор рыночных сценариев на истории котировок и заявок, разметив данные по режимам, и добавили отбраковку: сценарий попадал в набор только после проверок на реалистичность — сохранение кластеров волатильности, форма распределения доходностей, отсутствие вырожденных траекторий. Стабильность обучения держали балансировкой редких режимов в выборке и остановкой по расхождению распределений, иначе генератор схлопывался в один режим.
| Метрика | До | После |
|---|---|---|
| Покрытие редких режимов в наборе | 8% | 74% |
| Доля отбракованных синтетических сценариев | 61% | 12% |
| Время сборки набора тестов | 9 рабочих дней | 1 день |
| Прогоны обучения, завершившиеся вырождением | 4 из 5 | 1 из 12 |
Отдельный эффект — на процесс. Найденный дефект фиксируется сценарием и остаётся в наборе Портфель-Стресс навсегда, повторная проверка больше не требует ручной реконструкции рынка. Отбраковка перестала быть узким местом: инженер разбирает только спорные случаи, а не весь поток генерации.
Чем нейросетевой подход отличается от статистических моделей?
Статистическая модель задаёт форму распределения заранее и оценивает несколько параметров — так устроена, например, методология RiskMetrics. Обучаемый генератор (GAN — один из вариантов) форму не задаёт, а восстанавливает её из данных, поэтому держит зависимости, которые в формулу не записать: совместные движения активов, асимметрию, тяжёлые хвосты.
Границу применимости определяют три вещи: объём истории, размерность задачи и требование к объяснимости. На коротком ряде с малым числом сигналов статистика устойчивее, а её параметры можно прочитать и защитить перед риск-комитетом. Когда сценариев десятки и они должны быть согласованы между собой, ручная настройка связей превращается в отдельный проект.
Обучаемый генератор нужен там, где важны не средние, а совместные редкие события: одновременный рост волатильности и падение ликвидности, разрыв корреляций в стрессе, смена режима рынка. Критерий проверки один — воспроизводит ли модель распределения из кризисных эпизодов истории и остаётся ли устойчивой между запусками.
Типовые ошибки выбора — обучать генератор на выборке, которой хватает на два-три параметра; судить о качестве по среднему, не проверяя хвосты; терять воспроизводимость сценариев после смены модели. Обратная ошибка — оставлять статистику там, где нужны многомерные совместные сценарии: траектории выходят гладкими, а стрессовых сюжетов в них нет.
Технические сомнения: устойчивость обучения и проверка правдоподобия
Коллапс режимов — основной отказ при обучении генератора: он находит несколько удачных траекторий и начинает тиражировать их, а дискриминатор перестаёт их различать. Ошибка обучения при этом выглядит здоровой, поэтому мы следим не за ней, а за разнообразием выборки: распределение доходностей, доля уникальных путей, разброс сценариев внутри одного рыночного режима. Как только множество схлопывается, обучение перезапускается с другой начальной настройкой и штрафом за однообразие.
Проверка правдоподобия идёт на отложенном отрезке истории, который модель не видела. Сгенерированные сценарии сравниваются с реальными по статистикам, значимым для риска: волатильность, автокорреляция, тяжёлые хвосты, поведение на затяжных просадках. Совпадения средних недостаточно — смотрим, воспроизводит ли модель редкие события, на которых обычно и ломаются стресс-тесты.
Критерии правдоподобия и границы применимости фиксируем письменно и согласуем с вашей риск-командой до старта обучения. Внутренний контроль тогда проходит по понятному чек-листу, а не по впечатлению от показательной демонстрации.
Как понять, что модель переобучилась на узком отрезке истории?
Обучаем на одном периоде, а проверяем на другом — в идеале на кризисе, которого в обучающей выборке не было. Если качество на контрольном периоде держится, модель выучила закономерности рынка, а не конкретный эпизод. Ограничение сложности сети и регуляризация снижают риск подгонки под шум.
Что делать, если исторических данных мало?
Дополняем редкую историю синтетикой, обучаем сразу на нескольких рыночных режимах и переносим веса с более длинной выборки по смежному инструменту. На выходе генератор работает и там, где реальных наблюдений почти нет, — например, на глубоких кризисных сценариях.
Обсудим задачу: с чего начнём и что потребуется от вас
Чтобы оценка задачи опиралась на факты, а не на предположения, нужен короткий разбор: какие рыночные сценарии должна выдавать GAN-модель, на какой истории она учится и как вы будете проверять результат. Ниже — что подготовить со стороны заказчика; ничего сверх этого на первом шаге не потребуется.
- Постановка и режимы. Какие сценарии генерируем — трендовые, боковые, стрессовые; горизонт, шаг по времени и что считается правдоподобным результатом.
- Исходные данные. История котировок или сделок: глубина, частота, источники, известные пропуски и выбросы. Чем раньше увидим реальные выгрузки, тем точнее оценим сроки.
- Доступы и согласования. Тестовый контур, учётные записи, правила работы с чувствительными данными, нужно ли обезличивание и кто подписывает доступ.
- Ограничения. Внутренние и регуляторные требования: что с данными делать нельзя и где результат обязан оставаться внутри вашего контура.
- Ответственный за приёмку. Кто принимает работу и по каким критериям — сравнение с историей, статистические показатели, экспертная оценка аналитиков.
- Технический контакт. Инженер или аналитик, который ответит на уточняющие вопросы по данным, форматам выгрузки и вашей инфраструктуре.
После этого вернёмся с планом работ: этапы, сроки, состав команды и точки, где вы видите промежуточный результат. Старт проекта проходит быстро, когда данные и доступы готовы; если нет — первым этапом станет их подготовка, и это мы тоже фиксируем заранее. Опишите задачу — соберём оценку и план под ваш случай.







