Калибровка вероятностей на собеседовании Data Scientist

Подготовься к собесу по A/B и статистике
300+ вопросов с разбором: дизайн, размер выборки, p-value, ловушки
Тренировать A/B в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Что такое калибровка

Модель калибрована, если предсказанная вероятность p совпадает с реальной частотой события. Если модель говорит p=0.7 для группы примеров — в этой группе должно быть примерно 70% положительных.

Группа с predicted p ≈ 0.7:
  Калиброванная модель:   70% True positives
  Некалиброванная:        45% или 90% True

Многие модели не калиброваны из коробки:

  • Tree-based (RF, GB): часто overconfident — выдают p близкие к 0 и 1
  • SVM: decision_function не вероятность
  • Naive Bayes: assumption нарушений → overconfidence
  • Нейросети: часто overconfident, особенно на out-of-distribution

Калиброваны:

  • Logistic regression — обычно хорошо
  • Хорошо обученные нейросети с label smoothing — лучше

Зачем нужна

Когда нужна калибровка:

  • Risk scoring (вероятность дефолта, fraud)
  • A/B-тесты с порогами по вероятности
  • Объединение нескольких моделей (нужны соразмерные probabilities)
  • Cost-sensitive решения, где порог меняется по бизнес-логике
  • Регулируемые отрасли (банки, медицина) — explainability

Когда не нужна:

  • Только argmax (классификация без интерпретации probabilities)
  • Ranking-задачи (порядок важнее абсолютных значений)

На собесе DS вопрос: «модель показывает 0.95 AUC, но в проде вероятности неинформативны — почему?» Ответ: плохая калибровка, AUC не зависит от калибровки (только от ranking).

Reliability diagram и метрики

Reliability diagram (calibration curve): разбиваем predictions на бины (например, [0-0.1, 0.1-0.2, ..., 0.9-1.0]). На оси X — средняя predicted probability в бине, на Y — реальная частота positive в бине.

Идеально калиброванная модель → диагональ. Overconfident → кривая ниже диагонали в высоких бинах, underconfident — выше.

from sklearn.calibration import calibration_curve
prob_pred, prob_true = calibration_curve(y_test, model.predict_proba(X_test)[:,1], n_bins=10)
plt.plot(prob_pred, prob_true)
plt.plot([0, 1], [0, 1], '--')  # идеал

Метрики калибровки:

  • Brier scoremean((p - y)²), ниже = лучше. Объединяет калибровку и ranking.
  • ECE (Expected Calibration Error) — взвешенное среднее |прогноз - факт| по бинам
  • MCE — максимальная ошибка по бинам

Brier и ECE — независимые: Brier хорош у точной модели, ECE — у калиброванной.

Platt scaling

Простая калибровка через logistic regression поверх scores модели.

p_calibrated = sigmoid(A · score + B)

A и B учатся на calibration set (отдельная выборка или CV).

Когда работает: sigmoid-форма — естественный fit для tree-based, SVM, многих моделей. Нужна параметрическая форма.

В sklearn:

from sklearn.calibration import CalibratedClassifierCV
calibrated = CalibratedClassifierCV(base_estimator=model, method='sigmoid', cv=5)
calibrated.fit(X_train, y_train)
prob = calibrated.predict_proba(X_test)

cv=5 — внутри cross-validation, не leakage.

Минус: жёсткая параметрическая форма (сигмоид) может не подходить.

Подготовься к собесу по A/B и статистике
300+ вопросов с разбором: дизайн, размер выборки, p-value, ловушки
Тренировать A/B в Telegram

Isotonic regression

Непараметрическая калибровка — монотонная step-function, минимизирующая MSE.

calibrated = CalibratedClassifierCV(base_estimator=model, method='isotonic', cv=5)

Свойства:

  • Гибче Platt — fit любой монотонной зависимости
  • Требует больше данных (~1000+ для надёжной)
  • Может переобучиться на маленькой calibration выборке

Когда работает лучше Platt: сильно несимметричные миспрогнозы, когда ground truth не подходит под сигмоид.

Когда что выбирать

Кейс Метод
Маленькая calibration выборка (< 1000) Platt
Большая выборка Isotonic
Нужна smooth function Platt
Ассиметричный bias Isotonic
Классическая classification CalibratedClassifierCV (любой)
Нейросети Temperature scaling

Temperature scaling для нейросетей: делим logits на температуру T (скалярный параметр), softmax. Простой и эффективный для DL.

def calibrated_softmax(logits, T):
    return softmax(logits / T)
# T > 1 — softens predictions (less confident)
# T < 1 — sharpens

Частые ошибки

Калибровать на train. Калибровка должна быть на отдельной calibration выборке (или out-of-fold). Иначе — leakage.

Считать, что AUC отражает калибровку. AUC чувствителен только к ranking. Модель может иметь AUC=0.9 и быть совершенно некалиброванной.

Калибровать только positive class. Для multi-class — калибровка для всех классов.

Изменять калибровку при class imbalance. Если в проде class balance отличается от train — нужно адаптировать через prior correction или re-calibration на target distribution.

Использовать CalibratedClassifierCV дважды. На уже калиброванной модели — потеря производительности. Калибровать только raw model.

Игнорировать calibration drift. Distribution меняется → калибровка устаревает. Регулярная переоценка.

Калибровать через accuracy. Accuracy не зависит от probabilities. Метрики калибровки — Brier, ECE.

Связанные темы

FAQ

Random Forest нуждается в калибровке?

Часто да. RF подвержен «conservative» bias — predictions смещены к 0.5 на средней выборке, к extreme на чистых группах. Калибровка через Platt помогает.

Калибровка ухудшает AUC?

Нет. AUC зависит от ranking, калибровка — монотонное преобразование, не меняет порядок.

Можно ли использовать калиброванные вероятности для бизнес-решений?

Да, это и есть основное применение. «Если P(fraud) > 0.95 → блокировать» работает корректно только на калиброванных моделях.

Когда temperature scaling не работает?

Когда miscalibration не просто scaled, а имеет другой shape. Тогда — Platt или isotonic поверх softmax.

Calibration vs probability calibration in sklearn — что использовать?

CalibratedClassifierCV — стандарт. Поддерживает CV, обе method (sigmoid, isotonic).

Это официальная информация?

Нет. Статья основана на работах Platt (1999), Niculescu-Mizil & Caruana (2005), Guo et al. (2017) для temperature scaling, документации sklearn.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.