Разработка AI-системы оптимизации портфеля

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-системы оптимизации портфеля
Сложная
~1-2 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    854
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка AI-системы оптимизации портфеля

Portfolio optimization — нахождение оптимального распределения капитала между активами. Классический Markowitz (mean-variance) страдает от estimation error: портфели сверхчувствительны к входным параметрам. AI-подходы дают более робастные решения через bayesian estimation, machine learning и reinforcement learning.

Проблемы классического Markowitz

Estimation error: Expected returns очень плохо оцениваются исторически. Стандартное отклонение оценки среднего для акции: σ/√T. Для 10-летней истории: σ ≈ 20%, √T = √2520 = 50, SE = 0.4% в день = 10% в год. При таком шуме — оптимизация гонится за шумом.

Концентрированные портфели: MVO склонен к corner solutions: вкладывает всё в несколько активов с лучшим историческим Sharpe. Это overfitting по историческим данным.

Stale covariances: Использование стандартной ковариационной матрицы при высоком числе активов → плохо обусловленная матрица, численно нестабильная инверсия.

AI-улучшения в portfolio optimization

1. Bayesian Expected Returns (Black-Litterman):

from pypfopt import BlackLittermanModel, risk_models, expected_returns

# Market equilibrium returns (CAPM)
market_prices = ...
mu = expected_returns.capm_return(prices)

# Investor views: 'AAPL will outperform MSFT by 3%'
viewdict = {'AAPL': 0.05, 'MSFT': 0.02}
bl = BlackLittermanModel(cov_matrix, pi=mu, absolute_views=viewdict)
bl_returns = bl.bl_returns()

Black-Litterman объединяет prior (рыночное равновесие) с investor views, давая более стабильные ожидания.

2. ML Expected Returns: XGBoost/LSTM для предсказания forward returns на горизонте оптимизации (1 месяц, квартал). Модель использует momentum, value, quality факторы. Предсказанные returns как μ вместо исторических средних.

3. Shrinkage covariance:

from sklearn.covariance import LedoitWolf
lw = LedoitWolf()
cov_matrix = lw.fit(returns).covariance_

Ledoit-Wolf shrinkage даёт лучшую оценку ковариации при большом числе активов.

Альтернативные objective functions

Вместо max Sharpe (mean-variance):

Minimum Variance:

from pypfopt import EfficientFrontier
ef = EfficientFrontier(None, cov_matrix)  # None = игнорируем returns
ef.min_volatility()
weights = ef.clean_weights()

Не использует expected returns → не страдает от estimation error. Работает лучше in-sample.

Risk Parity / Equal Risk Contribution: Каждый актив вносит одинаковый вклад в общий риск портфеля:

from pypfopt import risk_models, EfficientFrontier
# Или через специализированную библиотеку riskfolio-lib
import riskfolio as rp
port = rp.Portfolio(returns=returns_df)
w = port.optimization(model='RP', rm='MV', obj='MinRisk')

Risk parity популярен в hedge funds (Bridgewater All Weather — классический пример).

Maximum Diversification: Maximize ratio of weighted average volatility к portfolio volatility. Теоретически максимизирует пользу от диверсификации.

RL для динамической аллокации

RL-агент управляет портфелем как decision process:

  • State: returns, volatility, macro factors, portfolio weights
  • Action: delta weights (как изменить аллокацию)
  • Reward: risk-adjusted return (Sharpe increment)

Фреймворки:

# FinRL: специализированный фреймворк для RL в торговле
from finrl.meta.env_portfolio_optimization import StockPortfolioEnv
from stable_baselines3 import PPO

env = StockPortfolioEnv(df=data, stock_dim=30, ...)
model = PPO("MlpPolicy", env)
model.learn(total_timesteps=100000)

RL-агент естественно учитывает transaction costs при ребалансировке, что классическая оптимизация игнорирует.

Constraints и практические ограничения

Реальные ограничения:

ef = EfficientFrontier(mu, cov_matrix)

# Границы весов
ef.add_constraint(lambda w: w >= 0)        # no shorting
ef.add_constraint(lambda w: w <= 0.15)     # max 15% per asset

# Секторные ограничения
sector_weights = {sector: sum(w[i] for i in sector_indices)}
ef.add_constraint(lambda w: sector_weights['tech'] <= 0.30)

# ESG: исключение компаний с ESG score < threshold
excluded = esg_screener(universe)
ef.add_constraint(lambda w: w[excluded] == 0)

Transaction Costs-aware optimization:

# При ребалансировке учитываем стоимость трейдов
tc = 0.001  # 10 bps
new_weights, metrics = optimize_with_tc(
    current_weights, target_weights, returns, cov, tc
)

Backtesting портфельной стратегии

Expanding window simulation:

for rebalance_date in rebalance_dates:
    # Обучение на данных до rebalance_date
    train_returns = returns[returns.index < rebalance_date]

    # Оптимизация
    weights = optimize_portfolio(train_returns)

    # Применение до следующей ребалансировки
    portfolio_returns.append(
        apply_weights(returns[next_period], weights)
    )

Метрики: Sharpe, Calmar, Max Drawdown, Turnover (% портфеля торгуется при ребалансировке), Transaction Cost Drag.

Сроки: Markowitz + Black-Litterman с monthly ребалансировкой — 4-6 недель. RL-агент + risk parity + TC-aware optimization с backtesting — 3-4 месяца.