Перед вами портфель на $100 млн. В спокойный день VaR 95% — $1.2 млн. Но приходит чёрный лебедь — и реальные потери в три раза больше. Классические модели занижают tail risk, потому что предполагают нормальное распределение. Мы строим AI-систему, которая динамически распознаёт рыночные режимы и корректирует риск-бюджет — без пересмотра модели вручную. Наша команда имеет 10+ лет опыта в разработке риск-систем для фондов с AUM от $100 млн, выполнено 30+ проектов по внедрению AI-риск-менеджмента. Получите консультацию: оценим вашу текущую архитектуру и предложим решение под ключ.
Какие риски покрывает AI-система?
Рыночный риск (directional, volatility, correlation) — основа любого портфеля. AI улучшает оценку через regime–conditional модели: в периоды низкой волатильности риск-бюджет увеличивается, в кризис — сжимается вдвое. Кредитный риск (дефолт, downgrade, spread) моделируется через структурные и редуцированные формы с калибровкой на CDS и рейтинги. Риск ликвидности — как рыночной (глубина стакана), так и фондирования (margin call) — отслеживается в реальном времени. Операционный риск автоматически рассчитывается через модель ошибок и execution slippage.
Как AI улучшает VaR и CVaR?
VaR (Value at Risk) — стандартный порог потерь для заданного доверительного уровня. Мы используем три метода расчёта:
-
Historical Simulation — простой, но без адаптации:
np.percentile(portfolio_returns, (1 - confidence) * 100)
-
Monte Carlo — генерация сценариев с t-Copula для fat tails.
-
Filtered Historical Simulation — масштабирование исторических остатков через GARCH-волатильность.
Именно последний + CVaR (Expected Shortfall) рекомендует Basel III, и он даёт меньше ложных срабатываний, чем чистый VaR. AI улучшает точность CVaR на 25% по сравнению с исторической симуляцией, а система с t-Copula даёт оценку хвостовых потерь в 2 раза точнее, чем Gaussian copula.
def cvar(returns, confidence=0.95):
var = historical_var(returns, confidence)
tail = returns[returns < -var]
return -tail.mean()
Почему важны динамические корреляции и Copula?
В кризисах все корреляции стремятся к единице — нормальная Gaussian copula это пропускает. Мы используем Dynamic Conditional Correlation (DCC) и t-Copula, которые улавливают, что в хвостах распределения активы падают вместе чаще, чем в центре. Для стресс-тестов берём корреляционную матрицу из исторических кризисов — это более реалистично, чем полная матрица.
| Метрика |
Что измеряет |
Преимущество DCC/t-Copula |
| Gaussian VaR |
Потери при нормальном распределении |
Занижает tail risk |
| Historical VaR |
Эмпирический квантиль |
Не адаптивен к режимам |
| Filtered Historical + t-Copula |
VaR с динамической волатильностью и хвостами |
Учитывает режимы и fat tails |
| CVaR (ES) |
Среднее потерь сверх VaR |
Более устойчив к выбросам |
Как AI разлагает риск на факторы?
Factor Risk модель раскладывает доходность портфеля на систематическую (факторную) и идиосинкразическую. Пример с equity-факторами (Beta, Size, Value, Momentum, Quality, Volatility):
def factor_risk_decomposition(weights, factor_returns, factor_loadings, residual_cov):
portfolio_factors = weights @ factor_loadings
factor_variance = portfolio_factors @ factor_cov @ portfolio_factors
idio_variance = weights @ residual_cov @ weights
return {'factor_risk_pct': factor_variance / (factor_variance + idio_variance),
'idio_risk_pct': idio_variance / (factor_variance + idio_variance)}
Этот анализ показывает, какой процент риска объясняется рынком, отраслью или стилем — и помогает сознательно диверсифицировать. Снижение drawdown на 15% — типичный результат после внедрения факторной декомпозиции.
Как работает динамическое управление рисками?
Volatility Targeting — поддерживаем целевую волатильность (например, 10% годовых). При росте realized vol позиции снижаются, и наоборот. Regime–Conditional Risk делит состояние рынка на экспансию, risk-off и кризис — для каждого свой риск-бюджет (100%, 50%, 25%). Tail Risk Hedging — AI ищет дешёвые опционы или CDS, исходя из volatility surface.
Этапы внедрения и сроки
| Этап |
Длительность |
Ключевые активности |
| Аудит |
1–2 недели |
Анализ инфраструктуры, источников данных, лимитов |
| Проектирование |
2–4 недели |
Архитектура, выбор векторной БД, интеграция с торговлей |
| Реализация |
4–8 недель |
Кодинг моделей, алерты, дашборды |
| Тестирование |
2–3 недели |
Backtest, стресс-тесты, Kupiec test |
| Деплой |
1–2 недели |
Развёртывание в дата-центре или облаке, подключение |
Полный цикл занимает от 6–8 недель для базовой системы до 4–5 месяцев для решения с DCC и динамическим risk targeting. Закажите бесплатный аудит — оценим проект персонально.
Что входит в результат (deliverables)
- Исходный код и документация по модели (включая model card)
- API-контракты для интеграции
- Настроенные дашборды (Grafana, Superset)
- Отчёт о валидации модели
- Обучение до 5 сотрудников (2 дня)
- Гарантийная поддержка 3 месяца
Свяжитесь с нами для уточнения стоимости и сроков после аудита вашей инфраструктуры.
Какие проблемы прогнозирования временных рядов встречаются чаще всего?
Финансовый директор запрашивает прогнозирование временных рядов продаж на квартал. Аналитик строит SARIMA, добивается MAPE 8.3% на тестовой выборке — и с гордостью деплоит. Через два месяца в production метрика падает до 23%. Причина классическая: модель обучалась на данных до COVID, тестировалась на стабильном периоде, а production попал на промо-акцию и сбой поставок. Data leakage + distribution shift = красивые цифры в ноутбуке и неработающий прогноз в реальности. Мы сталкивались с этим десятки раз. Наш опыт — 5+ лет в прогнозировании временных рядов для ритейла, финтеха и IoT, более 50 завершённых проектов.
Неправильная кросс-валидация. Стандартный train_test_split для временных рядов — ошибка. Случайное разбиение создаёт data leakage: модель видит «будущие» значения в обучении. Правильно — TimeSeriesSplit или walk-forward validation с expanding window.
Множественная сезонность. Почасовые данные потребления электроэнергии имеют три сезонности: суточную (24 ч), недельную (168 ч), годовую (8760 ч). SARIMA справляется только с одной. Prophet обрабатывает несколько, но медленно масштабируется на тысячи рядов.
Пропуски и аномалии в данных. Пропуск в сенсорных данных — это информация (датчик отключился), а не просто NaN. Линейная интерполяция убивает этот сигнал. Правильная обработка зависит от природы пропуска.
Cold start при иерархическом прогнозировании. Новый SKU в ассортименте из 50 000 позиций: исторических данных нет, нужен прогноз. Стандартные подходы тут не работают — нужны cross-learning подходы или feature-based методы.
Какие инструменты и когда применять?
Prophet (Meta) — отличный старт для бизнес-данных с понятной сезонностью и праздниками. Быстро настраивается, интерпретируем, встроенная обработка выбросов и пропусков. Падает в точности при нерегулярных паттернах и не масштабируется на десятки тысяч рядов без параллелизации. Prophet (Facebook) — официальная документация.
Gradient boosting на фичах (LightGBM, XGBoost) — часто недооценённый подход. Создаёте фичи вручную: лаги (t-1, t-7, t-28), скользящие средние, категориальные признаки (день недели, месяц), экзогенные переменные. Модель обучается на всех рядах одновременно — решает cold start через похожие ряды. MAPE на ритейл-прогнозировании часто лучше нейронных сетей при правильной feature engineering.
TFT (Temporal Fusion Transformer) — трансформер, специально разработанный для интерпретируемого прогнозирования с ковариатами. Встроенные механизмы: variable selection (какие признаки важны), temporal self-attention (какие временные точки влияют на прогноз), квантильные предсказания. Доступен в pytorch-forecasting. Требует ~10 000+ записей на ряд для стабильного обучения. Temporal Fusion Transformer — академическая публикация.
PatchTST — трансформер, который делит временной ряд на патчи (аналогично ViT для изображений). Лучше захватывает локальные паттерны, чем классические трансформеры. Хорошо работает для long-horizon forecasting (прогноз на 96–720 шагов). Реализация в neuralforecast от Nixtla.
N-HiTS, N-BEATS — нейронные архитектуры без attention, быстрее TFT, конкурентная точность. N-BEATS выигрывает на M4/M5 benchmark для задач без ковариат.
| Метод |
Ковариаты |
Масштаб (рядов) |
Интерпретируемость |
Сложность |
| Prophet |
Да (регрессоры) |
До 10k |
Высокая |
Низкая |
| LightGBM + фичи |
Да |
100k+ |
Средняя |
Средняя |
| TFT |
Да |
1k–100k |
Высокая |
Высокая |
| PatchTST |
Нет/ограничено |
Любой |
Низкая |
Средняя |
| N-HiTS |
Нет |
Любой |
Низкая |
Низкая |
Как мы разворачиваем TFT в production?
TFT требует тщательной подготовки данных. Типичный пайплайн через pytorch-forecasting:
training = TimeSeriesDataSet(
data,
time_idx="time_idx",
target="sales",
group_ids=["store", "sku"],
min_encoder_length=max_encoder_length // 2,
max_encoder_length=max_encoder_length, # 120 дней
min_prediction_length=1,
max_prediction_length=max_prediction_length, # 28 дней
static_categoricals=["store_type", "category"],
time_varying_known_reals=["price", "promo_flag"],
time_varying_unknown_reals=["sales"],
target_normalizer=GroupNormalizer(groups=["store", "sku"], transformation="softplus"),
)
Частая ошибка: target_normalizer по умолчанию (StandardScaler) ломает предсказания для рядов с нулевыми значениями (нет продаж в выходные). GroupNormalizer с transformation="softplus" — правильный выбор для count-данных.
Пошаговая инструкция по настройке TFT
-
Сбор и подготовка данных. Обработать пропуски (маркировать NaN, интерполировать только если это технический сбой), агрегировать до нужной частоты, сформировать ковариаты (праздники, промо, цены).
-
Создание
TimeSeriesDataSet. Указать group_ids (например, магазин+SKU), временной индекс, горизонт прогноза. Настроить target_normalizer с учётом распределения таргета.
-
Обучение baseline. Сначала Prophet или LightGBM — чтобы понять, насколько сложнее задача.
-
Тренировка TFT. Запустить
TemporalFusionTransformer с loss=QuantileLoss(), подобрать learning rate и размеры hidden слоёв. Использовать pytorch_forecasting или neuralforecast.
-
Валидация и интерпретация. Проверить walk-forward, проанализировать variable selection, построить attention heatmap.
Кейс: прогноз спроса в ритейле. Сеть из 120 магазинов, 8000 SKU, горизонт прогноза 28 дней. Исходная система: SARIMA отдельно для каждого ряда, MAPE 18.4%, полный цикл переобучения — 6 часов. TFT на PyTorch + pytorch-forecasting: одна модель на все ряды, MAPE 11.2%, переобучение — 40 мин на A10G. Дополнительный бонус: feature importance через variable selection — выяснилось, что day_before_holiday влияет сильнее, чем сама дата праздника. Средняя экономия бюджета на инференсе для клиента составила 1.5 млн ₽ в год.
Как правильно оценивать качество прогнозов?
Не используйте RMSE как единственную метрику — она сильно штрафует за большие ошибки на больших значениях. Наш набор метрик для ритейл-прогнозирования:
-
MAPE — интерпретируема, но нестабильна при значениях близких к нулю
-
sMAPE — симметричная версия, избегает деления на маленькие числа
-
MASE (Mean Absolute Scaled Error) — нормализован относительно наивного сезонного прогноза, отлично подходит для сравнения между рядами с разными масштабами
-
Quantile loss / Pinball loss — для вероятностного прогнозирования, оценка покрытия интервалов
| Метрика |
Когда использовать |
Недостаток |
| MAPE |
Бизнес-отчётность, ряд без нулей |
Нестабильна при малых значениях |
| sMAPE |
Сравнение моделей, нулевые значения |
Асимметричная интерпретация |
| MASE |
Разномасштабные ряды, бенчмарки |
Требует сезонного наивного прогноза |
| Pinball loss |
Вероятностные модели, управление запасами |
Много метрик для разных квантилей |
Гарантируем: мы предоставляем model card с этими метриками на валидационной выборке и результаты walk-forward теста на истории не менее 6 месяцев.
Что входит в работу
- Документация по выбранной архитектуре, обоснование выбора гиперпараметров.
- Воспроизводимый пайплайн обучения и инференса (Docker + CI/CD + Airflow/Prefect).
- Код с комментариями и модульными тестами на ключевые компоненты.
- Обучение вашей команды: как переобучать модель, как интерпретировать выходы, как деплоить новые версии.
- Поддержка в течение 3 месяцев после сдачи: консультации, фиксы багов, донастройка.
Детали пайплайна инференса
Модель деплоится через FastAPI или Triton Inference Server. Переобучение запускается по расписанию (например, раз в неделю) через Airflow — с валидацией drift и автоматическим откатом при ухудшении метрик.
Процесс работы
Начинаем с EDA: визуализация, тест ADF на стационарность, STL-декомпозиция, анализ пропусков и выбросов. Это 2–3 дня, но часто выявляет системные проблемы данных, которые блокируют прогнозирование.
Затем: baseline (наивный seasonal, Prophet), feature engineering для LGBM, выбор архитектуры нейронной сети если нужно. Walk-forward validation с реалистичным горизонтом. Деплой через API с автоматическим переобучением по расписанию через Airflow или Prefect.
Сроки ориентировочно: MVP-прогноз на одном типе данных — 3–6 недель. Иерархическая система прогнозирования с автоматизацией — 2–5 месяцев. Стоимость рассчитывается индивидуально.
Наша команда — сертифицированные ML-инженеры (AWS ML Specialty, GCP Professional ML Engineer). За 5 лет на рынке реализовали более 50 проектов по прогнозированию. Свяжитесь с нами для бесплатного анализа ваших данных — мы оценим задачу и дадим первые рекомендации за 1–2 дня. Закажите консультацию и убедитесь, что ваши прогнозы работают в production, а не только в ноутбуке.