Выбор метрики зависит от типа задачи:
– Для регрессии (предсказание числовых значений, например, стоимости квартиры) применяются метрики, измеряющие разницу между предсказанными и реальными значениями.
– Для классификации (определение принадлежности объекта к одной из категорий, например, спам/не спам) используются метрики, оценивающие долю правильных ответов модели.
В задачах регрессии важно, насколько предсказанные значения близки к реальным. Рассмотрим основные метрики.
Средняя абсолютная ошибка (MAE – Mean Absolute Error)
MAE показывает, насколько в среднем предсказанное значение отличается от реального.
Пример: Если MAE = 50000 рублей, это значит, что в среднем цена квартиры, предсказанная моделью, отличается от настоящей на 50 тысяч рублей.
Как вычисляется:
– Находится разница между каждым предсказанным и реальным значением.
– Берётся абсолютное значение разницы (чтобы ошибки не компенсировали друг друга).
– Все ошибки усредняются.
Пример кода:
```python
from sklearn.metrics import mean_absolute_error
y_real = [3.5, 5.2, 6.8, 7.1, 9.3] # Реальные цены
y_pred = [3.6, 5.0, 7.0, 7.3, 9.5] # Предсказанные цены
mae = mean_absolute_error(y_real, y_pred)
print(f"Средняя абсолютная ошибка (MAE): {mae:.2f} млн рублей")
```
Среднеквадратичная ошибка (MSE – Mean Squared Error)
MSE похожа на MAE, но ошибки возводятся в квадрат перед усреднением.
Зачем это нужно?
Большие ошибки сильнее наказываются, что помогает модели учитывать случаи, когда предсказание сильно отличается от реального значения. Однако из-за возведения в квадрат ошибка измеряется в других единицах (если предсказываем цену в миллионах рублей, MSE будет в миллионах в квадрате).
Пример кода:
```python
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_real, y_pred)
print(f"Среднеквадратичная ошибка (MSE): {mse:.2f}")
```
Корень из среднеквадратичной ошибки (RMSE – Root Mean Squared Error) RMSE устраняет недостаток MSE: он измеряется в тех же единицах, что и предсказываемая величина. Это делается путем извлечения квадратного корня из MSE.
Пример кода:
```python
rmse = mean_squared_error(y_real, y_pred, squared=False)
print(f"Корень из среднеквадратичной ошибки (RMSE): {rmse:.2f} млн рублей")
```
Коэффициент детерминации (R² – R-squared, "коэффициент объяснённой дисперсии") Показывает, какую долю вариации целевой переменной объясняет модель.
– R² = 1 означает идеальную модель (все точки лежат на линии предсказания).
– R² = 0 значит, что модель предсказывает не лучше случайного угадывания.
– R² < 0 говорит о том, что модель вообще не подходит.
Пример кода:
```python
from sklearn.metrics import r2_score
r2 = r2_score(y_real, y_pred)
print(f"Коэффициент детерминации (R²): {r2:.2f}")
```
В задачах классификации важно оценить, насколько правильно модель относит объекты к нужным категориям.
Точность (Accuracy) Показывает, какая доля предсказаний оказалась верной.
Формула:
Пример: Если модель правильно определила 90 писем как "не спам" и 10 как "спам" из 100 писем, точность составит 90%.
Пример кода:
```python
from sklearn.metrics import accuracy_score
y_real = [1, 0, 1, 1, 0, 0, 1, 0, 1, 1] # Истинные метки (1 – спам, 0 – не спам)
y_pred = [1, 0, 1, 0, 0, 0, 1, 0, 1, 1] # Предсказанные моделью метки
accuracy = accuracy_score(y_real, y_pred)
print(f"Точность (Accuracy): {accuracy:.2f}")
```
Недостаток Accuracy:
Если классы сильно несбалансированы (например, 95% данных – это "не спам", а 5% – "спам"), модель может просто всегда предсказывать "не спам" и получать 95% точности, но при этом не распознавать спам.