El Error Cuadrático Medio es el criterio de evaluación más usado para problemas de regresión. Se usa sobre todo cuando usamos aprendizaje automático supervisado. Para cada dato histórico podremos indicar el resultado correcto. Vamos a ver como se calcula.
Índice
Cálculo del Error Cuadrático Medio
Vamos a calcular el error cuadrático medio con un ejemplo. En la figura vemos que estamos usando una regresión lineal (en azul) para estimar los datos que tenemos (los puntos verdes). El modelo lineal tiene un error (en rojo) que podemos definir con la siguiente fórmula:
error \ cuadr\acute{a}tico = (real\ - \ estimado)^2
El valor estimado es el valor que nos da el modelo. En este caso, la línea azul.
Calculamos el error al cuadrado, en lugar del error simple, para que el error siempre sea positivo. De esta forma sabemos que el error perfecto es 0. Si no elevásemos el error al cuadrado, unas veces el error sería positivo y otras negativo. Otra posibilidad sería usar el valor absoluto, en lugar de elevarlo al cuadrado. Sin embargo, si usamos el valor absoluto, obtendremos una función no-derivable. Y como ya veremos en otro artículo, tener una función derivable hace posible el uso de algoritmos de optimización muy efectivos (por ejemplo, el gradiente descendiente).
Ahora que sabemos cómo calcular el error en cada punto, podemos calcular cual es el error medio. Para ello, sumamos todos los errores y los dividimos entre el número total de puntos. Si llamamos M al número total de puntos nos queda la fórmula del Error Cuadrático Medio (MSE, por sus siglas en inglés, Mean Squared Error):
MSE = \frac{1}{M}\sum_{i=1}^{M}(real_i\ - \ estimado_i)^2
Ejemplo del MSE en una Regresión Lineal
Vamos a ver cómo funciona el MSE en un ejemplo. Como técnica de machine learning, vamos a usar una de la más simples, la regresión lineal.
En el gráfico podemos hemos usado una regresión lineal para calcular la línea (en rojo). Esta línea obtiene el menor MSE posible para los datos que hemos usado (en azul). El MSE (por sus siglas en inglés) es de 0.0332.
La forma del error cuadrático medio
Podemos apreciar la forma del MSE en la siguiente gráfica. A la izquierda, vemos el MSE para una variable (en 2D), y a la derecha el MSE para dos variables (en 3D). Es fácil ver que el MSE amplifica los errores mayores ya que calcula el cuadrado del error.
Raíz Cuadrada del Error Cuadrático Medio
El error cuadrático medio no es del todo intuitivo porque nos da el error medio al cuadrado. Así que si nuestro modelo para predecir el valor de bienes inmuebles tiene un error cuadrático medio de 1.000.000 de euros nos daría la impresión de que tiene mucho error. En realidad, el error sería más / menos 1.000 euros en media, porque la raíz cuadrada de 1.000.000 es 1.000. La fórmula sería:
RMSE = \sqrt{\frac{1}{M}\sum_{i=1}^{M}(real_i\ - \ estimado_i)^2}
Os pongo su nombre también en inglés para que os suene cuando lo uséis en las librerías de machine learning: RMSE (Root Mean Squared Error). Así, en el ejemplo anterior, el RMSE sería 0.1822 (para un MSE de 0.0332).
¿Por qué no usamos la Raíz Cuadrada del Error Cuadrático Medio?
Entonces, si el RMSE es más intuitivo que el MSE, ¿por qué no usamos el RMSE todo el tiempo? Hay dos razones:
- Es más costoso computacionalmente. Muchos algoritmos supervisados necesitan calcular el error en cada iteración para aprender de sus errores; así que cuanto más rápido mejor.
- La forma del error cuadrático medio hace que cierto tipos de algoritmos de optimización (tales como el gradiente descendiente), encuentre la mejor solución más rápido.
Así que, normalmente, se suele usar el MSE durante el proceso de aprendizaje y su raíz cuadrada al final, para dar una estimación en términos intuitivos de la calidad de la predicción.
Cálculo del Error Cuadrático Medio en python
Vamos a ver dos formas de calcularlo en python
Usando scikit-learn
Lo más fácil es usar la librería de python scikit-learn. El modulo sklearn.metrics implementa la función mean_squared_error. Esta función necesita dos argumentos:
- y_true: los valores correctos
- y_pred: nuestra predicción
Por ejemplo:
from sklearn.metrics import mean_squared_error y_true = [3, -0.5, 2, 7] y_pred = [2.5, 0.0, 2, 8] mse = mean_squared_error(y_true, y_pred) mse # resultado: 0.375
Usando sólo NumPy
import numpy as np y_true = [3, -0.5, 2, 7] y_pred = [2.5, 0.0, 2, 8] mse = (np.square(y_true - y_pred)).mean() mse # resultado: 0.375
El Error Cuadrático Medio es una métrica de regresión. El artículo Precision, Recall, F1, Accuracy en clasificación explica las métricas de clasificación.
Resumen
El error cuadrático medio es el criterio de evaluación más usado para problemas de aprendizaje supervisado de regresión. En este artículo hemos visto cómo se calcula, la posibilidad de usar la raíz cuadrada para obtener un resultado más intuitivo y cómo calcularlo fácilmente con código python.
Recursos
- Función para el cálculo el mean squared error en python en scikit-learn
- Cómo se usa el error cuadrático medio y su derivada en el aprendizaje automático con gradiente descendiente
- Métricas para problemas de aprendizaje supervisado de clasificación tales como precision, recall, F1, accuracy
- Otras librerías de python para machine learning que te pueden servir
Hola.
Clarísima explicación complementada con ejemplos, gracias.
José David
Genial explicación! Por cierto, cundo evaluamos modelos generado por ejemplo con SVM o RF podemos usar el RMSE para darnos una idea del ajuste. Pero también Scikit Learn permite obtener el «score» valor que a veces es negativo, otras no acompaña al RMSE, podemos fiarnos? me gustaría un post o discusión al respecto.
Saludos!!
El score que proporciona Scikit-Learn no tiene nada que ver con el RMSE. El score se refiere al coeficiente de correlación entre la predicción y los datos reales. En el caso en que la correlación sea negativa, estarían anticorrelados.
Puedes obtener la explicación detallada aquí: https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor.score
Hola, estupenda explicación, he estado leyendo sobre el tema por todos lados. En tan pocas palabras incluiste todos los detalles. Me super sirvió gracias por compartir. Continuare leyendo el resto de tu contenido! :)