WhatsApp

  

Detección de Colinealidad y Dependencia en Modelos Predictivos con Python

Guía completa para identificar y manejar la colinealidad y dependencia entre variables usando técnicas estadísticas y bibliotecas Python como pandas, statsmodels y scikit‑learn.

Detección de Colinealidad y Dependencia en Modelos Predictivos con Python

La colinealidad (o multicolinealidad) y la dependencia entre variables son problemas comunes que degradan la interpretabilidad y la estabilidad de los modelos de regresión. En este artículo descubrirás qué son, por qué importan y, lo más importante, cómo detectarlos y mitigarlos mediante ejemplos prácticos en Python.


1. Conceptos Fundamentales

  • Colinealidad: Cuando dos o más predictores están linealmente relacionados.
  • Multicolinealidad: Extensión de la colinealidad a tres o más variables que, en conjunto, pueden expresarse como combinación lineal de las demás.
  • Dependencia: Correlación fuerte (positiva o negativa) que no necesariamente es lineal, pero que indica que la información de una variable está contenida en otra.

Estas situaciones provocan:

  • Coeficientes de regresión inestables.
  • Inflación de la varianza de los estimadores (VIF alto).
  • Dificultad para interpretar la importancia de cada variable.

2. Métodos de Detección en Python

2.1 Matriz de Correlación

Una primera inspección rápida. Valores absolutos > 0.8 suelen indicar posible colinealidad.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# DataFrame de ejemplo
df = pd.read_csv('datasets/housing.csv')
corr = df.corr()
plt.figure(figsize=(10,8))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Matriz de Correlación')
plt.show()

2.2 Variance Inflation Factor (VIF)

Cuantifica la inflación de la varianza de cada coeficiente. VIF > 5 (o > 10) es señal de alerta.

from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools import add_constant
X = df[['rooms', 'bedrooms', 'population', 'households']]
X_const = add_constant(X)
vif_data = pd.DataFrame({
    'feature': X.columns,
    'VIF': [variance_inflation_factor(X_const.values, i+1) for i in range(len(X.columns))]
})
print(vif_data)

2.3 Condition Number

Basado en la descomposición en valores singulares (SVD). Un número > 30 indica problemas de colinealidad.

import numpy as np
from numpy.linalg import svd
U, s, Vt = svd(X)
cond_number = s.max() / s.min()
print(f'Condition Number: {cond_number:.2f}')

2.4 Análisis de Componentes Principales (PCA)

Reduce dimensionalidad y muestra cuánta varianza explica cada componente; componentes con varianza muy alta pueden estar capturando colinealidad.

from sklearn.decomposition import PCA
pca = PCA().fit(X)
explained = np.cumsum(pca.explained_variance_ratio_)
plt.figure(figsize=(6,4))
plt.plot(range(1, len(explained)+1), explained, marker='o')
plt.xlabel('Número de componentes')
plt.ylabel('Varianza acumulada')
plt.title('Curva de varianza explicada')
plt.grid(True)
plt.show()

3. Estrategias para Mitigar la Colinealidad

  1. Eliminación manual: Quitar la variable con mayor VIF.
  2. Combinar variables: Crear una nueva característica (ej. ratio, suma) que capture la información conjunta.
  3. Regularización: Modelos Ridge (L2) y Lasso (L1) reducen la varianza sin eliminar variables.
  4. PCA / Feature Extraction: Transformar el espacio a componentes ortogonales.

Ejemplo: Regularización con Ridge

from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
X_train, X_test, y_train, y_test = train_test_split(X, df['median_house_value'], test_size=0.2, random_state=42)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
pred = ridge.predict(X_test)
print('R²:', r2_score(y_test, pred))
print('Coeficientes:', ridge.coef_)

4. Comparativa con Soluciones Alternativas

Método Ventajas Desventajas Uso típico
Matriz de Correlación Rápida, visual, sin dependencias externas No captura relaciones no lineales, umbral subjetivo Análisis exploratorio inicial
VIF Cuantitativo, fácil de interpretar Requiere regresión múltiple, sensible a escalado Modelos lineales clásicos
Condition Number Detecta colinealidad global No indica qué variables son problemáticas Diagnóstico de estabilidad numérica
Regularización (Ridge/Lasso) Automática, mejora generalización Los coeficientes se sesgan, no elimina colinealidad explícitamente Modelos predictivos de producción
PCA / ICA Reduce dimensionalidad, elimina redundancia Pérdida de interpretabilidad, requiere transformación posterior Pre‑procesamiento para algoritmos de Machine Learning

5. Buenas Prácticas y Solución de Problemas

  • Escalar variables antes de calcular VIF (StandardScaler o MinMaxScaler).
  • Re‑evaluar VIF después de cada eliminación o transformación.
  • Monitorizar el Condition Number en pipelines de entrenamiento continuo.
  • Validar la estabilidad de los coeficientes con bootstrapping o cross‑validation.
  • Revisar outliers: valores extremos pueden inflar artificialmente la colinealidad.

Ejemplo de troubleshooting: VIF inesperadamente alto

# Paso 1: inspeccionar escala
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Paso 2: recalcular VIF
X_scaled_const = add_constant(X_scaled)
vif_scaled = pd.DataFrame({
    'feature': X.columns,
    'VIF': [variance_inflation_factor(X_scaled_const, i+1) for i in range(len(X.columns))]
})
print(vif_scaled)
# Paso 3: si VIF sigue alto, buscar colinealidad estructural
import itertools
for combo in itertools.combinations(X.columns, 2):
    corr = X[list(combo)].corr().iloc[0,1]
    if abs(corr) > 0.95:
        print('Posible duplicado:', combo)

6. Conclusiones

Detectar colinealidad y dependencia es esencial para construir modelos fiables y explicables. Con las herramientas nativas de Python (pandas, statsmodels, scikit‑learn) puedes identificar rápidamente los problemas, aplicar mitigaciones como regularización o PCA, y garantizar la estabilidad de tus predictores a lo largo del ciclo de vida del modelo.

Recuerda que la interpretación humana sigue siendo el mejor filtro: combina métricas cuantitativas con conocimiento del dominio para decidir qué variables conservar, transformar o eliminar.

© 2025 DataScience Insights – Todos los derechos reservados.


Detección de Colinealidad y Dependencia en Modelos Predictivos con Python
ASIMOV Ingeniería S. de R.L. de C.V., Emiliano Nava 13 noviembre, 2025
Compartir
Iniciar sesión dejar un comentario

  
Algoritmo de Proyección en Espacios N‑dimensionales: Conceptos, Implementación en Python y Buenas Prácticas
Guía completa sobre el algoritmo de proyección en espacios n‑dimensionales. Incluye fundamentos matemáticos, código Python optimizado, ejemplos reales, comparativas con otras técnicas y recomendaciones de rendimiento y escalabilidad.