Optimisation de portefeuille alternative

Introduction à l’analyse de portefeuille en Python

Charlotte Werger

Data Scientist

Risque et rendement attendus à partir de l’historique

$$

  • Les rendements moyens historiques ou la variance de portefeuille historique sont des estimations imparfaites de mu et Sigma
  • Les pondérations issues de l’optimisation ne garantissent pas de bonnes performances sur des données futures

$$ Blague « si l’histoire se répète »

Introduction à l’analyse de portefeuille en Python

Données historiques

Séries temporelles qui évoluent dans le temps

Introduction à l’analyse de portefeuille en Python

Rendements pondérés exponentiellement

$$

  • Besoin de meilleures mesures de risque et de rendement
  • Le pondéré exponentiel donne plus d’importance aux données récentes
  • EMA sur le graphique : poids maximal sur l’observation t-1

Poids dans le calcul des rendements pondérés exponentiellement

Introduction à l’analyse de portefeuille en Python

Covariance pondérée exponentiellement

$$

  • La matrice de covariance exponentielle donne plus de poids aux données récentes
  • Sur le graphique : la volatilité pondérée exponentiellement (noir) suit mieux la volatilité réelle que la volatilité standard (bleu)

$$ Comparaison de la covariance pondérée exponentiellement et de la covariance normale à la covariance réelle

1 Source : https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Introduction à l’analyse de portefeuille en Python

Rendements pondérés exponentiellement

from pypfopt import expected_returns
# Moyenne mobile exponentielle
mu_ema = expected_returns.ema_historical_return(df, 
                         span=252, frequency=252)
print(mu_ema)
symbol
XOM     0.103030
BBY     0.394629
PFE     0.186058
Introduction à l’analyse de portefeuille en Python

Covariance pondérée exponentiellement

from pypfopt import risk_models
# Covariance pondérée exponentiellement
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introduction à l’analyse de portefeuille en Python

Utiliser le risque de baisse dans l’optimisation

$ $

  • Rappel du ratio de Sortino : il n’utilise que la variance des rendements négatifs
  • PyPortfolioOpt permet d’utiliser la semicovariance dans l’optimisation, une mesure du risque de baisse :

$ $ Calcul du risque de baisse

Introduction à l’analyse de portefeuille en Python

Semicovariance dans PyPortfolioOpt

Sigma_semi = risk_models.semicovariance(df,     
                        benchmark=0, frequency=252)

print(Sigma_semi)
         XOM         BBY          MA         PFE
XOM     0.018939    0.008505    0.006568    0.004058
BBY     0.008505    0.016797    0.009133    0.004404
MA      0.006568    0.009133    0.018711    0.005373
PFE     0.004058    0.004404    0.005373    0.008349
Introduction à l’analyse de portefeuille en Python

Passons à la pratique !

Introduction à l’analyse de portefeuille en Python

Preparing Video For Download...