- 1. Métricas en regresión
- 1.1. Vídeo
- 1.2. Error absoluto medio, mean absolute error (MAE)
- 1.2.1. Ejemplo en Python
- 1.3. Error medio cuadrado (ECM), mean square error (MSE)
- 1.3.1. Ejemplo en Python
- 1.4. Raíz del error medio cuadrado, root mean square error (RMSE)
- 1.4.1. Ejemplo en Python
- 1.5. R2, R cuadrada
- 1.6. Ahora usando sklearn
- 1.7. Cuándo usar las métricas
- 1.8. Conclusiones
- 2. Referencias
1. Métricas en regresión
1.1. Vídeo
¿Cómo medir el desempeño de un modelo de Regresión? | Métricas de Regresión
1.2. Error absoluto medio, mean absolute error (MAE)
Esta métrica es una medida de la diferencia entre dos valores, es decir, nos permite saber que tan diferente es el valor predicho y el valor real u observado. Para que un error con valor positivo no cancele a un error con error negativo usamos el valor absoluto de la diferencia. Como nos interesa conocer el comportamiento del error de todas las observaciones y no solamente de una, entonces obtenemos el promedio de los valores absolutos de la diferencia.
n
: Número total de observaciones.yi
: Valor real de la ii-ésima observación.^yi
: Valor predicho para la ii-ésima observación.∣yi−^yi∣
: Error absoluto para la ii-ésima observación.
El MAE mide el promedio de las diferencias absolutas entre los valores reales y los valores predichos. Es una métrica que proporciona una idea de cuán alejadas están, en promedio, las predicciones de los valores reales.
1.2.1. Ejemplo en Python
import numpy as np
# Datos reales y predichos
y = np.array([100, 150, 200, 250, 300]) # Ventas reales
y_pred = np.array([90, 140, 210, 240, 310]) # Ventas predichas
# Calcular MAE
mae = np.mean(np.abs(y - y_pred))
print(f"El Error Absoluto Medio (MAE) es: {mae}")
Salida:
El Error Absoluto Medio (MAE) es: 10.0
1.3. Error medio cuadrado (ECM), mean square error (MSE)
Esta métrica es muy útil para saber que tan cerca es la línea de ajuste de nuestra regresión a las observaciones. Al igual que en caso anterior evitamos que un error con valor positivo anule a uno con valor negativo, pero en lugar de usar el valor absoluto, elevamos al cuadrado la diferencia. El MSE penaliza los errores grandes de forma más severa que el MAE porque eleva al cuadrado las diferencias.
Siempre nos da un valor positivo y entre más cercano sea a cero es mejor.
1.3.1. Ejemplo en Python
import numpy as np
# Datos reales y predichos
y = np.array([100, 150, 200, 250, 300]) # Ventas reales
y_pred = np.array([90, 140, 210, 240, 310]) # Ventas predichas
# Calcular MSE
mse = np.mean((y - y_pred) ** 2)
print(f"El Error Medio Cuadrado (MSE) es: {mse}")
Salida:
El Error Medio Cuadrado (MSE) es: 100.0
1.4. Raíz del error medio cuadrado, root mean square error (RMSE)
Como la métrica anterior nos da el resultado en unidades cuadradas, para poder interpretarlo más fácilmente sacamos la raíz cuadrada y de esta manera tenemos el valor en las unidades originales.
El Error Cuadrático Medio Raíz (Root Mean Square Error, RMSE) es la raíz cuadrada del Error Medio Cuadrado (MSE). Es una métrica común que proporciona una interpretación en las mismas unidades que los valores reales, lo que facilita su comprensión.
El RMSE interpreta el error promedio en las mismas unidades que los datos reales y es útil para evaluar la calidad de un modelo de predicción.
1.4.1. Ejemplo en Python
import numpy as np
# Datos reales y predichos
y = np.array([100, 150, 200, 250, 300]) # Ventas reales
y_pred = np.array([90, 140, 210, 240, 310]) # Ventas predichas
# Calcular RMSE
rmse = np.sqrt(np.mean((y - y_pred) ** 2))
print(f"El Error Cuadrático Medio Raíz (RMSE) es: {rmse}")
Salida:
El Error Cuadrático Medio Raíz (RMSE) es: 10.0
El RMSE es fácil de interpretar porque está en las mismas unidades que las ventas reales. Es particularmente útil cuando queremos evaluar un modelo en términos más prácticos
1.5. R2, R cuadrada
R2 es el coeficiente de determinación, nos indica que tanta variación tiene la variable dependiente que se puede predecir desde la variable independiente. En otras palabras que tan bien se ajusta el modelo a las observaciones reales que tenemos. Cuando usamos R2 todas las variables independientes que estén en nuestro modelo contribuyen a su valor.
El mejor valor posible que tenemos con R2 es 1 y el peor es 0. Una desventaja que tiene es que asume que cada variable ayuda a explicar la variación en la predicción, lo cual no siempre es cierto. Si adicionamos otra variable, el valor de R2 se incrementa o permanece igual, pero nunca disminuye. Esto puede hacernos creer que el modelo esta mejorando, pero no necesariamente es así.
R cuadrada o coeficiente de determinación [12:43]
1.6. Ahora usando sklearn
1.6.1. Vídeotutorial con notebook
Notebook Error absoluto medio
Las Mejores Métricas para Evaluar Modelos de Regresión con Scikit-Learn: R2, MSE, RMSE, MAE y otras [20:48]
1.6.2. Paso 1: Importar bibliotecas
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
1.6.3. Paso 2: Crear un conjunto de datos simple
# Crear datos ficticios
np.random.seed(42)
x = np.random.rand(100, 1) * 10 # Variable independiente
y = 3 * x + 7 + np.random.randn(100, 1) # Variable dependiente con algo de ruido
# Convertir a DataFrame para claridad
data = pd.DataFrame({"x": x.flatten(), "y": y.flatten()})
1.6.4. Paso 3: Dividir los datos en entrenamiento y prueba
# Dividir los datos en conjuntos de entrenamiento y prueba
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
1.6.5. Paso 4: Entrenar el modelo
# Crear y entrenar el modelo de regresión lineal
model = LinearRegression()
model.fit(x_train, y_train)
1.6.6. Paso 5: Hacer predicciones
# Realizar predicciones en los datos de prueba
y_pred = model.predict(x_test)
1.6.7. 3. Métricas de evaluación
1. Error Absoluto Medio (MAE)
El MAE calcula el promedio de los errores absolutos.
Implementación en código:
# Calcular MAE
mae = mean_absolute_error(y_test, y_pred)
print(f"Error Absoluto Medio (MAE): {mae:.2f}")
2. Error Cuadrático Medio (MSE)
El MSE calcula el promedio de los errores al cuadrado, penalizando más los errores grandes.
Implementación en código:
# Calcular MSE
mse = mean_squared_error(y_test, y_pred)
print(f"Error Cuadrático Medio (MSE): {mse:.2f}")
3. Raíz del Error Cuadrático Medio (RMSE)
El RMSE es la raíz cuadrada del MSE, lo que facilita la interpretación en las mismas unidades que los datos originales.
Implementación en código:
# Calcular RMSE
rmse = np.sqrt(mse)
print(f"Raíz del Error Cuadrático Medio (RMSE): {rmse:.2f}")
4. Coeficiente de Determinación (R²)
El R^2 mide qué proporción de la variabilidad de los datos es explicada por el modelo.
Implementación en código:
# Calcular R^2
r2 = r2_score(y_test, y_pred)
print(f"Coeficiente de Determinación (R²): {r2:.2f}")
Resumen de Resultados
print("Resumen de métricas:")
print(f"MAE: {mae:.2f}")
print(f"MSE: {mse:.2f}")
print(f"RMSE: {rmse:.2f}")
print(f"R²: {r2:.2f}")
1.7. Cuándo usar las métricas
Ahora que conocemos estas métricas básicas, es importante conocer cuando las podemos usar y cual es mejor en cada situación.
MSE y RMSE penalizan los errores grandes en la predicción, pero RMSE se usa más gracias a que esta en las unidades originales de los datos.
MSE/RMSE es una función diferenciable lo cual facilita ciertas operaciones matemáticas, en comparación a MAE que no es diferenciable. Por esta razón muchos modelos usan como métrica de default RMSE para calcular la función de pérdida.
MAE es más robusto cuando los datos tienen outliers o datos atípicos y es la mejor opción a usar en esos casos.
Valores pequeños de MAE, MSE y RMSE nos indican mayor precisión en el modelo de regresión, pero hay que recordar que para R2 un valor más grande es mejor.
R2 y R2 ajustado se usan para explicar que tan bien la variable independiente en la regresión lineal explica la variabilidad de la variable dependiente. R2 siempre aumenta de valor cuando incrementamos la cantidad de variables independientes en nuestro modelo y es algo que tenemos que tener en cuenta y no dejarnos confundir al creer que realmente esta mejorando el modelo, puede que no, para solucionar esto usamos R2 ajustado.
R2 ajustado toma en cuenta el número de variables independientes, también conocidas como predictores, y su valor baja si el incremento en R2 debido a las variables adicionales no es lo suficientemente significativo.
Para comparar la precisión entre diferentes modelos de regresión lineal generalmente es mejor usar RMSE que R2
1.8. Conclusiones
Lo más importante no es únicamente conocer las métricas sino saber cuando usarlas para que nos permitan entender la precisión de nuestro modelo. El saber si hay outliers en el dataset es importante para seleccionar la métrica adecuada.
2. Referencias
- https://medium.com/@nicolasarrioja/m%C3%A9tricas-en-regresi%C3%B3n-5e5d4259430b
- https://github.com/atulpatelDS/Youtube/blob/main/Machine_Learning/Linear_Regression/Interpretaion_Model_Summary_statsmodels_Linear_Regression.ipynb
- https://medium.com/analytics-vidhya/evaluation-metrics-for-regression-models-c91c65d73af
- https://medium.com/latinxinai/evaluation-metrics-for-regression-models-03f2143ecec2