Tanto la correlación como la covarianza son técnicas que nos ayudan a entender mejor cómo varía una variable en función de otra. Vamos a ver 3 tipos de correlación: Pearson, Spearman y Kendall. Veremos qué son, cómo se calculan y en qué casos funcionan mejor. Como ejemplo en python encontraremos qué compañías del IBEX-35 está más y menos correladas.
La correlación y la covarianza tienen muchas aplicaciones en campos tan diversos como genética, biología molecular, finanzas, etc. Además nos ayudan a entender mejor los datos y pueden ser útiles como características en la fase de preparación de datos.
Índice
Covarianza
La covarianza es una medida de variabilidad entre dos variables. Es decir, mide cómo varía una variable en relación a otra variable. Para calcular la covarianza usaremos la siguiente fórmula.
cov(X, Y) = E[(X-\mu_{X})(Y-\mu_{Y})]
µX y µX se refieren a la media aritmética de X e Y respectivamente
E se refiere a la esperanza matemática, es decir, a la media aritmética
Si a valores mayores de X le corresponden valores mayores de Y, y a valores menores de X también le corresponden valores menores de Y, entonces la covarianza será positiva. Es decir, la covarianza será positiva si las variables están relacionadas linealmente y se mueven en la misma dirección. La covarianza será negativa si a valores mayores de X le corresponden valores menores de Y y a valores menores de X le corresponden valores mayores de Y.
Las limitaciones de la covarianza son:
- La magnitud de la covarianza no es fácil de interpretar porque sus unidades son las unidades de X multiplicadas por las unidades de Y. Veremos que la correlación de Pearson resuelve este problema.
- La covarianza sólo es capaz de reconocer relaciones lineales. Cómo sabemos, muchas de las relaciones entre variables son, en la práctica, no lineales.
- Asume que las variables siguen una distribución normal.
Correlación
Existen varios tipos de correlación. La más conocida es, sin duda, la de Pearson. De hecho, si no decimos cuál estamos usando, se asume que usamos la de Pearson. Además de la de Pearson veremos también la correlación de Spearman y la de Kendall.
Correlación de Pearson
La correlación de Pearson es una versión normalizada de la covarianza. Una de las desventajas de la covarianza es que sus unidades son difíciles de interpretar y comparar. Es decir, con la covarianza no podemos decir que la relación lineal entre A y B es mayor que entre A y C de forma intuitiva.
Para calcularla tendremos en cuenta la covarianza y las desviaciones típicas tanto de X como de Y. La expresión es la siguiente:
pearson(X, Y) = \frac{cov(X,Y)}{\sigma_{X}\sigma_{Y}}
La correlación de Pearson resuelve el problema de la interpretabilidad de la magnitud de la relación entre las variables X e Y. No tiene dimensiones. Dicho de otra forma, es adimensional.
Si la correlación es +1 las variables varían en la misma dirección en la misma cantidad relativa; si la correlación es -1 lo hacen en direcciones opuestas en cantidades relativas iguales. Así, el rango para la correlación de Pearson está siempre en [-1, 1]. Un valor de 0 indicaría que las dos variables no están relacionadas.
Las limitaciones de la correlación de Pearson son:
- Sólo puede detectar correctamente relaciones lineales.
- Asume que las variables siguen una distribución normal.
Veremos cómo las correlaciones de Spearman y Kendall superan estas limitaciones.
Correlación de Spearman
La correlación de Spearman es la misma que la de Pearson pero con un preprocesado. En lugar de aplicar la correlación a los datos, se aplica al ranking de los valores de X e Y.
Por ejemplo, si X = [3.28, -4.12, 8.21, 6.65, -0.94], obtendremos su ranking rX ordenando sus valores de menor a mayor y remplazándolos por su posición en el nuevo orden: rX = [3, 1, 5, 4, 2].
La fórmula sería:
spearman = \frac{cov(r_{X}, r_{Y})}{\sigma_{r_{X}}\sigma_{r_{Y}}}
En el caso de Spearman, la correlación es positiva si tanto X como Y varían en la misma dirección y negativa si varían en dirección contraria. Su magnitud depende de cómo de fuerte sea esa relación.
Por ejemplo, si los valores más altos de X se corresponden con los valores de Y en todas las situaciones obtendremos un valor de +1. La correlación de Spearman también está normalizada en el rango [-1, +1]
La ventajas de la correlación de Spearman son:
- No necesita asumir ningún tipo de distribución de las variables
- Puede encontrar relaciones no lineales. De hecho se centra en encontrar relaciones monotónicas.
Correlación de Kendall
La correlación de Kendall está indicada para encontrar relaciones entre variables que representen secuencias tales como series temporales. Se fija en cómo varían los pares de X e Y. Para ello define pares concordantes y discordantes:
- Par concordante: si X aumenta de valor, Y también aumenta de valor, o si X disminuye de valor, Y también disminuye de valor.
- Par discordante: si X aumenta de valor Y disminuye de valor, o si X disminuye de valor, Y aumenta de valor.
Date cuenta que sólo tienen que aumentar o disminuir simultáneamente para que los pares sean considerados concordantes. Es decir, no se fija para nada en la cantidad o de si son proporcionales. Esto le permite encontrar relaciones tanto lineales como no lineales.
kendall = \frac{(pares \ concordantes) - (pares \ discordantes)}{\frac{n(n-1)}{2}}
Como vemos, estos aumentos y disminuciones en valor son ideales para secuencias de datos tales como series temporales. La correlación de Spearman también está normalizada en el rango [-1, +1].
Las ventajas de la correlación de Kendall son:
- No necesita asumir ningún tipo de distribución de las variables
- Puede encontrar relaciones no lineales.
- Está pensada para secuencias de datos tales como las series temporales
Su desventaja sería:
- No tiene sentido usar la correlación de Kendall si los datos no se corresponden con secuencias tales como series temporales.
Diversificación en el IBEX35
Datos
Los datos para este ejercicio son las cotizaciones diarias de las acciones que cotizan en el IBEX35 desde 28/06/2019 hasta 28/06/2020. Es decir, justo un año de cotizaciones. Los datos los he obtenido usando la librería investpy
investpy – a Python package for Financial Historical Data Extraction developed by Álvaro Bartolomé del Canto @ alvarobartt at GitHub
https://pypi.org/project/investpy/
Por ejemplo, esta sería la cotización de Inditex en este periodo.
Transformación de datos
Para este análisis he usado las ganancias diarias, es decir, qué porcentaje ha subido (o bajado) la cotización de una acción con respecto al precio del día anterior. Así por ejemplo, el porcentaje diario de la cotización de Inditex quedaría de esta forma.
IBEX35 con la correlación Kendall
Me he decidido a hacer una correlación Kendall con los datos de los retornos diarios de las cotizaciones del IBEX35 por estar optimizada para series temporales. Así podemos examinar la relación temporal de los rendimientos diarios.
Además tiene la ventaja de no asumir ninguna distribución (esto sería un problema para Pearson porque es sabido que la distribución de los retornos bursátiles no siguen una distribución normal). De esta forma podremos descubrir relaciones tanto lineales como no lineales.
Para calcular la correlación en python he usado la librería pandas. Es lo más cómodo porque tenía los datos en un DataFrame de pandas.
kendall = retornos_diarios.corr(method='kendall').abs() #pearson = retornos_diarios.corr().abs() #pearson = retornos_diarios.corr(method='pearson').abs() #spearman = retornos_diarios.corr(method='spearman').abs()
Sólo vamos a usar la correlación de Kendall, pero también te he indicado en el código comentado cómo puedes calcular la correlación de Pearson (que es la que usa pandas por defecto) y la de Spearman.
Al final tomo el valor absoluto porque para este análisis me interesa saber qué acciones están relacionadas con otras, independientemente de si la relación es positiva o negativa.
La correlación de Kendall de los retornos diarios de las empresas que componen el IBEX 35 se puede ver en el siguiente gráfico.
Como puedes ver, se puede apreciar que, normalmente, las empresas que pertenecen a los mismo sectores están más correladas entre sí que con empresas de otros sectores.
Podemos ahora encontrar cuáles son las empresas que menos correlación tienen, en media, con el resto de empresas del IBEX 35.
# Calculamos el valor medio para cada empresa y ordenamos kendall.mean().sort_values()
Nos daría el siguiente resultado
Cellnex Telecom 0.134929 Grifols 0.151353 MásMóvil 0.176032 Almirall 0.185148 Red Eléctrica 0.194319 Viscofán 0.199901 Enagás 0.235660 Colonial 0.237525 Siemens Gamesa 0.245824 Acciona 0.254782 ENCE 0.258932 Naturgy Energy 0.259595 Cie Automotive 0.265624 Iberdrola 0.265870 Merlin Properties 0.267845 Endensa 0.272461 Meliá Hotels 0.287074 Ferrovial 0.294401 Aena 0.302596 IAG 0.303259 Bankia 0.306136 Telefónica 0.306876 Acerinox 0.309142 ACS 0.309831 Inditex 0.309949 Amadeus 0.309978 Repsol 0.311501 Sabadell 0.314201 Indra 0.316982 Bankinter 0.323318 CaixaBank 0.330371 Mapfre 0.334976 AcelorMittal 0.338454 Santander 0.353874 BBVA 0.355677
Así vemos que los rendimientos diarios de Cellnex Telecom, Grifols, MásMóvil, Almirall y Red Eléctrica están entre los menos correlados con el resto de las empresas. Sin embargo, BBVA, Santander, AcelorMittal, Mapfre y CaixaBank están entre los más correlados.
Observación
Si quieres invertir en acciones del IBEX 35 y asegurarte que en realidad estás diversificando, comprueba en la matriz de correlación que sus retornos no estén excesivamente correlados.
Por cierto, esto no es ningún consejo para invertir, sólo un ejercicio para demostrar los resultados que se pueden obtener haciendo un análisis de correlación.
Te dejamos como ejercicio calcular covarianzas y los distintos tipos de correlaciones con datos fundamentales.
La correlación no implica causalidad
La correlación indica que dos variables están relacionadas pero esto no tiene por qué significar que una sea la causa de otra. Por ejemplo, parece razonable creer que el aumento del consumo per cápita de queso mozzarella no es la causa del aumento de los ingenieros civiles, pero la correlación está ahí.
Para más ejemplos de correlaciones divertidas puedes echar un vistazo a tylervigen.
Quería despedirme con esta viñeta de xkcd. Que luego no digas que no te avisé que la correlación no sirve para determinar causalidad.
Resumen
Hemos visto cómo estudiar la interrelación entre variables con la covarianza y los distintos tipos de correlación. Hemos visto las ventajas y desventajas de cada técnica y cómo se han ido superando su limitaciones.
También, a modo de ejemplo, hemos estudiado cómo están interrelacionados los retornos diarios de las empresas del IBEX 35 y cuáles son las empresas más y menos correladas.
Por último hemos hecho hincapié en el hecho de que la correlación no implica causalidad.
Buenos días,
Si analizamos la correlación entre un índice y un valor que está dentro del índice siempre vamos a encontrar correlación. Los valores más correlados con el IBEX35 son los que más capital representan dentro del IBEX35. ¿Cierto?
Bajo mi punto de vista este análisis se debe realizar entre empresas o con otro índice externo.
Saludos
Enhorabuena por este mágnifico blog
Hola Juan,
En este análisis miramos la correlación de los retornos diarios entre todas las empresas del IBEX35. En ningún momento estamos haciendo correlaciones entre el índice y empresas.
Qué te ha hecho pensarlo? Lo digo para poder editar la parte que dé lugar a malentendidos y hacer el contenido más claro.
Gracias!
Buenas tardes,
Ante todo felicitarte por esta difusión que estas haciendo de IA en español. Es muy interesante.
Un par de comentarios, en general no salen bien escritas las formulas y se hace difícil interpretarlas.
Por ejemplo, en el coeficiente de correlación de Pearson, aparece como que los desvíos estándard de x e y se multiplican con la covarianza de x e y. Cuando está claro, que lo correcto es la covarianza de x e y, partido de la multiplicación de los desvíos estándard de x e y.
Por otro lado, en el coeficiente de Spearman, no se entiende bien el ejemplo y creo que la formula no es la correcta.
Saludos
Buenas tardes,
Nos puedes enviar el código completo en python que utilizaste para el ejemplo del Ibex35, de manera de poder jugar un poco y aprender.
Saludos y gracias.