Пример 1. Вычисление Precision, Recall и F1-score

Для оценки качества бинарной классификации используется матрица ошибок, содержащая четыре значения:

Основные метрики:

Precision = TP / (TP + FP)

Recall = TP / (TP + FN)

F1 = 2 × Precision × Recall / (Precision + Recall)

Рассмотрим пример из лекции:

TP = 40, FP = 10, FN = 20.

Реализация на Python:

tp = 40

fp = 10

fn = 20

 

precision = tp / (tp + fp)

recall = tp / (tp + fn)

 

f1 = (

    2 * precision * recall

    / (precision + recall)

)

 

print("Precision:", round(precision, 3))

print("Recall:", round(recall, 3))

print("F1-score:", round(f1, 3))

Результат:

Precision: 0.8

Recall: 0.667

F1-score: 0.727

Precision показывает долю действительно положительных объектов среди всех объектов, предсказанных как положительные.

Recall показывает долю найденных положительных объектов среди всех фактически положительных.

F1-score объединяет precision и recall в одну метрику.

Пример 2. Оценка регрессии с помощью MAE и RMSE

Для оценки качества регрессионных моделей используются метрики MAE и RMSE.

MAE вычисляет среднюю абсолютную ошибку:

MAE = (1/n) × Σ|yᵢ − ŷᵢ|

RMSE вычисляет квадратный корень из средней квадратичной ошибки:

RMSE = √[(1/n) × Σ(yᵢ − ŷᵢ)²]

RMSE сильнее реагирует на крупные ошибки прогноза.

Реализация на Python:

import numpy as np

from sklearn.metrics import (

    mean_absolute_error,

    mean_squared_error

)

 

y_true = np.array([10, 20, 30, 40])

y_pred = np.array([12, 18, 29, 35])

 

mae = mean_absolute_error(

    y_true, y_pred

)

 

rmse = np.sqrt(

    mean_squared_error(y_true, y_pred)

)

 

print("MAE:", round(mae, 3))

print("RMSE:", round(rmse, 3))

Результат:

MAE: 2.5

RMSE: 2.915

Абсолютные ошибки составляют 2, 2, 1 и 5.

MAE усредняет эти значения, а RMSE сильнее учитывает ошибку величиной 5.

Выбор метрики должен соответствовать практической задаче и стоимости ошибок.

Пример 3. Разделение данных и перекрёстная проверка

Для достоверной оценки качества необходимо разделять данные на обучающую, валидационную и тестовую части.

Обучающая выборка используется для определения параметров модели.

Валидация или перекрёстная проверка применяется для выбора гиперпараметров.

Тестовая выборка предназначена для окончательной независимой оценки.

Реализация на Python:

from sklearn.datasets import make_classification

from sklearn.model_selection import (

    train_test_split,

    cross_val_score

)

from sklearn.pipeline import make_pipeline

from sklearn.preprocessing import StandardScaler

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import classification_report

 

X, y = make_classification(

    n_samples=300,

    n_features=5,

    n_informative=3,

    n_redundant=0,

    random_state=42

)

 

X_train, X_test, y_train, y_test = train_test_split(

    X, y,

    test_size=0.2,

    stratify=y,

    random_state=42

)

 

model = make_pipeline(

    StandardScaler(),

    LogisticRegression(max_iter=1000)

)

 

scores = cross_val_score(

    model,

    X_train,

    y_train,

    cv=5,

    scoring="f1"

)

 

print("F1 по блокам:", scores)

print("Средний F1:", round(scores.mean(), 3))

 

model.fit(X_train, y_train)

 

predictions = model.predict(X_test)

 

print(classification_report(

    y_test,

    predictions,

    zero_division=0

))

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

Использование Pipeline обеспечивает выполнение масштабирования внутри каждого обучающего разбиения и помогает избежать утечки информации.

Тестовая выборка не используется при выборе гиперпараметров.