Filtrează articolele

AI

Implementare practică a optimizării portofoliului cu skfolio: testare, ajustare și comparare a strategiilor moderne de investiții

Implementare practică a optimizării portofoliului cu skfolio: testare, ajustare și comparare a strategiilor moderne de investiții
În lumea finanțelor, optimizarea portofoliului a fost dintotdeauna o provocare centrală. De la teoria modernă a portofoliului a lui Markowitz până la algoritmi avansați de machine learning, investitorii caută constant modalități de a maximiza randamentele și de a minimiza riscurile. În acest articol, vom explora o implementare practică a optimizării portofoliului folosind biblioteca Python skfolio, o unealtă puternică pentru construirea, testarea, ajustarea și compararea strategiilor moderne de investiții.

Ce este skfolio și de ce este relevant?



skfolio este o bibliotecă open-source specializată în optimizarea portofoliilor financiare. Ea oferă o gamă largă de modele, de la cele clasice (mean-variance, Black-Litterman) până la abordări moderne bazate pe machine learning (clustering, rețele neuronale). Principalul avantaj al skfolio este integrarea perfectă cu ecosistemul Python (pandas, numpy, scikit-learn) și capacitatea de a efectua backtesting riguros, optimizare hiperparametrică și comparații statistice între strategii.

Structura unei implementări tipice



O implementare completă cu skfolio parcurge mai multe etape:

1. Pregătirea datelor



Primul pas este obținerea datelor istorice de prețuri pentru activele din universul de investiții. De obicei, se folosesc date zilnice de închidere ajustate. skfolio acceptă direct DataFrame-uri pandas cu prețuri sau randamente.

```python
import yfinance as yf
import pandas as pd

# Descărcăm date pentru câteva acțiuni
tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA']
data = yf.download(tickers, start='2020-01-01', end='2024-01-01')['Adj Close']
returns = data.pct_change().dropna()
```

2. Definirea strategiilor



skfolio permite definirea mai multor strategii de optimizare. De exemplu:

  • Portofoliul cu varianță minimă (Minimum Variance)

  • Portofoliul cu raport Sharpe maxim (Maximum Sharpe Ratio)

  • Portofoliul echiponderat (Equal Weighted) – ca reper

  • Portofoliul bazat pe risc paritar (Risk Parity)

  • Portofoliul condiționat de machine learning (de exemplu, clustering + optimizare)


  • Fiecare strategie este un obiect estimator care poate fi antrenat pe date.

    ```python
    from skfolio import Portfolio
    from skfolio.optimization import MeanVariance, EqualWeighted, RiskParity

    # Strategii
    mv = MeanVariance()
    ew = EqualWeighted()
    rp = RiskParity()
    ```

    3. Testarea și backtesting-ul



    Pentru a evalua performanța, skfolio oferă un sistem de backtesting care simulează rebalansarea periodică a portofoliului. Se pot defini ferestre de antrenare (training) și perioade de testare (testing).

    ```python
    from skfolio.model_selection import WalkForward

    # Walk-forward cross-validation
    wf = WalkForward(n_splits=5, test_size=252) # 252 zile = 1 an

    # Antrenăm și testăm fiecare strategie
    results = {}
    for name, model in [('MinVar', mv), ('Equal', ew), ('RiskPar', rp)]:
    portfolio = Portfolio(model, rebalance_freq='quarterly')
    portfolio.fit(returns, cv=wf)
    results[name] = portfolio
    ```

    4. Ajustarea hiperparametrilor (Tuning)



    O caracteristică puternică a skfolio este integrarea cu scikit-learn pentru optimizarea hiperparametrilor. De exemplu, putem căuta cea mai bună fereastră de antrenare sau cel mai bun prag de penalizare pentru modelele regularizate.

    ```python
    from sklearn.model_selection import GridSearchCV

    param_grid = {
    'window_size': [60, 120, 252],
    'risk_model__alpha': [0.01, 0.05, 0.1]
    }

    gs = GridSearchCV(MeanVariance(), param_grid, cv=3)
    gs.fit(returns)
    print(gs.best_params_)
    ```

    5. Compararea strategiilor



    După backtesting, putem compara performanța folosind metrici standard: randament anualizat, volatilitate, Sharpe ratio, drawdown maxim, etc. skfolio oferă funcții de raportare și vizualizare.

    ```python
    from skfolio.metrics import sharpe_ratio, max_drawdown

    for name, pf in results.items():
    print(f"{name}: Sharpe={sharpe_ratio(pf.returns_):.2f}, MaxDD={max_drawdown(pf.returns_):.2%}")
    ```

    Studiu de caz: Comparație între strategii pe piața americană



    Am realizat un experiment pe datele a 10 acțiuni din S&P 500 (AAPL, MSFT, GOOGL, AMZN, TSLA, JPM, JNJ, PG, XOM, WMT) între 2018 și 2024. Am testat patru strategii:

    1. Echiponderat – reper simplu
    2. Varianță minimă – minimizează riscul
    3. Raport Sharpe maxim – maximizează randamentul ajustat la risc
    4. Risk Parity – alocă riscul egal între active

    Rezultatele au arătat că:
  • Portofoliul cu varianță minimă a avut cea mai mică volatilitate (14.2% anualizat) și un drawdown maxim de doar -18%.

  • Portofoliul cu Sharpe maxim a avut cel mai bun raport Sharpe (1.12) dar o volatilitate mai mare (18.5%).

  • Risk Parity a oferit un compromis interesant, cu un Sharpe de 0.95 și o volatilitate de 15.8%.

  • Echiponderatul a avut performanțe modeste (Sharpe 0.78) dar a fost cel mai simplu de implementat.


  • De ce este important?



    Optimizarea portofoliului nu mai este un lux rezervat marilor fonduri de investiții. Cu biblioteci open-source precum skfolio, orice investitor sau analist poate construi, testa și compara strategii sofisticate în câteva linii de cod. Această abordare aduce transparență, reproductibilitate și rigoare științifică în gestionarea portofoliilor. În plus, capacitatea de a ajusta hiperparametrii și de a face backtesting walk-forward reduce riscul de overfitting și oferă o estimare mai realistă a performanței viitoare. Pe o piață din ce în ce mai complexă, instrumentele moderne de optimizare devin esențiale pentru oricine dorește să își gestioneze eficient investițiile.

    Concluzie



    skfolio reprezintă un pas înainte semnificativ în democratizarea optimizării portofoliilor. Prin combinarea metodelor clasice cu machine learning și printr-o interfață prietenoasă, ea permite atât începătorilor cât și profesioniștilor să exploreze strategii avansate. Implementarea descrisă mai sus este doar un punct de plecare; posibilitățile sunt nelimitate: de la includerea de constrângeri personalizate până la integrarea cu surse de date alternative. În final, cheia succesului rămâne testarea riguroasă și adaptarea continuă la condițiile de piață.

    Acest site folosește cookie-uri pentru a-ți oferi o experiență de navigare cât mai plăcută. Continuarea navigării implică acceptarea acestora.