中文翻译暂不可用,显示俄语原文。

Что такое calibration ошибок модели и как ее измерять (ECE, MCE, Brier score)?

Краткий тезис

Калибровка модели — это свойство, при котором предсказанные вероятности классов соответствуют реальной доле правильных ответов. Например, если модель предсказывает вероятность 0.8 для 100 объектов, то примерно 80 из них должны быть верно классифицированы. Основные метрики: Calibration Error|Expected Calibration Error (ECE) — среднее отклонение по бинам, Maximum Calibration Error (MCE) — максимальное отклонение, и Brier score — среднеквадратичная ошибка между предсказанной вероятностью и истинным классом. Хорошо откалиброванная модель критична для принятия решений в условиях неопределённости (например, в RAG-агентах или медицинских системах).


1. Термин: Calibration (калибровка)

Калибровка (calibration) — это согласованность между предсказанной моделью вероятностью и фактической частотой правильных ответов. Формально, для каждого значения предсказанной вероятности p модель должна давать правильный ответ в 100×p% случаев.

Зачем нужна калибровка

  • Принятие решений — если модель говорит «уверен на 90%», хочется знать, что в 9 из 10 случаев она права.
  • Оценка неопределённости — в RAG-системах или agentic-подходах важно понимать, когда ответу можно доверять, а когда стоит запросить уточнение.
  • Сравнение моделей — две модели с одинаковой accuracy могут сильно различаться по калибровке.

Термин: вероятностный выход (probabilistic output) — softmax-вероятности или логиты, преобразованные в вероятности.


2. Reliability Diagram (диаграмма надёжности)

Reliability diagram — это визуальный способ оценки калибровки.

  • Ось X: предсказанные вероятности (разбиты на бины (bins), например [0,0.1), [0.1,0.2), ..., [0.9,1]).
  • Ось Y: фактическая доля правильных ответов в каждом бине.
  • Идеальная калибровка — диагональная линия y = x.
  • Отклонения от диагонали показывают недо- или перекалибровку.

Пример построения в Python

import numpy as np
import matplotlib.pyplot as plt

def reliability_diagram(y_true, y_prob, n_bins=10):
    bins = np.linspace(0, 1, n_bins + 1)
    bin_indices = np.digitize(y_prob, bins) - 1
    
    bin_acc = []
    bin_conf = []
    bin_counts = []
    for i in range(n_bins):
        mask = (bin_indices == i)
        if np.sum(mask) > 0:
            bin_acc.append(np.mean(y_true[mask] == 1))
            bin_conf.append(np.mean(y_prob[mask]))
            bin_counts.append(np.sum(mask))
        else:
            bin_acc.append(0)
            bin_conf.append(0)
            bin_counts.append(0)
    
    plt.plot([0, 1], [0, 1], '--', label='Ideal')
    plt.plot(bin_conf, bin_acc, 'o-', label='Model')
    plt.xlabel('Predicted probability')
    plt.ylabel('True fraction positive')
    plt.title('Reliability Diagram')
    plt.legend()
    return np.array(bin_acc), np.array(bin_conf), np.array(bin_counts)

3. Expected Calibration Error (ECE)

ECE — средневзвешенная абсолютная разница между accuracy и confidence по бинам.

  • Accuracy в бине: доля правильных предсказаний.
  • Confidence в бине: средняя предсказанная вероятность.

Формула:

[ ECE = \sum_{m=1}^{M} \frac{|B_m|}{N} \left| [text](/wiki/text){acc}(B_m) - [text](/wiki/text){conf}(B_m) \right| ]

где (B_m) — m-й бин, (N) — общее количество примеров.

Интерпретация

  • ECE < 0.01 (1%) — отличная калибровка.
  • ECE 0.01–0.05 (1–5%) — хорошая.
  • ECE > 0.10 (10%+) — плохая, модель либо переуверена (overconfident), либо недоуверена (underconfident).

Код для расчёта ECE

def ece(y_true, y_prob, n_bins=10):
    bins = np.linspace(0, 1, n_bins + 1)
    bin_indices = np.digitize(y_prob, bins) - 1
    
    ece = 0.0
    for i in range(n_bins):
        mask = (bin_indices == i)
        if np.sum(mask) > 0:
            acc = np.mean(y_true[mask] == 1)
            conf = np.mean(y_prob[mask])
            ece += np.sum(mask) * np.abs(acc - conf)
    return ece / len(y_true)

4. Maximum Calibration Error (MCE)

MCE — максимальное по бинам абсолютное отклонение между accuracy и confidence:

[ MCE = \max_{m=1..M} \left| [text](/wiki/text){acc}(B_m) - [text](/wiki/text){conf}(B_m) \right| ]

  • Показывает наихудший бин по калибровке.
  • Полезно, когда отдельные диапазоны вероятностей критичны (например, высокие вероятности у модели, которая часто ошибается).

Пример: если в бине [0.9,1] accuracy = 0.7, а conf = 0.95, то вклад в MCE = 0.25.


5. Brier Score

Brier score — среднеквадратичная ошибка между предсказанными вероятностями и истинными метками (0 или 1). Определяется как:

[ BS = \frac{1}{N} \sum_{i=1}^{N} (p_i - y_i)^2 ]

  • (p_i) — предсказанная вероятность для класса 1.
  • (y_i) — истинная метка (1 если класс 1, иначе 0).
  • Значение от 0 (идеал) до 1 (худший случай).
  • Для мультиклассовой задачи используется multi-class Brier score: (\frac{1}{N} \sum_{i} \sum_{k} (p_{ik} - y_{ik})^2), где (y_{ik}) — one-hot кодировка.

Код

def brier_score(y_true, y_prob):
    return np.mean((y_prob - y_true) ** 2)

Свойства Brier score

  • Разлагается на калибровку (calibration) и разрешение (resolution).
  • Чувствителен к экстремальным вероятностям.

6. Сравнение метрик

МетрикаЧто измеряетДиапазонЧувствительностьИнтерпретация
ECEСреднее отклонение по бинам[0, 1]Количество биновЧем меньше, тем лучше. Хорошо < 0.05
MCEМаксимальное отклонение по бинам[0, 1]Только один бинПоказывает наихудший участок
Brier scoreСреднеквадратичная ошибка[0, 1]Все примерыВключает как калибровку, так и разрешение

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

  • ECE — стандартная метрика для оценки калибровки.
  • MCE — если есть риск в конкретном диапазоне вероятностей (например, high-confidence ошибки).
  • Brier score — для общей оценки качества вероятностных предсказаний (включая правильность классификации).

7. Методы улучшения калибровки

7.1 Temperature Scaling

  • Простейший пост-калибровочный метод для нейросетей.
  • Делит логиты на скалярный параметр T (temperature) перед softmax.
  • T учится на валидационном наборе, минимизируя negative log-likelihood (NLL).
  • При T > 1 вероятности становятся более равномерными (снижается overconfidence).

7.2 Platt Scaling

  • Для бинарной классификации: логистическая регрессия на логитах.
  • Параметры a, b: (p = \sigma(a \cdot z + b)), где z — выход модели до softmax.

7.3 Isotonic Regression

  • Непараметрический метод: кусочно-постоянная монотонная функция.
  • Может переобучаться на малых данных.

Сравнение методов

МетодТипПараметрыПрименимость
Temperature ScalingПараметрический1 (T)Нейросети, мультикласс
Platt ScalingПараметрический2 (a,b)Бинарная классификация
Isotonic RegressionНепараметрическиймногоМало данных → переобучение

8. Калибровка в LLM и RAG-системах

В контексте LLM и agentic RAG калибровка важна для:

  • Уверенность ответа — LLM может выдавать высокие вероятности даже при неверных ответах.
  • Thresholding — отсечение ответов с низкой уверенностью для повышения качества.
  • Active learning — запрос уточнения у пользователя, если модель не уверена.

Современные LLM (например, GPT-4) часто перекалиброваны (overconfident). Для улучшения применяют post-hoc calibration на небольшом датасете или prompt-based calibration (например, «Are you sure?»).


9. Пет-проект для закрепления

Задача Обучить модель классификации (например, LogisticRegression на датасете breast cancer), оценить её калибровку, применить Temperature Scaling и сравнить метрики.

Инструменты Python, scikit-learn, numpy, matplotlib.

Шаги:

  1. Загрузить датасет (sklearn.datasets.load_breast_cancer), разделить на train/val/test.
  2. Обучить RandomForestClassifier с predict_proba.
  3. Рассчитать ECE, MCE, Brier score на тесте.
  4. Построить reliability diagram.
  5. Реализовать Temperature Scaling:
    • Взять логиты из model.predict_log_proba() или использовать CalibratedClassifierCV.
    • Обучить T на валидации минимизацией NLL (использовать scipy.optimize.minimize).
  6. Применить T к тестовым вероятностям.
  7. Повторно рассчитать метрики и построить диаграмму.
  8. Вывести таблицу сравнения «до» и «после».

Ожидаемый результат ECE снижается (например, с 0.12 до 0.03), reliability diagram приближается к диагонали. Brier score также улучшается.


10. Связь с другими вопросами

ВопросТема
33AUC-ROC и вероятностные метрики
34Log-loss и его связь с калибровкой
35Оценка неопределённости в нейросетях
36Monte Carlo Dropout
180Оценка confidence в RAG
200Decision threshold tuning

11. Навигация


Навигация