As matrizes, a engrenagem das carteiras
Um problema de carteiras é um problema de matrizes. A matriz de covariância guarda as variâncias e os co-movimentos dos ativos, e quase toda tarefa pede algo feito com ela. scipy.linalg.solve(A, b) resolve para a incógnita . Não se deve calcular a inversa inv(A) e multiplicar: a resolução direta faz menos trabalho e perde menos precisão. A fatoração de Cholesky, linalg.cholesky(S, lower=True), divide uma matriz de covariância em , em que é triangular inferior, isto é, com zeros acima da diagonal. Se é um vetor de números normais padrão independentes, então tem covariância , e é assim que se simulam retornos correlacionados.
Os autovalores de dizem quantas fontes independentes de risco existem de fato. linalg.eigvalsh(S) os devolve para uma matriz simétrica, do menor ao maior. Para dois ativos com correlação , a matriz de correlação tem autovalores e , então ativos muito correlacionados têm um autovalor grande e um minúsculo. A razão entre o maior e o menor é o número de condição. Um número de condição grande significa que a matriz é quase singular, isto é, quase impossível de inverter, e uma pequena mudança nos dados pode mexer muito na resposta. Otimizadores que tomam a inversa de são sensíveis exatamente a isso.
- Resolver, não inverter:
solve(A, b)é mais rápido e preciso queinv(A) @ b. - Cholesky cria correlação: multiplique normais independentes por para obter retornos com covariância .
- Vigie o número de condição: ativos muito correlacionados deixam quase singular e as soluções instáveis.
Lab: o que é avaliado
- O fator de Cholesky20 pts
- Resolver um sistema10 pts
- Um número de condição10 pts
- A parcela de variância de um fator10 pts
- Para que serve cada rotina15 pts
- Simular retornos correlacionados10 pts
- Por que não inverter25 pts