R² Ajustado
El R² Ajustado resuelve un problema del R² normal: si agregas más variables a tu modelo, R² siempre sube (o se mantiene igual), incluso si las variables son ruido.
R² Ajustado penaliza los modelos con muchas variables, premiando la simplicidad.
La fórmula
¿Qué significa cada parte?
- — El R² normal (sin ajustar)
- — Número de observaciones (filas de datos)
- — Número de features (columnas/variables predictoras)
- — Factor de penalización
¿Cómo funciona la penalización?
El factor es siempre mayor o igual a 1, y crece cuando:
- Tienes más features (p grande)
- Tienes menos datos (n pequeño)
Esto significa que se amplifica, reduciendo el R² ajustado.
Ejemplo
| Modelo | Features (p) | R² | R² Ajustado |
|---|---|---|---|
| A | 2 | 0.85 | 0.84 |
| B | 10 | 0.87 | 0.80 |
| C | 50 | 0.90 | 0.65 |
El modelo A tiene menos features pero mejor R² ajustado. Es probablemente el mejor modelo.
Implementación
Minerva proporciona R² Ajustado directamente. En scikit-learn debes calcularlo manualmente:
MinervaR2adj.java
1
2
3
4
5
import com.minerva.metrics.RegressionMetrics.RegressionMetrics; RegressionMetrics metrics = new RegressionMetrics();int numFeatures = X.cols();double r2adj = metrics.R2adj(actual, predicted, numFeatures);API Reference
R2adj(Vector actual, Vector predicted, int numFeatures)
Example.java
1
2
int numFeatures = X.cols();double r2adj = metrics.R2adj(actual, predicted, numFeatures);| Parámetro | Tipo | Descripción |
|---|---|---|
actual | Vector | Valores reales |
predicted | Vector | Valores predichos |
numFeatures | int | Número de features (p) |
Retorna: double
Requisito
Necesitas más observaciones que features + 1: n > p + 1. Si no, el denominador sería menor o igual a 0.
Interpretación
| Aspecto | Valor |
|---|---|
| Rango | (-inf, 1] |
| Mejor valor | 1 |
| Unidades | Adimensional |
¿Cuándo usar R² Ajustado?
Recomendado:
- Para comparar modelos con diferente número de features
- Cuando sospechas que tu modelo tiene variables innecesarias
- Para evitar overfitting