Contenido del curso
Modelo Predictivo
Tipos de Aprendizaje
Herramientas para IA
Ciclo de Vida ML
Ética en IA
Regresión lineal manual con NumPy
Resumen
Implementar una regresión lineal manual con NumPy te ayuda a entender qué ocurre detrás de cada predicción antes de usar librerías que lo resuelven en una línea. Esta guía es para quienes ya conocen la teoría y quieren ver el modelo en código, paso a paso, con datos sintéticos y la fórmula de mínimos cuadrados.
¿Por qué programar una regresión lineal sin librerías?
Aunque Scikit-Learn y Statsmodels resuelven el modelo casi automáticamente, escribir el algoritmo a mano evita errores de interpretación y te da claridad sobre cada coeficiente que vas a leer después.
La idea es comparar tres enfoques en el mismo flujo:
- Implementación manual con NumPy aplicando mínimos cuadrados.
- Ajuste rápido con Scikit-Learn para la práctica moderna.
- Análisis estadístico detallado con Statsmodels para interpretar resultados.
¿Para qué sirve aprender regresión lineal desde cero? Para entender la lógica matemática del modelo, detectar supuestos rotos y leer con criterio los outputs de cualquier librería.
¿Cómo se generan los datos sintéticos para probar el modelo?
Antes de entrenar, necesitas datos controlados. Usar datos sintéticos te permite saber de antemano cuáles deberían ser los coeficientes y comparar contra la salida del modelo [02:00].
El montaje del experimento se hace así:
- Fijas una semilla con valor 42 para que los resultados sean reproducibles.
- Generas 200 observaciones con distribución normal de media 0 y desviación estándar 1.
- Construyes la variable objetivo multiplicando X por 2, sumando 1 y agregando ruido normal con desviación 0.5.
Para la versión múltiple, repites el proceso generando varias variables predictoras con distintos coeficientes, lo que te permite ver cómo cambia la interpretación cuando hay más de un regresor involucrado.
¿Cómo se entrena una regresión lineal manual con mínimos cuadrados?
El entrenamiento se encapsula en una clase llamada RegresionLinealManual, que arranca con coeficiente e intercepto vacíos y los calcula al ajustar [03:30].
El flujo dentro del método de entrenamiento sigue esta lógica:
- Conviertes el vector unidimensional en una matriz de una sola columna.
- Agregas una columna de unos al inicio para representar el intercepto, ese punto donde la recta corta el eje en cero.
- Calculas la transpuesta de X y aplicas el producto punto entre X transpuesta y X.
- Multiplicas X transpuesta por Y, también con producto punto.
- Resuelves el sistema lineal para obtener los parámetros sin invertir matrices a mano.
De la salida tomas el primer valor como intercepto (recuerda que en programación se cuenta desde cero) y los demás como coeficientes. Todo se guarda en self para usarlo después.
¿Qué es el intercepto en una regresión lineal? Es el valor que toma la variable objetivo cuando todas las variables predictoras valen cero. Marca dónde la recta cruza el eje vertical.
¿Cómo se generan las predicciones del modelo?
Una vez entrenado, predecir es directo. Tomas tu nueva X, la conviertes a matriz de una columna y aplicas la fórmula: intercepto más el producto punto entre X y los coeficientes guardados en self.
Esa salida es y_pred, el conjunto de valores estimados que vas a contrastar contra los reales para medir qué tan bueno es el ajuste.
¿Cómo se evalúa el ajuste con R cuadrada?
La evaluación también se programa a mano para entender qué mide cada métrica. La función recibe X y Y, predice internamente y calcula los errores [07:00].
Las tres piezas que necesitas calcular son:
- SS_res: la suma de los residuos al cuadrado, es decir, la distancia entre cada observación real y su predicción, elevada al cuadrado.
- SS_tot: la suma de las diferencias entre cada Y real y el promedio de Y, también al cuadrado.
- R²: uno menos el cociente entre SS_res y SS_tot.
Los cuadrados aparecen para neutralizar signos. Si una predicción quedó por encima del valor real, la diferencia es positiva; si quedó por debajo, es negativa. Al elevar al cuadrado, todas las distancias suman en la misma dirección y obtienes un valor absoluto del error.
¿Qué significa una R cuadrada cercana a uno? Que el modelo explica casi toda la variabilidad de los datos. Cuanto más cerca de 1, mejor ajusta la recta a las observaciones reales.
¿Qué resultados arroja el modelo manual?
Al entrenar con los datos sintéticos y mandar a imprimir, los valores que devuelve la regresión son consistentes con los parámetros que usamos al generar los datos:
- Intercepto de 1.045, muy cercano al 1 que sumamos al construir Y.
- Coeficiente de 2.050, prácticamente igual al 2 por el que multiplicamos X.
- R² de 0.938, lo que indica un ajuste sólido.
Ese 0.938 confirma que la implementación manual con NumPy y mínimos cuadrados está reproduciendo bien la relación entre las variables. A partir de aquí tiene sentido comparar contra librerías especializadas para ver dónde gana cada enfoque.
¿Te gustaría ver primero la versión con Scikit-Learn o la interpretación estadística con Statsmodels? Cuéntame en los comentarios qué parte del código manual te quedó más clara y cuál quieres que repasemos.