Covarianza y Correlación en Python

La covarianza y la correlación son métricas que nos dicen cómo se relacionan las variables entre sí. En este artículo, aprenderemos cómo implementarlos en Python.

Introducción

Trabajar con variables en el análisis de datos siempre genera la pregunta: ¿Cómo son las variables dependientes, vinculadas y variando entre sí? Las medidas de covarianza y correlación ayudan a establecer esto.

La covarianza provoca la variación entre variables. Usamos la covarianza para medir cuánto cambian dos variables entre sí. La correlación revela la relación entre las variables. Usamos la correlación para determinar cuán fuertemente vinculadas están dos variables entre sí.

En este artículo, aprenderemos cómo calcular la covarianza y la correlación en Python.

Covarianza y correlación: en términos simples

Tanto la covarianza como la correlación tienen que ver con la relación entre las variables. La covarianza define la asociación direccional entre las variables. Los valores de covarianza van desde -inf hasta +inf, donde un valor positivo indica que ambas variables se mueven en la misma dirección y un valor negativo indica que ambas variables se mueven en direcciones opuestas.

La correlación es una medida estadística estandarizada que expresa hasta qué punto dos variables están relacionadas linealmente (es decir, cuánto cambian juntas a una tasa constante). La fuerza y ​​la asociación direccional de la relación entre dos variables se definen por correlación y varía de -1 a +1. Similar a la covarianza, un valor positivo denota que ambas variables se mueven en la misma dirección mientras que un valor negativo nos dice que se mueven en direcciones opuestas.

Tanto la covarianza como la correlación son herramientas vitales utilizadas en la exploración de datos para la selección de características y análisis multivariados. Por ejemplo, un inversor que busca repartir el riesgo de una cartera podría buscar acciones con una alta covarianza, ya que sugiere que sus precios suben al mismo tiempo. Sin embargo, un movimiento similar no es suficiente por sí solo. El inversor luego usaría la métrica de correlación para determinar qué tan fuertemente vinculados están los precios de las acciones entre sí.

Configuración del código Python: recuperación de datos de muestra

Con los conceptos básicos aprendidos en la sección anterior, avancemos para calcular la covarianza en python. Para este ejemplo, trabajaremos en el conocido Conjunto de datos de iris. Solo estamos trabajando con la especie setosa para ser específicos, por lo tanto, esta será solo una muestra del conjunto de datos sobre algunas [hermosas flores moradas] (https://www.google.com/search?tbm=isch&q= setosa)!

Echemos un vistazo al conjunto de datos, en el que realizaremos el análisis:

Vista previa del conjunto de datos de Iris

Estamos a punto de elegir dos columnas para nuestro análisis: sepal_length y sepal_width.

En un nuevo archivo de Python (puede llamarlo covariance_correlation.py), comencemos creando dos listas con valores para las propiedades sepal_length y sepal_width de la flor:

1
2
3
4
5
with open('iris_setosa.csv','r') as f:
    g=f.readlines()
    # Each line is split based on commas, and the list of floats are formed 
    sep_length = [float(x.split(',')[0]) for x in g[1:]]
    sep_width  = [float(x.split(',')[1]) for x in g[1:]]

En ciencia de datos, siempre ayuda visualizar los datos en los que está trabajando. Aquí hay un diagrama de regresión de Seaborn (Gráfico de dispersión + ajuste de regresión lineal) de estas propiedades de setosa en diferentes ejes:

Diagrama de dispersión de sepal_length y sepal_width

Visualmente, los puntos de datos parecen tener una alta correlación cerca de la línea de regresión. Veamos si nuestras observaciones coinciden con sus valores de covarianza y correlación.

Cálculo de la covarianza en Python

La siguiente fórmula calcula la covarianza:

Formula to calculate Covariance

En la fórmula anterior,

  • x~i~, y~i~ - son elementos individuales de las series x e y
  • x̄, y̅ - son las medias matemáticas de las series x e y
  • N - es el número de elementos en la serie

El denominador es N para un conjunto de datos completo y N - 1 en el caso de una muestra. Como nuestro conjunto de datos es una pequeña muestra de todo el conjunto de datos de Iris, usamos N - 1.

Con la fórmula matemática mencionada anteriormente como nuestra referencia, creemos esta función en Python puro:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
def covariance(x, y):
    # Finding the mean of the series x and y
    mean_x = sum(x)/float(len(x))
    mean_y = sum(y)/float(len(y))
    # Subtracting mean from the individual elements
    sub_x = [i - mean_x for i in x]
    sub_y = [i - mean_y for i in y]
    numerator = sum([sub_x[i]*sub_y[i] for i in range(len(sub_x))])
    denominator = len(x)-1
    cov = numerator/denominator
    return cov

with open('iris_setosa.csv', 'r') as f:
    ...
    cov_func = covariance(sep_length, sep_width)
    print("Covariance from the custom function:", cov_func)

Primero encontramos los valores medios de nuestros conjuntos de datos. Luego usamos una lista de comprensión para iterar sobre cada elemento en nuestras dos series de datos y restar sus valores de la media. Se podría haber usado un bucle for si esa es su preferencia.

Luego usamos esos valores intermedios de las dos series y los multiplicamos entre sí en otra lista de comprensión. Sumamos el resultado de esa lista y lo almacenamos como el numerador. El ‘denominador’ es mucho más fácil de calcular, ¡asegúrese de disminuirlo en 1 cuando encuentre la covarianza para los datos de muestra!

Luego devolvemos el valor cuando el ’numerador’ se divide por su ‘denominador’, lo que da como resultado la covarianza.

Ejecutar nuestro script nos daría este resultado:

1
Covariance from the custom function: 0.09921632653061219

El valor positivo denota que ambas variables se mueven en la misma dirección.

Cálculo de correlación en Python

The most widely used formula to compute correlation coefficient is de pearson 'r':

Fórmula para calcular la Correlación

En la fórmula anterior,

  • x~i~, y~i~ - son elementos individuales de las series x e y
  • El numerador corresponde a la covarianza
  • Los denominadores corresponden a las desviaciones estándar individuales de x e y

¡Parece que hemos discutido todo lo que necesitamos para obtener la correlación en esta serie de artículos!

Calculemos la correlación ahora:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
def correlation(x, y):
    # Finding the mean of the series x and y
    mean_x = sum(x)/float(len(x))
    mean_y = sum(y)/float(len(y))
    # Subtracting mean from the individual elements
    sub_x = [i-mean_x for i in x]
    sub_y = [i-mean_y for i in y]
    # covariance for x and y
    numerator = sum([sub_x[i]*sub_y[i] for i in range(len(sub_x))])
    # Standard Deviation of x and y
    std_deviation_x = sum([sub_x[i]**2.0 for i in range(len(sub_x))])
    std_deviation_y = sum([sub_y[i]**2.0 for i in range(len(sub_y))])
    # squaring by 0.5 to find the square root
    denominator = (std_deviation_x*std_deviation_y)**0.5 # short but equivalent to (std_deviation_x**0.5) * (std_deviation_y**0.5)
    cor = numerator/denominator
    return cor

with open('iris_setosa.csv', 'r') as f:
    ...
    cor_func = correlation(sep_length, sep_width)
    print("Correlation from the custom function:", cor_func)

Como este valor necesita la covarianza de las dos variables, nuestra función prácticamente calcula ese valor una vez más. Una vez calculada la covarianza, calculamos la Desviación Estándar para cada variable. A partir de ahí, la correlación es simplemente dividir la covarianza con la multiplicación de los cuadrados de la desviación estándar.

Ejecutando este código obtenemos el siguiente resultado, confirmando que estas propiedades tienen una relación positiva (signo del valor, ya sea +, - o ninguno si es 0) y fuerte (el valor está cerca de 1):

1
Correlation from the custom function: 0.7425466856651597

Conclusión

En este artículo, aprendimos dos instrumentos estadísticos: covarianza y correlación en detalle. Hemos aprendido qué significan sus valores para nuestros datos, cómo se representan en Matemáticas y cómo implementarlos en Python. Ambas medidas pueden ser muy útiles para determinar las relaciones entre dos variables. s.