Optimisation de portefeuille : autres approches

Introduction à l'analyse de portefeuille en Python

Charlotte Werger

Data Scientist

Risque et rendement attendus à partir des données historiques

$$

  • Les rendements moyens historiques et la variance historique du portefeuille n'estiment pas parfaitement mu et Sigma
  • Les pondérations issues de l'optimisation ne sont donc pas assurées de bien fonctionner 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 chronologiques qui évoluent dans le temps

Introduction à l'analyse de portefeuille en Python

Rendements à lissage exponentiel

$$

  • Il faut de meilleurs indicateurs de risque et de rendement
  • Le lissage exponentiel accorde plus de poids aux données récentes
  • Moyenne mobile exponentielle sur le graphique : poids maximal à l'observation t-1

Pondérations dans le calcul des rendements à lissage exponentiel

Introduction à l'analyse de portefeuille en Python

Covariance à lissage exponentiel

$$

  • La matrice de covariance exponentielle : plus de poids aux données récentes
  • Sur le graphique : volatilité à lissage exponentiel en noir, suit mieux la volatilité réelle que la volatilité standard en bleu

$$ Comparaison entre covariance à lissage exponentiel et covariance normale vs la covariance réelle

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

Rendements à lissage exponentiel

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 à lissage exponentiel

from pypfopt import risk_models
# Covariance à lissage exponentiel
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introduction à l'analyse de portefeuille en Python

Intégrer le risque de baisse dans l'optimisation

$ $

  • Rappel du ratio de Sortino : il utilise seulement la variance des rendements négatifs
  • PyPortfolioOpt permet d'utiliser la semicovariance dans l'optimisation ; c'est 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...