Les matrices, mécanique des portefeuilles
Un problème de portefeuille est un problème de matrices. La matrice de covariance contient les variances et les co-mouvements des actifs, et presque toute tâche demande de faire quelque chose avec elle. scipy.linalg.solve(A, b) résout pour l'inconnue . Il ne faut pas calculer l'inverse inv(A) puis multiplier : la résolution directe fait moins de travail et perd moins de précision. La factorisation de Cholesky, linalg.cholesky(S, lower=True), découpe une matrice de covariance en , où est triangulaire inférieure, c'est-à-dire avec des zéros au-dessus de la diagonale. Si est un vecteur de nombres normaux standard indépendants, alors a pour covariance , et c'est ainsi qu'on simule des rendements corrélés.
Les valeurs propres de disent combien de sources de risque indépendantes il y a vraiment. linalg.eigvalsh(S) les renvoie pour une matrice symétrique, de la plus petite à la plus grande. Pour deux actifs de corrélation , la matrice de corrélation a pour valeurs propres et , donc des actifs très corrélés ont une grande valeur propre et une toute petite. Le rapport de la plus grande à la plus petite valeur propre est le conditionnement. Un conditionnement élevé signifie que la matrice est presque singulière, c'est-à-dire presque impossible à inverser, et qu'un petit changement des données peut faire beaucoup varier la solution. Les optimiseurs qui prennent l'inverse de sont sensibles à cela.
- Résoudre, ne pas inverser :
solve(A, b)est plus rapide et plus précis queinv(A) @ b. - Cholesky fabrique la corrélation : multipliez des normales indépendantes par pour obtenir des rendements de covariance .
- Surveiller le conditionnement : des actifs très corrélés rendent presque singulière et les solutions instables.
Lab : ce qui est noté
- Le facteur de Cholesky20 pts
- Résoudre un système10 pts
- Un conditionnement10 pts
- La part de variance d'un facteur10 pts
- À quoi sert chaque routine15 pts
- Simuler des rendements corrélés10 pts
- Pourquoi ne pas inverser25 pts