R² (Coeficiente de Determinación)

El responde una pregunta diferente: "¿Qué proporción de la variación en los datos explica mi modelo?"

A diferencia de MAE o RMSE que miden el error absoluto, R² te dice qué tan bien tu modelo captura los patrones en los datos comparado con simplemente predecir el promedio.

La fórmula

R2=1SSresSStot=1(yiy^i)2(yiyˉ)2R^2 = 1 - \frac{SS_{res}}{SS_{tot}} = 1 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2}

¿Qué significa cada parte?

  • yiy_i — Valor real de la observación ii
  • y^i\hat{y}_i — Valor predicho por el modelo
  • yˉ\bar{y} — Promedio de todos los valores reales
  • SSres=(yiy^i)2SS_{res} = \sum(y_i - \hat{y}_i)^2 — Suma de errores cuadrados del modelo (residuos)
  • SStot=(yiyˉ)2SS_{tot} = \sum(y_i - \bar{y})^2 — Variación total en los datos

La intuición

Imagina que no tienes ningún modelo y solo predices el promedio para todo. El error sería SStotSS_{tot}.

Ahora, con tu modelo, el error es SSresSS_{res}.

R² mide cuánto mejoró tu modelo respecto a ese baseline:

  • Si SSres=0SS_{res} = 0 (predicción perfecta) entonces R² = 1
  • Si SSres=SStotSS_{res} = SS_{tot} (igual que el promedio) entonces R² = 0
  • Si SSres>SStotSS_{res} > SS_{tot} (peor que el promedio) entonces R² < 0

Ejemplo numérico

Datos: [2, 4, 6, 8] con promedio = 5

yy predicho(y - y pred)²(y - promedio)²
22.50.259
44.001
65.50.251
88.009

SS res = 0.5, SS tot = 20

R2=10.520=10.025=0.975R^2 = 1 - \frac{0.5}{20} = 1 - 0.025 = 0.975

El modelo explica el 97.5% de la variación en los datos.


Implementación

MinervaR2.java
1
2
3
4
import com.minerva.metrics.RegressionMetrics.RegressionMetrics;
RegressionMetrics metrics = new RegressionMetrics();
double r2 = metrics.R2(actual, predicted);

API Reference

R2(Vector actual, Vector predicted)

Example.java
1
double r2 = metrics.R2(actual, predicted);
ParámetroTipoDescripción
actualVectorValores reales
predictedVectorValores predichos

Retorna: double

Interpretación

Valor de R²Significado
1.0Predicción perfecta
0.9+Excelente
0.7 - 0.9Bueno
0.5 - 0.7Moderado
0 - 0.5Débil
< 0Peor que predecir el promedio

¿Cuándo usar R²?

Recomendado:

  • Para evaluar qué tan bien el modelo captura patrones
  • Para comparar con un baseline simple

No recomendado:

  • Para comparar modelos con diferente número de features (usa R² Ajustado)