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.
El problema de la multicolinealidad en los modelos de regresió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:
- Distorsiona las estimaciones de los coeficientes: Cuando las variables independientes están altamente correlacionadas, el modelo tiene dificultades para estimar los efectos individuales de cada variable sobre la variable dependiente. Esto puede resultar en coeficientes de regresión poco fiables o sesgados.
- Dificulta la interpretación de los resultados: La presencia de multicolinealidad puede hacer que sea difícil determinar la importancia relativa de cada variable independiente en el modelo. Esto puede dificultar la interpretación de los resultados. Siguiendo con el ejemplo anterior, ¿es el tamaño o el número de habitaciones lo que mejor predice el precio?
- Aumenta la varianza de las estimaciones: La multicolinealidad puede aumentar la varianza de las estimaciones de los coeficientes, lo que reduce la precisión del modelo y puede llevar a conclusiones erróneas sobre la relación entre las variables.
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.
Eliminación de la multicolinealidad mediante análisis de correlación
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:
- Calcular la matriz de correlación: Obtener la matriz de correlación con las correlaciones entre todas las variables independientes del conjunto de datos. Para su obtención se pueden utilizar diferentes métodos como el coeficiente de correlación de Pearson.
- Identificar los pares de variables altamente correlacionadas: Examinar la matriz de correlación para identificar cuáles son los pares de variables que están altamente correlacionadas entre sí. Esto se hace localizando los valores de correlación cercanos a 1 o -1, ya que indican una fuerte correlación entre las variables.
- Evaluar la magnitud de la correlación: Se debe considerar la magnitud de la correlación entre las diferentes variables. Aunque la correlación puede ser alta, es importante determinar si es lo suficientemente alta como para causar problemas de multicolinealidad en el modelo de regresión.
- Seleccionar las características a eliminar: Una vez identificados los pares de variables altamente correlacionadas, es necesario seleccionar una de las variables de cada par para eliminarla del modelo. La selección puede basarse en criterios como la relevancia teórica, la importancia de la variable en el contexto del problema o la disponibilidad de datos.
- Eliminar las características seleccionadas: Elimina las características seleccionadas del conjunto de datos usado para la creación del modelo. Lo que implica excluir estas características del modelo de regresión.
- Repetir el proceso si es necesario: Si la matriz de correlación revela múltiples pares de variables altamente correlacionadas, será necesario repetir el proceso de identificación y eliminación de características hasta que el nivel de multicolinealidad en el modelo de regresión sea asumible.
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.
Uso del análisis de correlación en Python para eliminar la multicolinealidad
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.
Factorización del análisis de correlación en Python
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
Conclusiones
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.
Deja una respuesta