Optimisation de portefeuille : Modèle Mean – Variance de Markowitz (avec R)

Sur le marché des capitaux, la sélection d’un titre ou actif dans lequel investir n’a jamais été une question simple. C’est au début des années 50, que H. Markowitz avait proposé le critère d’analyse moyenne – variance et  dès lors, avait jeté les bases de ce qui sera appelé plus tard la Théorie moderne du portefeuille. En effet, Markowitz part du principe que les rendements générés par un titre ou actif sont des variables aléatoires, ensuite il propose les deux premiers moments à savoir la moyenne et la variance comme les critères de mesure respectifs de l’espérance et du risque perçus par un investisseur rationnel. Mieux encore, l’étude de la corrélation entre les titres, l’amène à développer la stratégie de diversification du portefeuille souvent plus expressive sous l’adage “Ne jamais mettre tous les yeux dans un même panier“. Intuitivement, il s’agit de combiner des titres ou actifs corrélés négativement, ce qui permet de réduire la variance donc le risque du portefeuille(un portefeuille signifie simple une combinaison ou ensemble d’actifs)  sans éroder le rendement espéré. Conceptuellement, c’est bien faisable de créer un portefeuille ou de combiner des actifs mais comme l’investisseur est supposé rationnel, ce dernier ne s’intéressera qu’à la combinaison ou portefeuille (j’abandonne ici le terme combinaison laissons ce concept aux micro-économistes et j’adopte pour de bon le terme portefeuille) offrant le meilleure rendement pour un niveau de risque qu’il tolère ou inversement. On dit d’un tel portefeuille qu’il est efficient.

Ainsi, le problème de l’investisseur face à plusieurs titre serait de déterminer la proportion de ses fonds à investir dans chaque titre pour former le portefeuille efficient qui correspond au mieux à ses goûts vis-à-vis du risque. Dans cet article, nous allons apprendre comment avec R résoudre des problème d’optimisation de portefeuille selon le modèle Markowitzien.

Définition, formulation et résolution mathématiques

Considérons un marché de N titres, pour chaque titre ou actif A_j, on dispose de T rendements historiques notés R_j = [r_{j1}\quad r_{j2}\quad r_{j3}\quad \dots\quad r_{ji}\quad \dots\quad r_{jT}] ou de façon générale, pour l’ensemble des titres, on  a :

    \[ R=\begin{pmatrix} r_{11}& r_{12}& \cdots & r_{1T} \\ r_{21} &r_{22}& \cdots & r_{2T} \\ \vdots & \vdots & \ddots & \vdots \\ r_{N1}& r_{N2}& \cdots & r_{NT} \end{pmatrix}=\left( \begin{array}{c} R_{1}\\ R_{2}\\ \vdots \\ R_{N} \end{array} \right) \]

R est la matrice des rendements des N titres collectés sur T période. On peut donc déterminer le vecteur colonne des espérances mathématiques \mu de dimension Nx1 et la matrice symétrique de variance \Sigma de dimension NxN comme ceci :

    \[\mu=E[R]=E\left[ \left( \begin{array}{c} R_{1}\\ R_{2}\\ \vdots \\ R_{N} \end{array} \right) \right]=\left( \begin{array}{c} E[R_{1}] \\ E[R_{2}] \\ \vdots \\ E[R_{N}] \end{array} \right)=\left( \begin{array}{c} \mu_{1} \\ \mu_{2}\\ \vdots \\ \mu_{N} \end{array} \right) \]

    \[\begin{split}\Sigma=Var[R] &=\begin{pmatrix} Var[R_{1},R_{1}] & Var[R_{1},R_{2}] & \cdots & Var[R_{1},R_{N}]\\ Var[R_{2},R_{1}] & Var[R_{2},R_{2}] & \cdots & Var[R_{2},R_{N}] \\ \vdots  & \vdots & \ddots & \vdots \\ Var[R_{N},R_{1}] & Var[R_{N},R_{2}] & \cdots & Var[R_{N},R_{N}] \end{pmatrix} \\ &=\begin{pmatrix} Var[R_{1},R_{1}] & Cov[R_{1},R_{2}] & \cdots & Cov[R_{1},R_{N}]\\ Cov[R_{2},R_{1}]  & Var[R_{2},R_{2}] & \cdots & Cov[R_{2},R_{N}] \\ \vdots & \vdots & \ddots & \vdots \\ Cov[R_{N},R_{1}] & Cov[R_{N},R_{2}] & \cdots & Var[R_{N},R_{N}] \end{pmatrix}\\ \Sigma &=\begin{pmatrix} \sigma^{2}_{1} & \sigma_{1,2} & \cdots & \sigma_{1,N}\\ \sigma_{1,2}& \sigma^{2}_{2} & \cdots & \sigma_{2,N}\\ \vdots & \vdots & \ddots & \vdots \\ \sigma_{1,N} &\sigma_{2,N} & \cdots & \sigma^{2}_N \end{pmatrix} \end{split} \]

où nous avons sur la diagonale les variance de chaque titre. Il faut également noter que notre matrice de covariance ou de variance est symétrique c’est-à-dire que  \Sigma=\Sigma^\top. Ainsi, il est possible de construire un portefeuille P(\omega) avec : 

    \[ \omega = \begin{pmatrix} \omega_1 \\ \vdots \\ \omega_N \end{pmatrix} \]

qui représente le vecteur des poids de chaque titre ou actif dans le portefeuille dont la somme doit toujours être égale à 1 autrement dit \omega^\top u=1 avec : 

    \[ u = \begin{pmatrix} 1 \\ \vdots \\ 1 \end{pmatrix} \]

On peut exprimer l’espérance \mu_p et la variance \sigma^{2}_p du portefeuille comme ceci :

    \[ \begin{cases}\mu_p= \omega^\top\mu \\ \Sigma_p=\omega^\top\Sigma\omega \end{cases} \]

Le décor étant planté, nous allons formaliser 3 types de questions que se pose un investisseur à l’aune de la Théorie de Markowitz.

Le portefeuille de variance minimale(Minimum Variance Portfolio)

La première question que se pose l’investisseur est évidement de savoir : Quel portefeuille efficient,offre le niveau de risque le plus faible ? Il s’agit d’optimiser le programme quadratique suivant :

    \[ \begin{cases}\begin{aligned}  \text{Min} & & \sigma^{2}_p(\omega)&=\omega^\top\Sigma\omega \\ \text{sc. de} & & \omega^\top u &=1 \end{aligned} \end{cases} \]

Pour résoudre ce programme, nous allons recourir à la méthode du multiplicateur de Lagrange :

    \[ \mathcal{L}(\omega,\lambda) = \omega^\top\Sigma\omega - \lambda(\omega^\top u-1)\]

\lambda est le multiplicateur de Lagrange. Nous allons ensuite calculer les dérivées partielles que nous allons spécifier égales à 0 :

    \[ \begin{cases} \frac{\partial\mathcal{L}}{\omega}= 2\Sigma\omega-\lambda u=0 \quad \text{(a)}\\  \frac{\partial\mathcal{L}}{\partial\lambda}=\omega^\top u-1=0 \quad\quad\text{(b)}\end{cases} \]

 Nous allons d’abord tirer \omega dans l’équation (a), après quoi nous allons le remplacer dans l’équation (b) par son expression:

    \[ \begin{split} \text{(a)} \quad 2\Sigma\omega-\lambda u=0\quad  \implies \omega &= \frac{1}{2}\lambda\Sigma^{-1}u \\ \text{(b)} \quad \omega^\top u-1=0 \implies \omega^\top u &= 1 \\ \frac{1}{2}\lambda u^\top\Sigma^{-1}u &=1 \\  \lambda &= \frac{2}{u^\top\Sigma^{-1}u} \end{split} \]

 Nous allons mettre cette dernière expression de \lambda dans l’expression de \omega. Cela donnera ceci :

(1)   \begin{equation*}\omega=\frac{1}{2} \bigg(\frac{2}{u^{\top}\Sigma^{-1}u} \bigg) \Sigma^{-1}u \implies \omega=\frac{\Sigma^{-1}u}{u^\top\Sigma^{-1}u} \end{equation*}

Le portefeuille efficient et la frontière efficiente

Comme mentionné dès l’introduction, il est possible pour un investisseur de constituer des portefeuilles selon ses préférences. Toutefois, ces portefeuilles ne sont pas tous efficients. On appelle portefeuille efficient, tout portefeuille qui offre le rendement espéré le plus élevé pour un niveau donné de volatilité ou risque a.k.a variance, ou inversement tout portefeuille qui expose son détenteur au risque le plus faible pour un niveau donné de rendement espéré. La propriété d’efficience étant ainsi définit, nous comprenons qu’il n’existe qu’un et un seul portefeuille efficient P(\omega\ast) pour un niveau de rendement espéré \mu_0. Et l’ensemble des portefeuilles qui satisfont cette propriété forme la frontière efficiente, comme nous pouvons l’observer( la partie de la courbe qui commence à partir du portefeuille de variance minimale, cette dernière est en jaune) sur le graphique suivant :

fd

Notre objectif est de pouvoir déterminer cette frontière efficiente ou du moins exprimer une fonction qui permet de déterminer le portfeuille pour un niveau de rendement cible \mu_0. Ce problème peut se formuler comme ci-dessous : 

    \[ \begin{cases}\begin{aligned}  \text{Min} & & \sigma^{2}_p(\omega) &=\omega^\top\Sigma\omega \\ \text{sc. de} & & \omega^\top\mu &=\mu_0  \\ & & \omega^\top u &=1 \end{aligned} \end{cases} \]

Comme précédemment au vue des caractéristiques de ce programme nous allons recourir encore aux multiplicateurs de Lagrange

    \[ \mathcal{L}(\omega,\lambda_1,\lambda_2) = \omega^\top\Sigma\omega -\lambda_1(\omega^\top\mu- \mu_0)-\lambda_2(\omega^\top u-1)\]

Nous allons annuler les dérivées partielles respectivement de :

    \[ \begin{cases} \frac{\partial\mathcal{L}}{\partial\omega}&= 2\Sigma\omega-\lambda_1\mu-\lambda_2 u=0 \quad \text{(a)}\\  \frac{\partial\mathcal{L}}{\partial\lambda_1}&=\omega^\top \mu-\mu_0=0 \quad\quad\quad\quad \text{ (b)} \\ \frac{\partial\mathcal{L}}{\partial\lambda_2}&=\omega^\top u-1=0 \quad\quad\quad\quad\quad \text{(c)}\end{cases} \]

Ici également nous allons d’abord déterminer une expression de \omega en fonction de \lambda_1 et \lambda_2, ensuite nous allons l’implémenter dans les équation (b) et (c) comme ceci :

    \[ \begin{split}(a) \quad  2\Sigma\omega-\lambda_1\mu-\lambda_2 u=0 \implies& \omega=\frac{1}{2}\Sigma^{-1}(\lambda_1 \mu+\lambda_2 u) \\ (b) \quad \omega^\top\mu-\mu_0=0 \implies& \frac{1}{2}\lambda_1\mu^\top\Sigma^{-1}\mu+ \frac{1}{2}\lambda_2 u^\top\Sigma^{-1}\mu=\mu_0 \\ (c) \quad \omega^\top u-1=0 \implies& \frac{1}{2}\lambda_1\mu^\top\Sigma^{-1}u+ \frac{1}{2}\lambda_2 u^\top\Sigma^{-1}u=1 \end{split} \]

Pour venir à bout de ce système, nous allons d’abord définir A=u^\top\Sigma^{-1}\mu=\mu^\top\Sigma^{-1}u, B=\mu^\top\Sigma^{-1}\mu et C=u^\top\Sigma^{-1}u pour rendre le reste des opérations plus accomodant :

    \[\begin{cases} A\lambda_1+B\lambda_2=2\mu_0\\ A\lambda_1+C\lambda_2=2\end{cases} \iff \begin{pmatrix} B & A \\ A & C\end{pmatrix} \begin{pmatrix} \lambda_1 \\ \lambda_2 \end{pmatrix}= 2\begin{pmatrix} \mu_0\\ 1\end{pmatrix}\]

Ceci devient une identité de l’algèbre linéaire bien connue Mx=b\implies x=M^{-1}b Pour  

    \[M=\begin{pmatrix} B & A \\ A & C\end{pmatrix},\quad M^{-1}=\begin{pmatrix} B & A \\ A & C\end{pmatrix}^{-1}=\frac{1}{BC-A^2}\begin{pmatrix} C& -A \\ -A & B\end{pmatrix} \]

selon la méthode des cofacteurs et b=2\begin{pmatrix} \mu_0\\ 1\end{pmatrix}. En désignant D=BC-A^2 nous obtenons finalement :

    \[  \begin{pmatrix} \lambda_1 \\ \lambda_2 \end{pmatrix}= \frac{2}{D} \begin{pmatrix} C& -A \\ -A & B\end{pmatrix}\begin{pmatrix} \mu_0\\ 1\end{pmatrix} =\frac{2}{D} \begin{pmatrix} C\mu_0 - A \\ -A\mu_0+ B\end{pmatrix} \]

Ce qui implique que

    \[\lambda_1=2\frac{-A+C\mu_0}{D}\quad\text{et} \quad \lambda_2=2\frac{B-A\mu_0}{D}\]

Nous alors placer ces expressions lambda dans l’expression de \omega. En effet, nous avions précédemment :

    \[\begin{split}\omega &=\frac{1}{2}\Sigma^{-1}(\lambda_1 \mu+\lambda_2 u) \quad \text{en simplifiant les 2 et en faisant sortir D}\\ &=\frac{1}{2}\Sigma^{-1}\biggl[2\biggl( \frac{-A+C\mu_0}{D}\biggr)\mu+2\biggl(\frac{B-A\mu_0}{D}\biggr) u\biggr] \\ &=\frac{1}{D}\Sigma^{-1}\biggl[(-A+C\mu_0)\mu+(B-A\mu_0)u\biggr] \\ &=\frac{1}{D}\Sigma^{-1}\biggl[(-A\mu+Bu)+(C\mu-Au)\mu_0\biggr] \\ &=\frac{1}{D}\Sigma^{-1}(-A\mu+Bu)+\frac{1}{D}\Sigma^{-1}(C\mu-Au)\mu_0\end{split}\]

Nous pouvons finalement conclure que :

(2)   \begin{equation*}\omega=E\mu_0+F\end{equation*}

avec

    \[E=\frac{1}{D}\Sigma^{-1}(C\mu-Au)\quad \text{et} \quad F=\frac{1}{D}\Sigma^{-1}(-A\mu+Bu)\]

Maintenant nous pouvons exprimer notre fonction de frontière efficiente qui n’est en fait qu’une expression de \sigma^{2}_p en fonction \mu_0 :

(3)   \begin{equation*} \sigma^{2}_p(\mu_0)=\omega(\mu_0)^\top\Sigma^{-1}\omega(\mu_0) \end{equation*}

Ici l’on peut développer encore…

Portefeuille Tangent ou le portefeuille de marché ou super-efficient   

Notre dernier portefeuille caractéristique abordé est celui-ci. Pour le comprendre, on raisonne maintenant en tenant compte d’un actif additionnel  l’actif sans risque A_f. Théoriquement on peut l’assimiler aux bonds de trésor d’Etats..etc. Quoi qu’il en soit cet actif sans risque procure un rendement R_f(un rendement qui devrait être très faible comparer à l’espérance de rendement d’un titre risqué,pour respecter l’adage populaire “Qui ne risque rien n’a rien !”,  ET oui la finance de marché respecte beaucoup les adages ! ) et une variance ou risque nulle c’est-à-dire que Var(R_f)=0, donc ne variant pas sa covariance avec les autres titres est nulle, Cov(R_f, R_j)=0 et subséquemment il est “complètement décorrélation” avec les autres titres. Ici également, l’investisseur va se poser la même question que précédemment à savoir : Déterminer pour un niveau de rendement espéré donné \mu_0, quel est le portefeuille qui procure le risque ou la variance minimale ?  Rebelote encore un portefeuille efficient à déterminer mais cette fois avec prise en compte de l’actif sans risque !

Supposons que nous appelons \omega_r, la part des actifs risqués et \omega_f, la part de l’actif sans risque dans notre portefeuille, nous devons avoir \omega_{r}^\top u+\omega_f=1\implies \omega_f=(1-\omega_{r}^\top u). Aussi étant donné que notre actif sans risque a une variance nulle et une corrélation avec les autres actifs risqués nulle, la seule part de risque dans notre nouveau portefeuille P(\omega_r), ne provient que des actifs risqués. Donc nous aurons à résoudre le problème suivant : 

    \[ \begin{cases}\begin{aligned}  \text{Min} & & \sigma^{2}_p(\omega_r) =\omega_{r}^\top\Sigma\omega_r \\ \text{sc. de} & & \omega_{r}^\top\mu+(1-\omega_{r}^\top u)R_f&=\mu_0 \end{aligned} \end{cases} \]

En arrangeant la contrainte, nous obtenons le Lagrangien du programme comme ceci :

    \[ \mathcal{L}(\omega_r,\lambda) = \omega_{r}^\top\Sigma\omega_{r} -\lambda(\omega_{r}^\top(\mu- R_f u) +R_f -\mu_0)\]

 Nous allons annuler les dérivées partielles respectivement de :

    \[ \begin{cases} \frac{\partial\mathcal{L}}{\partial\omega_r}&= 2\Sigma\omega_r-\lambda(\mu- R_f u)=0 \quad \quad \text{(a)}\\  \frac{\partial\mathcal{L}}{\partial\lambda}&=\omega_{r}^\top(\mu- R_f u)+R_f-\mu_0=0 \quad \text{ (b)} \end{cases} \]

Nous allons comme d’habitude déterminer une expression de \omega_r en fonction de \lambda de l’équation (a) : \omega_{r}=-\frac{1}{2}\lambda\Sigma^{-1}(\mu-R_f u) expression que nous allons placer dans l’équation (b) :

    \[\begin{split} \omega_{r}^\top(\mu-R_f u) &= (\mu_0-R_f) \\-\frac{1}{2}\lambda(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u) &=(\mu_0-R_f) \\ \lambda&=-2 \frac{(\mu_0-R_f) }{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)} \end{split} \]

où les différences (\mu_0-R_f) et (\mu-R_f u) sont respectivement les excédents de rendements d’abord du portefeuille et ensuite sur les titres. On va maintenant exprimer \omega_r sans \lambda et après simplification des 2, nous aurons :

(4)   \begin{equation*}\omega_r=(\mu_0-R_f)\Biggl(\frac{\Sigma^{-1}(\mu-R_f u)}{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)}\Biggr)\end{equation*}

Notre portfeuille que nous venons d’obtenir P(\omega_r) appartient en effet, à une vaste famille de portefeuilles se trouvant sur la drote en vert, la droite de marché des capitaux ou Capital Market Line (CML) dont l’expression la plus finie connue grâce aux travaux de W.Sharpe et al.(nous allons pas le démontrer) est :

(5)   \begin{equation*} \mu_p= R_f+\sigma_p \biggl[ \frac{\mu_{Market}-R_f}{\sigma_{Market}}\biggr]\end{equation*}

Nous savons comment obtenir un portefeuille se situant sur la frontière efficiente (la courbe rouge) et nous savons également comment obtenir un portefeuille se situant sur la droite de marché(la droite verte). Ce qui nous intéresse maintenant, c’est de déterminer le portefeuille tangent celui en bleue. C’est lui qui offre le meilleur excédent de rendement (ou prime ou rémunération) par unité de risque, le meilleur ratio de Sharpe : \frac{\mu_p-R_f}{\sigma_p}. C’est l’une des raisons pour laquelle on l’appelle portefeuille super-efficient(parmi les efficients, il est le plus efficient !)

Pour obtenir un tel portefeuille, nous avons la possibilité d’égaliser les dérivés de la droite et de la courbe et ensuite de déterminer \omega qui vérifie cette équation. Mais d’abord cela nous demanderait d’exprimer la frontière efficiente en fonction de \omega et la droite de marché également. Nous trouvons cela un peu fastidieux. Alors nous pouvons adopter un autre raisonnement, si la droite et la courbe se confondent en ce point c’est qu’en ce point, ils doivent avoir la même composition en titres. Autrement dit le portefeuille en ce point généré grâce à la fonction de la frontière efficiente(en l’absence de l’actif sans risque) est égale au portefeuille en ce point généré grâce à la fonction de la droite de marché( en présence de l’actif sans risque). Cette observation nous conduit à conclure qu’en ce point \omega_f=0 et donc que se portefeuille n’est constitué entièrement que d’actif risqué c’est-à-dire \omega_{r}^\top u=1 et en se fiant à notre raisonnement, on peut également écrire qu’en ce point \omega_{r}=\omega_{s} avec \omega_{s} la composition du portefeuille super-efficient . Formellement en ce point :

    \[\begin{split}\omega_{s}=\omega_{r}&=(\mu_0-R_f)\frac{\Sigma^{-1}(\mu-R_f u)}{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)}\\ \omega_{s}^\top u=\omega_{r}^\top u=u^\top\omega_{s}&=(\mu_0-R_f)\frac{u^\top\Sigma^{-1}(\mu-R_f u)}{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)}=1\\ (\mu_0-R_f)&=\frac{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)}{u^\top\Sigma^{-1}(\mu-R_f u)} \end{split}\]

Cette nouvelle expression de l’excédent du rendement du portefeuille va être implémenter dans l’expression de \omega_{s}

    \[\begin{split}\omega_{s}&=(\mu_0-R_f)\frac{\Sigma^{-1}(\mu-R_f u)}{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)}\\&=\Biggl(\frac{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)}{u^\top\Sigma^{-1}(\mu-R_f u)}\Biggr)\frac{\Sigma^{-1}(\mu-R_f u)}{(\mu-R_f u)^\top\Sigma^{-1}(\mu-R_f u)} \end{split}\]

Après simplification, on peut conclure que le portefeuille Tangent P(\omega_{s}), se compose de :

(6)   \begin{equation*} \omega_{s}=\frac{\Sigma^{-1}(\mu-R_f u)}{u^\top\Sigma^{-1}(\mu-R_f u)}\end{equation*}

Ici, nous voyons finalement que la constitution du portefeuille Tangent, ne dépend pas de \mu_0, donc des préférences de l’investisseur. Cette observation nous entraîne vers les bases de la formalisation du MEDAF. Aussi nous nous arrêtons là, passons à la détermination de ces portefeuilles avec R !

Implémentation avec R

Nous allons pour implémenter ces portefeuilles, d’abord télécharger une séries 20 titres, aux hasards. Vous avez le choix du nombre et des titres mais nous n’aurons pas les mêmes réponses.

Installation de package et importation des données

Nous charger et utiliser les packages cité ci-dessous, s’ils ne sont pas encore télécharger sur votre ordinateur, utiliser la fonction install.packages(‘nom_du_package’) :

La fonction getReturns() qui prend en arguments la liste des symboles des titres qui nous intéressent, va d’abord télécharger les cours selon la périodicité spécifiée à l’argument freq et ensuite calculer les rendements :

Usinage des fonctions pour la détermination des portefeuilles

Les fonctions que nous allons construire, découlent directement des formules que nous avons démontré, précédemment dans la première partie et n’exige de ce fait aucun package, que du taï-jutsu, un corps à corps , du calcul matriciel. Nos fonctions ont le même model d’informations renvoyées,en fait, elles renvoient toutes les valeurs des poids de chaque titre dans le(s)  portefeuille(s), le(s) rendement(s) espéré(s) et les risque(s) de(s) portefeuille(s) sous format list(). Par ailleurs, nous avons pour les fonctions ayant besoins du taux d’intérêt sans risque pris par défaut un taux annuel de 5% l’an soit un taux mensuel de 0.5% approximativement, bien sûr à vous pour le changer.

Portefeuille de variance minimale
Portefeuille efficient pour un niveau de rendement donné
Portefeuille Tangent ou super- efficient
Fonctions graphiques : Frontière Efficiente et la droite de marché

Détermination des portefeuilles et visualisation graphique

Nous allons visualiser le tout comme ceci :
Finalement on obtient :