← Назад к вопросам

В чем разница между метриками в классификации и регрессии?

2.0 Middle🔥 82 комментариев
#Метрики и оценка моделей

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между метриками классификации и регрессии

Основное различие

Метрики классификации и регрессии измеряют разные типы предсказаний:

  • Классификация — предсказываем категорию (класс), метрики измеряют правильность класса
  • Регрессия — предсказываем непрерывное число, метрики измеряют величину ошибки

Метрики классификации

1. Accuracy (точность) — самая простая

from sklearn.metrics import accuracy_score

y_true = [0, 1, 1, 0, 1]
y_pred = [0, 1, 0, 0, 1]

accuracy = accuracy_score(y_true, y_pred)
print(f"Accuracy: {accuracy}")  # 4/5 = 0.8

Основная формула: (правильные предсказания) / (всего предсказаний)

Минусы: не работает при дисбалансе классов

2. Precision и Recall

from sklearn.metrics import precision_score, recall_score

# Precision — из предсказанных позитивов, сколько правильных
precision = precision_score(y_true, y_pred)
print(f"Precision: {precision}")  # правильных позитивов / всех предсказанных позитивов

# Recall — из всех реальных позитивов, сколько мы поймали
recall = recall_score(y_true, y_pred)
print(f"Recall: {recall}")  # правильных позитивов / всех реальных позитивов

Матрица ошибок:

         Предсказано
         Позитив  Негатив
Реальное
Позитив  TP       FN       (TP + FN = реальные позитивы)
Негатив  FP       TN       (FP + TN = реальные негативы)

Precision = TP / (TP + FP)  — какая доля предсказанных позитивов верна
Recall = TP / (TP + FN)     — какую долю реальных позитивов мы поймали

3. F1-Score — гармоническое среднее

from sklearn.metrics import f1_score

f1 = f1_score(y_true, y_pred)
print(f"F1: {f1}")  # (2 * precision * recall) / (precision + recall)

Используется когда precision и recall одинаково важны.

4. ROC-AUC Score

from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt

# Вероятности, а не жёсткие предсказания
y_pred_proba = [0.1, 0.9, 0.7, 0.2, 0.8]

auc = roc_auc_score(y_true, y_pred_proba)
print(f"AUC: {auc}")  # 0.0 - 1.0, выше = лучше

# ROC кривая
fpr, tpr, _ = roc_curve(y_true, y_pred_proba)
plt.plot(fpr, tpr)
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.show()

5. Confusion Matrix

from sklearn.metrics import confusion_matrix
import seaborn as sns

cm = confusion_matrix(y_true, y_pred)
print(cm)
# [[TN, FP],
#  [FN, TP]]

# Визуализация
sns.heatmap(cm, annot=True, cmap='Blues')
plt.show()

Метрики регрессии

1. Mean Absolute Error (MAE) — среднее абсолютное отклонение

from sklearn.metrics import mean_absolute_error

y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]

mae = mean_absolute_error(y_true, y_pred)
print(f"MAE: {mae}")  # Среднее |y_true - y_pred|
# MAE = (|3-2.5| + |-0.5-0| + |2-2| + |7-8|) / 4 = 0.5

Преимущества: интерпретируемо в исходных единицах, менее чувствительна к выбросам.

2. Mean Squared Error (MSE) — средняя квадратичная ошибка

from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_true, y_pred)
print(f"MSE: {mse}")  # Среднее (y_true - y_pred)^2
# MSE = ((3-2.5)^2 + (-0.5-0)^2 + (2-2)^2 + (7-8)^2) / 4 = 0.375

Чувствительнее к выбросам (из-за квадрата).

3. Root Mean Squared Error (RMSE) — корень из MSE

import numpy as np

rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print(f"RMSE: {rmse}")  # sqrt(MSE)

В тех же единицах, что и MAE, но штрафует большие ошибки.

4. R² Score — коэффициент детерминации

from sklearn.metrics import r2_score

r2 = r2_score(y_true, y_pred)
print(f"R²: {r2}")  # От -∞ до 1, где 1 = идеально

Процент дисперсии, объяснённый моделью.

5. Mean Absolute Percentage Error (MAPE)

from sklearn.metrics import mean_absolute_percentage_error

mape = mean_absolute_percentage_error(y_true, y_pred)
print(f"MAPE: {mape}")  # Средний процент ошибки

Хорошо для сравнения моделей с разными масштабами.

Сравнительная таблица

АспектКлассификацияРегрессия
Выход моделиКласс (0, 1, 2...)Число (0.5, 3.14, 100...)
Основная метрикаAccuracy, F1-ScoreMSE, RMSE, MAE, R²
Другие метрикиPrecision, Recall, ROC-AUCMAPE, R², Adjusted R²
Чувствительна к выбросамМеньше (работает с классами)Больше (работает с числами)
ИнтерпретацияПравильность классаВеличина ошибки
Когда дисбалансF1-Score, ROC-AUCОбычно нет проблемы
Матрица ошибокДаНет
Пороговое значениеМожно менять (для Precision/Recall)Нет

Практический пример

from sklearn.datasets import load_iris, load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.metrics import (
    accuracy_score, f1_score, roc_auc_score,  # классификация
    mean_squared_error, r2_score, mean_absolute_error  # регрессия
)

# ===== КЛАССИФИКАЦИЯ =====
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.3
)

clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
y_pred_proba = clf.predict_proba(X_test)[:, 1]

print("=== КЛАССИФИКАЦИЯ ===")
print(f"Accuracy: {accuracy_score(y_test, y_pred):.3f}")
print(f"F1-Score: {f1_score(y_test, y_pred, average='weighted'):.3f}")

# ===== РЕГРЕССИЯ =====
diabetes = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(
    diabetes.data, diabetes.target, test_size=0.3
)

reg = DecisionTreeRegressor()
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)

print("\n=== РЕГРЕССИЯ ===")
print(f"MAE: {mean_absolute_error(y_test, y_pred):.3f}")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.3f}")
print(f"R²: {r2_score(y_test, y_pred):.3f}")

Когда какую метрику использовать

Классификация:

  • Сбалансированные классы → Accuracy
  • Дисбалансированные классы → F1-Score, ROC-AUC
  • Важна точность предсказаний → Precision
  • Важен поиск всех позитивов → Recall
  • Бинарная классификация → ROC-AUC

Регрессия:

  • Близко к реальным единицам → MAE
  • Штраф за большие ошибки → RMSE, MSE
  • Общая качество модели → R²
  • Разные масштабы данных → MAPE
  • Интерпретируемость → MAE > RMSE > MSE

Заключение

Выбор метрики зависит от вашей задачи и требований бизнеса. Для классификации часто используют несколько метрик одновременно, для регрессии также. Главное — не использовать только одну метрику, так как это может скрыть проблемы модели.

В чем разница между метриками в классификации и регрессии? | PrepBro