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

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка AI-системи оптимізації портфеля
Складний
~1-2 тижні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

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

Оптимізація портфеля — пошук оптимального розподілу капіталу між активами. Класичний 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. Це переобладання до історичних даних.

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 буде перевершувати MSFT на 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: Максимізувати ratio середньої зваженої волатильності до волатильності портфеля. Теоретично максимізує вигоду диверсифікації.

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 місяці.