Estoy tratando de encontrar una manera eficiente de seleccionar $k$ de $n$ activos de riesgo que están menos correlacionados entre sí. Sé que puedo realizar una búsqueda por fuerza bruta de todos los $k$ -combinaciones del tamaño de la $n$ activos pero esto no escala como $n$ crece así que me pregunto si hay una optimización para este problema.
Por ejemplo, tiene los siguientes activos candidatos SHW, GOOG, AMZN, WMT, XOM, JNJ, UPS, AMT, AAPL y NEE. ¿Qué código python, matlab o R (usted elige) ejecutaría para recoger los rendimientos diarios de cada activo y encontrar el subconjunto de 5 activos que minimice root cuadrada de la suma de los cuadrados de las entradas de la matriz de correlación de los rendimientos de esos 5 activos.
I piense en se trata de un problema de programación entera binaria (o tal vez de optimización convexa, ya que estamos buscando un mínimo), por favor, corrija la siguiente formulación si es incorrecta.
Dado
- una matriz de rendimientos $R$ donde $\left(r_{ij}\right) \in \mathbb{R}^{m \times n}$ es el retorno para el $i$ -día y el $j$ -aquel activo y
- la matriz de correlación $C = \text{corr}\left( R \right)$ donde $\left(c_{ij}\right) \in \mathbb{R}^{n \times n}$ es el coeficiente de correlación entre el $i$ -y $j$ -activos
Queremos encontrar $\vec{x} \in \left\{0,1\right\}^n $ s.t.
- $\sum \limits_i^n x_i = k$ y
- $\vec{x}$ minimiza $\sqrt{\sum \limits_{i,j}^n {c'}_{ij}^{2}}$ , donde $\left({c'}_{ij}\right) \in \mathbb{R}^{n \times n}$ es la entrada de la matriz de correlación modificada $C'$ para los activos seleccionados por $\vec{x}$ dado por $C'= \left(\vec{x} \otimes \vec{x}\right) \odot C$ .
Es decir, $C'$ es $C$ con las filas y columnas de los activos rechazados "puestas a cero", dadas por el producto exterior de $\vec{x}$ con ella misma (para obtener una matriz $X$ con $x_{i,j} \in \left\{0,1\right\} = 0$ cuando $\vec{x}_i = 0$ y $x_{i,j} = 1$ cuando $\vec{x}_i = 1$ ) Hadamard multiplicado por $C$ . Finalmente elegí root cuadrada de la suma de los cuadrados de las entradas de $C'$ pero creo que cualquier métrica de distancia serviría (como la media de los valores absolutos de las entradas).
Gracias.