Aproximación de datos · Tema 23

Ajuste por mínimos cuadrados

Cómo encontrar un modelo que represente la tendencia de datos imperfectos, medir sus residuos y evitar confundir una curva flexible con una buena explicación.

01 · Un objetivo diferente

Cuando no conviene atravesar todos los puntos

Interpolar exige que el modelo pase exactamente por cada dato. Esa condición es apropiada cuando los valores son exactos, pero las mediciones reales suelen contener ruido, redondeo o variaciones que el modelo no pretende explicar.

El ajuste busca una función sencilla que se acerque al conjunto completo. Para un modelo ŷ=f(x;θ), la diferencia vertical en el dato i es el residuo:

rᵢ = yᵢ−ŷᵢ = yᵢ−f(xᵢ;θ)

02 · Función objetivo

Por qué minimizar cuadrados

El criterio de mínimos cuadrados ordinarios es:

SSE(θ)=Σi=1m[yᵢ−f(xᵢ;θ)]² = Σrᵢ²

Elevar al cuadrado aporta tres propiedades útiles:

  • los errores positivos y negativos no se cancelan;
  • los residuos grandes reciben una penalización mayor;
  • la función objetivo es derivable y, para modelos lineales en sus parámetros, conduce a un problema algebraico.

La última propiedad hace que el método sea eficiente. La segunda también explica su principal debilidad: un valor atípico puede ejercer mucha influencia.

03 · Modelo más simple

Ajustar una recta

Supongamos que queremos representar los datos mediante:

ŷᵢ=a+bxᵢ

El parámetro a es la ordenada al origen y b es la pendiente. La función objetivo queda:

SSE(a,b)=Σ[yᵢ−(a+bxᵢ)]²

Un mínimo interior debe satisfacer que ambas derivadas parciales sean cero:

∂SSE/∂a=−2Σ[yᵢ−a−bxᵢ]=0
∂SSE/∂b=−2Σxᵢ[yᵢ−a−bxᵢ]=0

Al reorganizar aparecen las ecuaciones normales.

04 · Derivación

Las ecuaciones normales de la recta

ma+bΣxᵢ=Σyᵢ
aΣxᵢ+bΣxᵢ²=Σxᵢyᵢ

Podríamos resolver este sistema de dos ecuaciones. Sin embargo, al introducir las medias x̄ e ȳ obtenemos fórmulas más interpretables:

b = Σ(xᵢ−x̄)(yᵢ−ȳ) / Σ(xᵢ−x̄)²
a = ȳ−bx̄

El numerador de b mide cómo varían juntas x e y; el denominador mide la variación de x. Si todos los valores de x son iguales, no existe una pendiente identificable.

05 · Cálculo manual

Una recta para cuatro mediciones

Tomemos los puntos (1,2), (2,3), (3,5) y (4,4). Sus medias son x̄=2.5 e ȳ=3.5.

Cálculo de pendiente y residuos.
xᵢyᵢŷᵢ=1.5+0.8xᵢrᵢ=yᵢ−ŷᵢ
122.3−0.3
233.1−0.1
353.91.1
444.7−0.7
Σ(xᵢ−x̄)(yᵢ−ȳ)=4,   Σ(xᵢ−x̄)²=5
b=4/5=0.8,   a=3.5−0.8·2.5=1.5

La recta ajustada es ŷ=1.5+0.8x. No atraviesa todos los puntos, pero sus parámetros minimizan el error cuadrático total.

06 · Condiciones del óptimo

Los residuos quedan equilibrados

Las dos ecuaciones obtenidas al derivar también pueden escribirse:

Σrᵢ=0,    Σxᵢrᵢ=0

La primera dice que los residuos positivos y negativos suman cero. La segunda dice que no conservan una tendencia lineal con x. Geométricamente, el vector de residuos es perpendicular a las columnas utilizadas por el modelo.

Estas propiedades son comprobaciones útiles, pero no demuestran por sí solas que la recta sea un modelo adecuado. Un gráfico de residuos puede revelar curvatura, cambios de variabilidad o valores atípicos.

07 · Evaluar el ajuste

SSE, MSE, RMSE y R²

Métricas frecuentes para datos observados.
MétricaDefiniciónInterpretación
SSEΣrᵢ²Error cuadrático total; depende de la cantidad de datos.
MSESSE/mError cuadrático medio descriptivo.
RMSE√MSEError típico en las mismas unidades que y.
R²1−SSE/SSTFracción de variabilidad explicada respecto de usar ȳ.
SST=Σ(yᵢ−ȳ)²

En el ejemplo, SSE=1.8, RMSE=√(1.8/4)≈0.671, SST=5 y R²=1−1.8/5=0.64.

08 · Implementación directa

Regresión lineal simple en JavaScript

function ajustarRecta(puntos) {
  if (puntos.length < 2) throw new Error("Faltan datos");
  const n = puntos.length;
  const mediaX = puntos.reduce((s, [x]) => s + x, 0) / n;
  const mediaY = puntos.reduce((s, [, y]) => s + y, 0) / n;

  let numerador = 0;
  let denominador = 0;
  for (const [x, y] of puntos) {
    numerador += (x - mediaX) * (y - mediaY);
    denominador += (x - mediaX) ** 2;
  }
  if (denominador === 0) throw new Error("Todos los valores x son iguales");

  const b = numerador / denominador;
  const a = mediaY - b * mediaX;
  const residuos = puntos.map(([x, y]) => y - (a + b * x));
  const sse = residuos.reduce((s, r) => s + r * r, 0);
  const sst = puntos.reduce((s, [, y]) => s + (y - mediaY) ** 2, 0);

  return {
    a, b, residuos, sse,
    rmse: Math.sqrt(sse / n),
    r2: sst === 0 ? (sse === 0 ? 1 : NaN) : 1 - sse / sst,
    predecir: x => a + b * x
  };
}

const modelo = ajustarRecta([[1, 2], [2, 3], [3, 5], [4, 4]]);
console.log(modelo.a, modelo.b, modelo.sse, modelo.r2);
// 1.5 0.8 1.8 0.64

Centrar las fórmulas alrededor de las medias evita restar sumas muy grandes y suele ser más estable que aplicar literalmente las ecuaciones normales escalares.

09 · Generalización

El problema matricial

Muchos modelos pueden escribirse como una combinación lineal de funciones conocidas:

ŷᵢ=c₀φ₀(xᵢ)+c₁φ₁(xᵢ)+…+cₚφₚ(xᵢ)

Al colocar cada función base en una columna de la matriz de diseño A, obtenemos:

Ac≈y,    minc ‖Ac−y‖₂²

En una recta, las columnas son 1 y x. Para un polinomio de grado p, son 1,x,x²,…,xᵖ. En regresión múltiple pueden representar distintas variables de entrada.

La condición de perpendicularidad del residuo produce:

Aᵀ(Ac−y)=0   ⇒   AᵀAc=Aᵀy

Estas son las ecuaciones normales generales.

10 · Cálculo confiable

Resolver sin empeorar el condicionamiento

Formar AᵀA es cómodo, pero aproximadamente eleva al cuadrado el número de condición de A. Si las columnas tienen escalas muy diferentes o casi dependen unas de otras, los coeficientes pueden perder precisión.

  • QR: factoriza A=QR y resuelve Rc=Qᵀy; es la opción general habitual.
  • SVD: es más costosa, pero diagnostica rango deficiente y maneja problemas muy sensibles.
  • Ecuaciones normales: pueden ser suficientes en problemas pequeños y bien condicionados, pero no deberían ser la elección automática.

11 · Ajuste polinómico

Una implementación educativa mediante QR

El siguiente código usa Gram-Schmidt modificado. Es adecuado para experimentar con pocos grados; bibliotecas numéricas profesionales emplean variantes más robustas basadas en reflexiones de Householder.

function minimosCuadradosQR(A, y) {
  const m = A.length;
  const n = A[0].length;
  if (m < n) throw new Error("Se requieren al menos tantas filas como columnas");
  const columnas = Array.from({ length: n }, (_, j) =>
    A.map(fila => fila[j]));
  const Q = Array.from({ length: n }, () => Array(m).fill(0));
  const R = Array.from({ length: n }, () => Array(n).fill(0));

  for (let j = 0; j < n; j++) {
    const v = columnas[j].slice();
    for (let i = 0; i < j; i++) {
      R[i][j] = Q[i].reduce((s, q, k) => s + q * columnas[j][k], 0);
      for (let k = 0; k < m; k++) v[k] -= R[i][j] * Q[i][k];
    }
    R[j][j] = Math.hypot(...v);
    if (R[j][j] < 1e-12) throw new Error("Columnas dependientes");
    Q[j] = v.map(valor => valor / R[j][j]);
  }

  const z = Q.map(columna =>
    columna.reduce((s, q, i) => s + q * y[i], 0));
  const c = Array(n).fill(0);
  for (let i = n - 1; i >= 0; i--) {
    let suma = z[i];
    for (let j = i + 1; j < n; j++) suma -= R[i][j] * c[j];
    c[i] = suma / R[i][i];
  }
  return c;
}

function ajustarPolinomio(puntos, grado) {
  if (!Number.isInteger(grado) || grado < 0) throw new Error("Grado inválido");
  const A = puntos.map(([x]) =>
    Array.from({ length: grado + 1 }, (_, j) => x ** j));
  const c = minimosCuadradosQR(A, puntos.map(([, y]) => y));
  return {
    coeficientes: c,
    predecir: x => c.reduceRight((valor, coef) => coef + x * valor, 0)
  };
}

const parabola = ajustarPolinomio([[-1, 2], [0, 1], [1, 2], [2, 5]], 2);
console.log(parabola.coeficientes); // aproximadamente [1, 0, 1]

12 · Complejidad del modelo

Más grado siempre reduce SSE, pero no siempre mejora

Al agregar una columna a la matriz de diseño, el modelo anterior sigue siendo una posibilidad poniendo el coeficiente nuevo en cero. Por eso el SSE de entrenamiento no puede aumentar al subir el grado.

Esto no implica que las predicciones sean mejores. Un polinomio demasiado flexible puede aprender fluctuaciones particulares de la muestra: es sobreajuste.

  • Separá datos de entrenamiento y validación.
  • Compará el error fuera de la muestra, no solo el SSE usado para ajustar.
  • Preferí el modelo más simple que capture la estructura relevante.
  • No extrapoles polinomios de grado alto sin una justificación fuerte.

13 · Diagnóstico

Qué buscar en los residuos

Mínimos cuadrados ordinarios describe bien una relación cuando la forma media está representada por el modelo y los errores se comportan razonablemente. Un gráfico de residuos contra predicciones o contra x ayuda a detectar:

  • curvatura: falta un término o la familia del modelo es incorrecta;
  • forma de embudo: la variabilidad cambia con el nivel;
  • grupos: puede faltar una variable explicativa;
  • puntos aislados: posibles valores atípicos o mediciones erróneas;
  • secuencias: los errores pueden estar correlacionados en el tiempo.

Si las observaciones tienen precisiones conocidas y diferentes, se usan mínimos cuadrados ponderados. Si preocupan los valores atípicos, existen pérdidas robustas que penalizan menos los residuos extremos.

14 · Exploración interactiva

Laboratorio: grado, ruido y valores atípicos

Cambiá el grado del polinomio y desplazá el punto resaltado. La curva turquesa es el ajuste; la línea coral sobre cada muestra representa su residuo vertical.

EXPERIMENTO 23

Ajustar la tendencia sin perseguir cada punto

grado 1 · 11 datos

Los resultados numéricos aparecen debajo.
SSE—
RMSE—
R²—
Residuo máximo—

Una recta resume la tendencia sin atravesar todas las observaciones.

Preguntas para explorar

  1. Desplazá el punto resaltado y observá cuánto gira una recta por un único residuo grande.
  2. En la tendencia cuadrática, compará los grados uno y dos.
  3. Aumentá el grado hasta seis: el SSE baja, pero examiná las curvas cerca de los extremos.
  4. Buscá un caso donde R² mejore mientras la forma del ajuste se vuelve menos razonable.

15 · Comprensión

Confusiones frecuentes

«El mejor ajuste pasa por la mayor cantidad de puntos»

El criterio minimiza la suma de cuadrados. Una recta puede no atravesar ninguna muestra y aun así ser la óptima dentro de su familia.

«Los residuos son errores de programación»

Son diferencias entre observaciones y predicciones. Pueden representar ruido, variables omitidas o una forma de modelo incompleta.

«R²=0.9 significa 90 % de precisión»

R² compara variabilidad explicada con un modelo constante; no es un porcentaje universal de exactitud.

«El mayor grado con el menor SSE es siempre preferible»

El SSE de entrenamiento favorece modelos flexibles. La validación y el conocimiento del problema ayudan a elegir complejidad.

«Hay que calcular la inversa de AᵀA»

No. Resolver mediante QR o SVD suele ser más estable y evita formar una inversa innecesaria.

16 · Práctica guiada

Ejercicios

Ejercicio 1: residuo

Para el modelo ŷ=2+3x y el dato (2,9), calculá el residuo.

Ver solución

La predicción es ŷ=2+3·2=8. Entonces r=y−ŷ=9−8=1.

Ejercicio 2: propiedad de la media

Una recta con intercepto tiene x̄=4, ȳ=10 y pendiente b=1.5. Calculá a.

Ver solución

a=ȳ−bx̄=10−1.5·4=4.

Ejercicio 3: métricas

Si los residuos son [1,−2,1], calculá SSE y RMSE.

Ver solución razonada

SSE=1²+(−2)²+1²=6 y RMSE=√(6/3)=√2≈1.414.

Ejercicio 4: matriz de diseño

Escribí la fila de la matriz de diseño para x=2 en un polinomio de grado tres.

Ver solución

Las funciones base son 1,x,x²,x³, por lo que la fila es [1,2,4,8].

Ejercicio 5: residuos equilibrados

Comprobá con JavaScript que los residuos del ejemplo suman aproximadamente cero.

Ver una posible solución
const puntos = [[1, 2], [2, 3], [3, 5], [4, 4]];
const a = 1.5;
const b = 0.8;
const residuos = puntos.map(([x, y]) => y - (a + b * x));
const suma = residuos.reduce((acumulado, r) => acumulado + r, 0);
const sumaPonderada = residuos.reduce((acumulado, r, i) =>
  acumulado + puntos[i][0] * r, 0);

console.log(residuos);
console.log(suma, sumaPonderada);
// [-0.3, -0.1, 1.1, -0.7]
// valores cercanos a 0 por el redondeo binario

17 · Síntesis

Ideas para recordar

  • Ajustar aproxima una tendencia; interpolar obliga a atravesar todos los datos.
  • Un residuo es la observación menos la predicción.
  • Mínimos cuadrados minimiza la suma de residuos al cuadrado.
  • La recta ajustada con intercepto pasa por el punto de medias.
  • En el óptimo, los residuos son ortogonales a las columnas del modelo.
  • RMSE conserva las unidades de la variable observada.
  • R² necesita contexto y no demuestra causalidad ni capacidad de extrapolación.
  • QR y SVD son preferibles a invertir las ecuaciones normales.
  • Menor error de entrenamiento no garantiza mejor generalización.

En el próximo tema utilizaremos valores discretos para aproximar otra operación fundamental: la diferenciación numérica.