Как вы оцениваете качество модели машинного обучения?

«Как вы оцениваете качество модели машинного обучения?» — вопрос из категории Метрики и функции потерь, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оценка качества модели — это не единичная метрика, а целостный процесс, который я выстраиваю в зависимости от типа задачи, бизнес-контекста и доступных данных. Мой подход структурирован.

1. Выбор метрик, адекватных задаче:

  • Для бинарной классификации:

    • Accuracy: Использую только на сбалансированных датасетах. На несбалансированных (например, 99% класса 0, 1% класса 1) она бесполезна.
    • Precision, Recall, F1-score: Мои основные рабочие метрики. Выбор между Precision и Recall зависит от стоимости ошибки. Например, в задаче обнаружения мошенничества (fraud detection) критичен Recall — мы не хотим пропустить мошенническую операцию, даже если это увеличит число ложных срабатываний (снизит Precision).
    • ROC-AUC: Отличная агрегированная метрика, показывающая способность модели ранжировать примеры (вероятность положительного класса для Positive sample должна быть выше, чем для Negative). Устойчива к дисбалансу классов.
    • PR-AUC (Precision-Recall AUC): Часто информативнее ROC-AUC на сильно несбалансированных данных. Именно на неё я смотрю в таких случаях.
  • Для регрессии:

    • RMSE (Root Mean Squared Error): Широко используется, но сильно штрафует за большие выбросы.
    • MAE (Mean Absolute Error): Более интерпретируемая (средняя величина ошибки в единицах целевой переменной), менее чувствительна к выбросам.
    • R² (коэффициент детерминации): Показывает, какую долю дисперсии целевой переменной объясняет модель. Удобна для сравнения моделей на одном датасете.

2. Корректная процедура оценки (важнее самой метрики):

  • Строгое разделение данных: Train / Validation / Test. На Validation я подбираю гиперпараметры, на Test — даю финальную, непредвзятую оценку один раз.
  • Кросс-валидация (CV): Всегда использую (обычно k=5 или k=10) для получения устойчивой оценки на Validation и для подбора гиперпараметров. Это страхует от неудачного случайного разбиения.

    from sklearn.model_selection import cross_val_score
    from sklearn.ensemble import RandomForestClassifier
    
    model = RandomForestClassifier(n_estimators=100)
    # Оценка ROC-AUC с помощью 5-кратной кросс-валидации
    cv_scores = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc')
    print(f"ROC-AUC: {cv_scores.mean():.3f} (+/- {cv_scores.std()*2:.3f})")

3. Сравнение с базовыми моделями (Baseline): Прежде чем оценивать сложную модель, я строю простые baseline:

  • Для классификации: DummyClassifier (предсказывает самый частый класс или случайно).
  • Для регрессии: DummyRegressor (предсказывает среднее значение). Качество имеет смысл только относительно baseline. Если моя нейросеть лишь на 1% лучше случайного угадывания — она бесполезна.

4. Анализ ошибок (Error Analysis): После получения метрик я смотрю матрицу ошибок (confusion matrix) и выгружаю примеры, на которых модель ошибается чаще всего. Это помогает понять систематические слабости модели (например, плохо распознаёт объекты в темноте) и определить направления для улучшения данных или архитектуры.

Итог: Я не могу назвать одну метрику. Мой ответ — это: «Для этой задачи бинарной классификации с дисбалансом я буду использовать PR-AUC на стратифицированной 5-кратной кросс-валидации, сравню результат с baseline из DummyClassifier, а затем проанализирую confusion matrix, чтобы понять природу ошибок».