Resumen

Comprende cómo diagnosticar tu modelo de regresión lineal con dos herramientas esenciales: determinante y rango. Con ellas evalúas la invertibilidad de la matriz de la ecuación normal y detectas redundancias en las características antes de que fallen los cálculos. Así anticipas singularidad y multicolinealidad con confianza.

¿Por qué funcionó el modelo con la matriz A?

La clave está en dos números que conoces de álgebra lineal. El determinante indica cómo una matriz escala el espacio y actúa como una prueba rápida de invertibilidad en la ecuación normal. Si el determinante es distinto de cero, la matriz es invertible y hay solución única. Si es cero, es una alerta: la matriz no es invertible y el método de la inversa fallará.

El rango ofrece una mirada más profunda: mide cuántas características independientes hay en los datos. Si hay 3 características pero el rango es 2, una es redundante. La conexión es directa: cuando hay características redundantes, el determinante se hace cero y el rango baja respecto al número de características.

  • Determinante distinto de cero: matriz invertible y solución única.
  • Determinante igual a cero: no invertible; la inversa no funciona.
  • Rango igual al número de columnas: todas las características aportan información.
  • Rango menor: existe redundancia entre características.

¿Cómo diagnosticar con NumPy: determinante y rango?

En un Notebook de Colab, se parte de la matriz A “saludable” (derivada de X con columna de unos, la bias). Se calculan el determinante y el rango con NumPy y se verifica que el determinante es grande y distinto de cero, y que el rango es 3, consistente con las tres columnas (columna de unos más dos características originales).

import numpy as np

# Diagnóstico de la matriz saludable
det_saludable = np.linalg.det(A_saludable)
rango_saludable = np.linalg.matrix_rank(A_saludable)
print(det_saludable, rango_saludable)
``

- np.linalg.det: calcula el determinante.
- np.linalg.matrix_rank: calcula el rango.
- Columna de unos: añade la *bias* y mantiene tres columnas independientes.
- Resultado esperado: determinante  0 y rango = 3.

## ¿Qué revela una columna redundante sobre el rango?
Se enferman los datos duplicando la columna de habitaciones para crear una columna **redundante**. Tras concatenarla a X y añadir la *bias*, se construye la **matriz de Gram** A de este X enfermo. Al diagnosticar, el determinante cae a cero y el rango baja a 3 aunque haya 4 columnas: el espacio colapsa y una columna queda anulada por ser combinación lineal de otra.

```python
# Crear columna redundante y diagnosticar
habitaciones_doble = X[:, 1] * 2
x_enfermo = np.c_[X, habitaciones_doble]
x_enfermo_bias = np.c_[np.ones((4, 1)), x_enfermo]
A_enfermo = x_enfermo_bias.T @ x_enfermo_bias

det_enfermo = np.linalg.det(A_enfermo)
rango_enfermo = np.linalg.matrix_rank(A_enfermo)
print(det_enfermo, rango_enfermo)
  • Columna duplicada: introduce dependencia lineal inmediata.
  • Determinante = 0: A no es invertible.
  • Rango = 3 con 4 columnas: una característica no aporta información nueva.
  • Nombre formal: singularidad y multicolinealidad.

¿Cómo interpretar el ejercicio 100x5 con rango 4?

Si X es de forma 100,5 y el rango es 4, una de las cinco características es redundante: se expresa como combinación lineal de las otras. Es síntoma de multicolinealidad, y te avisa que la ecuación normal puede volverse numéricamente inestable.

¿Ya probaste el ejercicio final? Comparte en los comentarios qué característica identificaste como redundante y cómo lo verificaste con np.linalg.det y np.linalg.matrix_rank.