• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Análisis de correlación para modelos de regresión: Cómo eliminar la multicolinealidad y mejorar la robustez

mayo 24, 2024 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 7 minutos

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:

  1. 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.
  2. 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?
  3. 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.

Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Publicidad


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.

Imagen de Orlando en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Calculadora de Contrastes de Hipótesis: interpreta correctamente el p-valor y toma decisiones estadísticas con confianza
  • Calculadora de Tamaño del Efecto: la herramienta clave para entender cuánto importa realmente una diferencia
  • Simulador de DBSCAN: descubre cómo encontrar clusters reales (y ruido) sin fijar K
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

Publicado en: Ciencia de datos Etiquetado como: Machine learning, NumPy

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Síndrome del objeto brillante en ciencia de datos: el error simétrico a los costes hundidos

mayo 21, 2026 Por Daniel Rodríguez

De la Regresión Logística al Scorecard: La Transformación Matemática

mayo 19, 2026 Por Daniel Rodríguez

Noticias

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

mayo 18, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Método del codo (Elbow method) para seleccionar el número óptimo de clústeres en K-means publicado el junio 9, 2023 | en Ciencia de datos
  • Síndrome del objeto brillante en ciencia de datos: el error simétrico a los costes hundidos publicado el mayo 21, 2026 | en Ciencia de datos, Opinión
  • Truco Python: eliminar los valores duplicados de una lista en Python publicado el junio 29, 2020 | en Python
  • El método de las aproximaciones sucesivas e implementación en Python publicado el marzo 10, 2023 | en Ciencia de datos
  • Exactitud, precisión, recall… qué mide realmente cada métrica (y qué no) publicado el marzo 3, 2026 | en Ciencia de datos

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.1 (11)

Aplicar el método D’Hondt en Excel

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto