
Regresión lineal explicada: la recta que midió el calor en Chile y lo que la rompe
Qué es la regresión lineal, cómo se calculan sus coeficientes y cuándo deja de servir, medido con datos diarios de siete ciudades de Chile. La máxima sube 0,33 °C por década en Temuco y baja en Valparaíso, el descenso de gradiente sin escalar no llega a una solución útil, un 5 % de datos con la coma corrida multiplica el error por 4,7 y la recta entrena unas 1.100 veces más rápido que un bosque aleatorio.
En el post de Random Forest hubo un momento incómodo para el bosque: entrenado con los meses fríos de Santiago, no fue capaz de predecir el verano, y una simple regresión lineal erró algo menos de la mitad que él. La recta siguió subiendo porque es lo único que sabe hacer.
Esta vez la recta es la protagonista. Usé los mismos datos diarios de NASA POWER para siete ciudades de Chile, de La Serena a Punta Arenas, y medí en un contenedor con límites de CPU y memoria lo que suele quedar en la teoría: cómo se calculan los coeficientes, qué pasa si no se escalan las variables, cuándo los coeficientes dejan de ser confiables, qué hace un dato mal escrito y cuánto se paga frente a un bosque.
¿Qué es la regresión lineal?
La regresión lineal predice un número como una suma ponderada de variables más una constante. Con una sola variable es una recta; con quince es lo mismo en quince dimensiones. Los pesos se eligen para que la suma de los errores al cuadrado sea lo más chica posible, el método de mínimos cuadrados que Legendre publicó en 1805 y Gauss justificó en 1809.
Aquí la uso para predecir la máxima de mañana con quince variables del día: temperaturas, lluvia, viento, radiación, humedad, presión, punto de rocío, el día del año y la latitud de la ciudad.
Los pesos más grandes: máxima hoy +4,69 y día del año (cos) +0,95 °C por desviación estándar. Mínimos cuadrados y ecuación normal dan los mismos coeficientes hasta 3×10⁻¹³.
Leída así, una regresión lineal es una sola neurona con activación identidad, entrenada con error cuadrático. Cada peso dice cuánto suma o resta su variable, y por eso es de los modelos más fáciles de inspeccionar, siempre que los pesos sean confiables. Más abajo aparece cuándo no lo son.
La pendiente: cuánto sube la temperatura en cada ciudad
El uso más viejo de la regresión es una x y una y. Promedié la máxima diaria de cada año entre 1981 y 2025 y ajusté una recta contra el año. La pendiente es la tendencia, y el intervalo de 95 % resume su incertidumbre bajo los supuestos del ajuste convencional.
La recta punteada indica que el intervalo convencional de 95 % incluye el cero. Los intervalos suponen años independientes y no corrigen autocorrelación ni el haber probado siete ciudades; con el umbral de Bonferroni solo los p-valores convencionales de Temuco y Valparaíso quedan bajo él. La fuente cambia a GEOS-IT en los meses más recientes.
Temuco sube 0,332 °C por década (intervalo entre 0,161 y 0,503), Santiago 0,193 y Puerto Montt 0,167. Valparaíso baja 0,095 °C por década. La Serena, Concepción y Punta Arenas tienen intervalos que incluyen el cero.
Esos intervalos suponen que los años son independientes entre sí, y no lo son del todo: en Temuco, el residuo de un año se parece al del siguiente (autocorrelación de 0,37), lo que estrecha el intervalo más de la cuenta. Además probé siete ciudades a la vez; si exijo el umbral más estricto de Bonferroni, solo los p-valores convencionales de Temuco y Valparaíso quedan bajo ese umbral, y el de Temuco con la salvedad de la autocorrelación. Santiago y Puerto Montt quedan como indicios, no como conclusiones.
La pendiente negativa de Valparaíso tiene el mismo signo que el enfriamiento costero que describieron Falvey y Garreaud en 2009 para el centro y norte de Chile: −0,2 °C por década en estaciones costeras entre 1979 y 2006, mientras la cordillera se calentaba. Pero mis datos son otros (el máximo diario de un reanálisis, no estaciones), otro período, y la celda de Valparaíso probablemente incluye mar. Y de las tres ciudades costeras en ese rango de latitud, La Serena (+0,043) y Concepción (+0,067) no muestran ese enfriamiento. El signo coincide en una; eso no confirma el patrón ni descarta un artefacto del producto.
Otra advertencia: la serie de NASA POWER combina MERRA-2 para el histórico con GEOS-IT en los meses recientes, así que parte de la tendencia final puede venir del cambio de fuente.
¿Cómo se calculan los coeficientes?
Para predecir la máxima de mañana entrené con 74.145 filas ciudad-día de 1984 a 2012 y evalué con 27.256 filas de 2016 al 30 de agosto de 2026. Dejé fuera 2013 a 2015 para que entrenamiento y prueba no queden pegados en el tiempo. Uso ese mismo período de evaluación para todas las comparaciones del post, así que las cifras describen ese período; no son una prueba final guardada sin mirar. Es la misma tabla del post del bosque, con las mismas advertencias sobre la fuente.
Hay tres formas de llegar a los pesos. La ecuación normal arma la matriz AᵀA de 16 por 16 y resuelve ese sistema. LinearRegression de scikit-learn usa scipy.linalg.lstsq, que trabaja sobre los datos sin formar esa matriz y es más estable numéricamente. Y el descenso de gradiente mueve los pesos poco a poco en la dirección que baja el error.
Cuarenta veces más lento que el tiempo real.
Al doble del tiempo real.
La ecuación normal y lstsq difirieron como máximo en 3×10⁻¹³ en los coeficientes. El descenso de gradiente sin escalar tardó unas 27 veces más que escalado y terminó con un error inservible.
La ecuación normal fue la más rápida, 1,2 ms contra 11,9 ms. Parte de esa ventaja es que medí solo la resolución del sistema, mientras LinearRegression además valida y centra los datos. Tampoco la vuelve recomendable: formar AᵀA eleva al cuadrado el número de condición de los datos, y el de AᵀA llegó aquí a 4,1×10⁷, por la mezcla de escalas (presión cerca de 100, senos entre −1 y 1) y por las variables que se parecen. Con este número alcanzó; cuando crece, esa ruta pierde precisión antes que lstsq.
¿Hay que escalar las variables?
Para mínimos cuadrados, no: escalar o no escalar dio exactamente el mismo error de prueba, 1,697 °C. Para descenso de gradiente cambia todo. La guía de scikit-learn lo dice sin rodeos: el descenso de gradiente estocástico es sensible a la escala de las variables.
acercamiento a la corrida escalada, escala lineal
- variables crudas
- variables escaladas
- mínimos cuadrados 4,56
Sin escalar, el error más bajo en 60 pasadas fue 1,6×10²³; con tolerancia de 10⁻⁴ el ajuste se detuvo a las 614 iteraciones y erró los días de evaluación por 9,8×10¹¹ °C en promedio. Escalado, se detuvo a las 25 iteraciones con 1,692 °C, cerca de mínimos cuadrados.
El motivo es el tamaño del paso. La presión viene en kilopascales, entre 87 y 104, la humedad llega a 100 y el seno del día del año va de −1 a 1. Un paso que sirve para una variable es enorme para la otra, y el error rebota en vez de bajar. Con SGDRegressor (tolerancia de 10⁻⁴, máximo de 1.000 pasadas, el resto por defecto), el ajuste sin escalar se detuvo a las 614 iteraciones, lejos del mínimo, con un error medio de 9,8×10¹¹ °C en la evaluación. Escalado, se detuvo a las 25 iteraciones con 1,692 °C. Otra tasa de aprendizaje podría haber rescatado la versión sin escalar; lo que muestra el experimento es que esta configuración, la habitual, no lo hace.
Cuando los coeficientes dejan de ser confiables: colinealidad
Si dos variables cuentan casi lo mismo, la recta puede repartir el peso entre ellas de muchas formas con un error parecido. El factor de inflación de varianza (VIF) mide cuánto se puede explicar cada variable con las demás: la humedad llega a 33, el punto de rocío a 23 y la máxima de hoy a 15.
Para ver el efecto, ajusté la recta 200 veces sobre submuestras de 3.000 filas tomadas al azar y miré dónde caía cada coeficiente, con mínimos cuadrados y con Ridge, que penaliza los pesos grandes. Es una prueba de estabilidad, no un intervalo del modelo final: las submuestras son chicas e ignoran que las filas vienen agrupadas por ciudad y fecha.
- humedadVIF 33,217 % con el signo minoritario
- punto de rocíoVIF 23,346 % con el signo minoritario
- máxima hoy (fuera de escala: 4,69 / 2,82)VIF 15,4
- mínima hoyVIF 8,410 % con el signo minoritario
- día del año (cos)VIF 6,0
- radiaciónVIF 5,923 % con el signo minoritario
- latitudVIF 4,6
- presiónVIF 4,21 % con el signo minoritario
- viento N-SVIF 2,0
- vientoVIF 1,8
- lluvia hoyVIF 1,617 % con el signo minoritario
- viento E-OVIF 1,5
- día del año (sen)VIF 1,4
- lluvia ayerVIF 1,35 % con el signo minoritario
- cambio presiónVIF 1,2
Con mínimos cuadrados y 3.000 filas, punto de rocío sale con el signo minoritario en el 46 % de las submuestras; con Ridge, 2 variables se dan vuelta alguna vez. Con submuestras del tamaño completo (74.145 filas) solo punto de rocío sigue cambiando (28 %). En esos ajustes de 3.000 filas, Ridge erró 1,79 °C contra 1,70 °C; con la tabla completa, 1,698 contra 1,696 °C.
Con mínimos cuadrados y 3.000 filas, el punto de rocío salió con el signo minoritario en el 46 % de las submuestras, la radiación en el 22,5 %, la humedad en el 16,5 % y la mínima en el 9,5 %, además de variables con coeficientes cercanos a cero, como la lluvia de hoy (16,5 %). Con Ridge, ninguna de las variables de VIF alto cambió de signo; solo la lluvia de hoy y la de ayer, con coeficientes muy cercanos a cero, lo siguieron haciendo (11 % y 0,5 %).
Dos matices que cambian la lectura. Primero, gran parte de esa inestabilidad es de muestra chica: repetí la prueba con 50 submuestras del tamaño completo, 74.145 filas, y solo el punto de rocío siguió cambiando de signo (28 %); las demás variables quedaron siempre con el mismo. Segundo, Ridge no sale gratis: con α = 300, elegido a mano y no por validación, esas submuestras de 3.000 filas erraron en promedio 1,79 °C contra 1,70 °C de mínimos cuadrados. Entrenado con la tabla completa, donde ese α pesa mucho menos, Ridge quedó en 1,698 °C, prácticamente igual que mínimos cuadrados (1,697).
La regla práctica se mantiene: si vas a leer un coeficiente como “esta variable sube la temperatura”, primero revisa si su signo sobrevive a un remuestreo del tamaño real.
Un dato con la coma corrida: outliers y Huber
Mínimos cuadrados eleva cada error al cuadrado, así que un dato muy lejano pesa muchísimo. Para medirlo, multipliqué por 10 una parte de las máximas de entrenamiento, como si alguien hubiera escrito 243 en vez de 24,3, y comparé mínimos cuadrados con la regresión de Huber: su pérdida es cuadrática cerca de cero y lineal en las colas, con un umbral que depende de una escala que estima el propio modelo, y la implementación de scikit-learn agrega una penalización L2 muy pequeña por defecto.
- mínimos cuadrados
- Huber
- 0 % · 0 filas · pendiente 0,93 vs 0,95 · MAE con 15 variables 1,70 vs 1,69 °C
- 0,1 % · 74 filas · pendiente 0,95 vs 0,95 · MAE con 15 variables 1,69 vs 1,69 °C
- 1 % · 741 filas · pendiente 1,00 vs 0,95 · MAE con 15 variables 2,12 vs 1,69 °C
- 5 % · 3.707 filas · pendiente 1,39 vs 0,95 · MAE con 15 variables 7,89 vs 1,69 °C
Con el 5 % de las filas corruptas, la pendiente de mínimos cuadrados pasa de 0,93 a 1,39; la de Huber queda en 0,95. Con las 15 variables, el error de mínimos cuadrados sube a 7,89 °C y el de Huber se queda en 1,69 °C.
Con 74 filas corruptas (0,1 %) el error prácticamente no cambió. Con 741 (1 %), el error de mínimos cuadrados subió de 1,70 a 2,12 °C. Con 3.707 (5 %) llegó a 7,89 °C, 4,7 veces más. Huber quedó en 1,69 °C en los cuatro casos. Es una sola realización, con un sorteo por nivel, y con errores extremos a propósito: sirve para ver la diferencia de comportamiento, no como estimación de cuántos datos malos trae NASA POWER.
Lo que la recta deja sin explicar: los residuos
El error medio de 1,70 °C es un promedio, y los promedios esconden cosas. Un residuo es la máxima real menos la predicha; mirarlos por grupo dice dónde falla la recta de forma sistemática.
por ciudad: media ± una desviación estándar
- La Serena+0,32 ± 1,86
- Valparaíso−0,54 ± 1,07
- Santiago+0,15 ± 3,06
- Concepción+0,28 ± 2,43
- Temuco+0,49 ± 2,89
- Puerto Montt+0,16 ± 2,13
- Punta Arenas+0,05 ± 1,73
Media global +0,13 °C y desviación estándar 2,28 °C; el 4,1 % de los días falla por más de 5 °C. Las medias por mes solo se mueven entre −0,08 y +0,38 °C: en las medias, las ciudades varían más que los meses, lo que no descarta patrones estacionales en la dispersión. Agregar la ciudad como variable bajó el error a 1,65 °C.
En Valparaíso la recta predice en promedio 0,54 °C de más, con poca dispersión, y Temuco 0,49 °C de menos. Tenía dos explicaciones posibles: un efecto propio de cada ciudad que la latitud no captura, o una deriva entre períodos (Temuco es la ciudad que más se calienta y Valparaíso la que se enfría). Lo probé agregando la ciudad como variable. El error medio bajó de 1,70 a 1,65 °C y el sesgo de Valparaíso casi desapareció, de −0,54 a −0,11 °C, pero Temuco siguió en +0,39 °C. En Valparaíso pesaba sobre todo la ciudad; lo que queda en Temuco es compatible con una deriva temporal, aunque esta prueba no la aísla.
La dispersión tampoco es pareja: 3,06 °C en Santiago contra 1,07 °C en Valparaíso. Un intervalo de predicción común para todas las ciudades podría quedar mal calibrado en algunas; habría que comprobar su cobertura por ciudad antes de publicarlo.
Regresión lineal o Random Forest
Con la misma tabla, un bosque de 200 árboles erró 1,50 °C y la recta 1,70 °C. El bosque gana en precisión. Lo que cuesta esa diferencia se mide en tiempo y tamaño.
A un 30 % del tiempo real.
A tiempo real. No se ejecutaron mil consultas: es la mediana de una fila multiplicada por mil.
En esta corrida la recta entrenó unas 1.100 veces más rápido y respondió unas 14 veces más rápido. La recta tiene 15 coeficientes y un intercepto; el bosque, 3.011.352 nodos, que no son unidades comparables de memoria.
La recta cabe en una línea de código y se puede auditar peso por peso. El bosque capta relaciones que la recta no ve, pero sus predicciones quedan dentro de lo que vio: la recta, en cambio, continúa más allá del rango. En el caso controlado del post anterior eso le dio ventaja (1,86 °C contra 3,76 °C en veranos que ningún modelo vio), pero no es una garantía: en los pocos días de evaluación que superaron el máximo de entrenamiento de su ciudad, la recta erró más que el bosque en las tres ciudades donde pasó.
Corregido el 16 de septiembre de 2026. Ese caso controlado mezclaba los años de entrenamiento y de prueba antes de separar las estaciones; rehecho con los períodos separados, las cifras pasaron de 1,81 y 3,43 °C a 1,86 y 3,76 °C. La ventaja de la recta se mantiene.
Dónde vive una regresión lineal en un sistema real
- Tendencias y reportes. Cuando la pregunta es “cuánto cambia esto por año”, la pendiente con su intervalo es la respuesta, como en el marcador del clima que mantengo, donde comparo pronósticos contra lo que pasó.
- Línea base. Antes de un modelo complejo, una recta entrenada en milisegundos dice cuánto aporta lo demás. Aquí el bosque le sacó 0,2 °C.
- Donde cada microsegundo cuenta. Una predicción es un producto punto: se puede calcular en una base de datos, en un navegador o en un microcontrolador sin cargar nada. Los 0,26 ms que medí incluyen el paso por scikit-learn; el producto punto solo, que no medí aparte, debería costar bastante menos.
- Donde hay que explicar la decisión. Un peso por variable se puede mostrar a quien tiene que aprobar el modelo, siempre que antes se haya revisado la colinealidad.
Cuándo la elegiría: relaciones aproximadamente lineales, necesidad de interpretar, de responder muy rápido o de continuar una tendencia con cuidado. Cuándo no: relaciones con umbrales o interacciones fuertes, datos con errores gruesos sin limpiar (o, en ese caso, Huber en vez de mínimos cuadrados) y cuando cada décima de grado vale más que la simplicidad.
Fuentes
- Legendre, A.-M. (1805). Nouvelles méthodes pour la détermination des orbites des comètes. París. Apéndice «Sur la méthode des moindres quarrés». Escaneo en Internet Archive.
- Gauss, C. F. (1809). Theoria motus corporum coelestium in sectionibus conicis solem ambientium. Hamburgo. Escaneo en Internet Archive.
- Huber, P. J. (1964). «Robust Estimation of a Location Parameter». The Annals of Mathematical Statistics, 35(1), 73–101. DOI 10.1214/aoms/1177703732.
- Hoerl, A. E. y Kennard, R. W. (1970). «Ridge Regression: Biased Estimation for Nonorthogonal Problems». Technometrics, 12(1), 55–67. DOI 10.1080/00401706.1970.10488634.
- Falvey, M. y Garreaud, R. D. (2009). «Regional cooling in a warming world: Recent temperature trends in the southeast Pacific and along the west coast of subtropical South America (1979–2006)». Journal of Geophysical Research: Atmospheres, 114(D4). DOI 10.1029/2008JD010519.
- scikit-learn,
LinearRegression(implementada conscipy.linalg.lstsq), la guía de descenso de gradiente estocástico, con la advertencia sobre escalar las variables, yHuberRegressor. - NASA POWER, Daily API y fuentes de datos.
Comentarios
Todavía no hay comentarios. El primero es tuyo.