Los modelos de regresión son una de las técnicas estadísticas más utilizadas para comprender y predecir las relaciones entre las variables. Siendo ampliamente utilizadas en análisis de datos y aprendizaje automático. Sin embargo, cuando las variables que se desean utilizar para la construcción del modelo están altamente correlacionadas, aparece el problema de la multicolinealidad. Pudiendo afectar negativamente tanto a la precisión como a la interpretación de los resultados. En esta entrada se analizará cómo se puede abordar el problema de la multicolinealidad mediante el análisis de correlación.
Imaginemos que nos han pedido la construcción de un modelo para predecir el precio de la vivienda en función de múltiples características. Posiblemente nuestra primera opción sería un modelo de regresión. Para el que se usarán características como el tamaño, el número de habitaciones, la ubicación, etc. Al recibir los datos, se puede ver intuitivamente que algunas características están altamente correlacionadas entre sí. Por ejemplo, el tamaño de la casa y el número de habitaciones suelen estar fuertemente correlacionados, lo que indica multicolinealidad. La multicolinealidad es un problema importante en modelos de regresión debido a varias razones, entre las que se puede destacar:
Esto hace que identificar la multicolinealidad en los conjuntos de utilizados para la construcción de modelo de regresión sea clave. Garantizando así mejores estimaciones y una interpretación adecuada de los resultados.
El análisis de correlación es una herramienta clave para poder identificar la multicolinealidad entre las variables independientes en un modelo de regresión. Un análisis sencillo que se puede realizar mediante los siguientes pasos:
Es importante tener en cuenta que la eliminación de características debe realizarse con precaución, ya que puede afectar la capacidad predictiva y la interpretabilidad del modelo. Siempre se debe considerar el contexto del problema y la relevancia de las características antes de eliminarlas.
Además del análisis de correlación, también se pueden emplear otras técnicas como el factor de inflación de la varianza (VIF) para identificar y abordar la multicolinealidad en modelos de regresión.
El proceso que se ha descrito en la sección anterior se puede implementar fácilmente en Python. Para ello, en primer lugar, hace falta disponer de un conjunto de datos con variables colineales, lo que se puede obtener con las funciones de generación de números aleatorios de NumPy. En el siguiente código se fija la semilla 42 para la reproducibilidad de los datos. A continuación, se define una matriz de covarianza con multicolinealidad, para lo que se indica valores de correlación altos tales como un 0,8. Finalmente, se crea el conjunto de datos con la función np.random.multivariate_normal() y se almacena en un DataFrame.
import numpy as np
import pandas as pd
# Se establece una semilla para reproducibilidad
np.random.seed(42)
# Se crea un conjunto de datos sintético con multicolinealidad
mu = [0, 0, 0, 0, 0]
sigma = [[1, 0.8, 0.6, 0.4, 0.2],
[0.8, 1, 0.7, 0.5, 0.3],
[0.6, 0.7, 1, 0.8, 0.4],
[0.4, 0.5, 0.8, 1, 0.6],
[0.2, 0.3, 0.4, 0.6, 1]]
data = np.random.multivariate_normal(mu, sigma, size=100)
# El array de numpy se transforma en un DataFrame de pandas
df = pd.DataFrame(data, columns=['X1', 'X2', 'X3', 'X4', 'X5'])
# Conjunto de datos con variables colineales
print("Conjunto de datos con variables colineales:")
print(df.head()) Conjunto de datos con variables colineales:
X1 X2 X3 X4 X5
0 -0.757616 0.111037 -0.634418 -0.680133 0.095039
1 1.321557 0.724946 0.035784 -0.719422 -0.555579
2 0.692901 -0.125111 -0.204947 1.091728 0.538835
3 0.215137 0.024256 0.003629 1.182242 1.035566
4 -0.826915 -1.687707 -1.567666 -0.870726 -0.737170
A simple vista es difícil saber si los datos están o no correlacionados. Pero se puede usar el proceso descrito anteriormente para eliminar las variables que están altamente correlacionadas. Lo que se muestra en el siguiente código.
# Calculo de la matriz de correlación
correlation_matrix = df.corr()
# Identificación de las variables colineales
colinear_features = set()
for i in range(len(correlation_matrix.columns)):
for j in range(i):
if abs(correlation_matrix.iloc[i, j]) > 0.8: # Umbral de correlación
colinear_features.add(correlation_matrix.columns[i])
# Eliminación de las variables colineales del DataFrame
df_cleaned = df.drop(columns=colinear_features)
# El nuevo conjunto de datos sin variables colineales
print("Conjunto de datos sin variables colineales:")
print(df_cleaned.head()) Conjunto de datos sin variables colineales:
X1 X3 X4 X5
0 -0.757616 -0.634418 -0.680133 0.095039
1 1.321557 0.035784 -0.719422 -0.555579
2 0.692901 -0.204947 1.091728 0.538835
3 0.215137 0.003629 1.182242 1.035566
4 -0.826915 -1.567666 -0.870726 -0.737170
En este ejemplo, en primer lugar, se usa el método corr() del DataFrame para obtener la matriz de correlación. Posteriormente se recorre la diagonal superior de la matriz en búsqueda de valores que superen el umbral de correlación. Valor que se ha fijado en 0,8. Las columnas del DataFrame que superan este valor umbral son eliminadas usando para ello el método drop().
Se puede ver como resultado se ha eliminado la variable X2, la cual se creó con un factor de correlación de 0,8 con X1. Por su parte, X3 y X4 también se definieron con este valor, pero se puede ver que los datos generados tienen una correlación ligeramente inferior (~ 0,73) debido a la variabilidad estadística de los números aleatorios, por lo que el proceso no elimina ninguno de los dos.
Ya que este proceso es habitual en los análisis, se puede crear una función para tener a mano el método ya implementado. Una posible implementación de la función sería la que se muestra a continuación.
import numpy as np
import pandas as pd
def eliminar_variables_colineales(dataframe, umbral=0.8):
"""
Elimina las variables colineales de un DataFrame basado en un umbral de correlación.
Parámetros:
- dataframe: DataFrame de pandas. El conjunto de datos que contiene las variables.
- umbral: float, opcional (default=0.8). El umbral de correlación para considerar dos variables como colineales.
Retorna:
- DataFrame: Un nuevo DataFrame sin las variables colineales.
"""
# Calcula la matriz de correlación
correlation_matrix = dataframe.corr()
# Busca las variables colineales
colinear_features = set()
for i in range(len(correlation_matrix.columns)):
for j in range(i):
if abs(correlation_matrix.iloc[i, j]) > umbral:
colinear_features.add(correlation_matrix.columns[i])
# Elimina las variables colineales del DataFrame
df_cleaned = dataframe.drop(columns=colinear_features)
return df_cleaned En donde se ha convertido el umbral en un parámetro que por defecto se fija a 0,8, pero que el usuario puede cambiar con facilidad. A continuación, se puede ver cómo al reducir el umbral el número de características que sobreviven al análisis son menos.
# Uso de la función para eliminar variables colineales con un umbral de 0.6
df_cleaned = eliminar_variables_colineales(df, umbral=0.6)
print("Conjunto de datos sin variables colineales:")
print(df_cleaned.head()) Conjunto de datos sin variables colineales:
X1 X5
0 -0.757616 0.095039
1 1.321557 -0.555579
2 0.692901 0.538835
3 0.215137 1.035566
4 -0.826915 -0.737170
El análisis de correlación es una herramienta que puede ayudar a detectar el problema de la multicolinealidad en los conjuntos de datos. Un método sencillo que permite la detección de este problema y tomar medidas para eliminar los pares de variables con problemas.
En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…
En la serie Creación de una API REST con Express y TypeScript construimos una API…
Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…
En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…
Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…
En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…
This website uses cookies.