R² (Coeficiente de Determinación)
El R² 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
¿Qué significa cada parte?
- — Valor real de la observación
- — Valor predicho por el modelo
- — Promedio de todos los valores reales
- — Suma de errores cuadrados del modelo (residuos)
- — 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 .
Ahora, con tu modelo, el error es .
R² mide cuánto mejoró tu modelo respecto a ese baseline:
- Si (predicción perfecta) entonces R² = 1
- Si (igual que el promedio) entonces R² = 0
- Si (peor que el promedio) entonces R² < 0
Ejemplo numérico
Datos: [2, 4, 6, 8] con promedio = 5
| y | y predicho | (y - y pred)² | (y - promedio)² |
|---|---|---|---|
| 2 | 2.5 | 0.25 | 9 |
| 4 | 4.0 | 0 | 1 |
| 6 | 5.5 | 0.25 | 1 |
| 8 | 8.0 | 0 | 9 |
SS res = 0.5, SS tot = 20
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ámetro | Tipo | Descripción |
|---|---|---|
actual | Vector | Valores reales |
predicted | Vector | Valores predichos |
Retorna: double
Interpretación
| Valor de R² | Significado |
|---|---|
| 1.0 | Predicción perfecta |
| 0.9+ | Excelente |
| 0.7 - 0.9 | Bueno |
| 0.5 - 0.7 | Moderado |
| 0 - 0.5 | Débil |
| < 0 | Peor 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)