Введение

Как специалисты по данным, мы часто придаем большое значение тому, чтобы прогнозируемые вероятности, полученные на основе моделей машинного обучения, были хорошо откалиброваны. Хорошо откалиброванная модель имеет решающее значение для многих приложений в реальном мире, таких как медицинская диагностика, обнаружение мошенничества и прогнозирование вероятности дефолта. Если модель плохо откалибрована, она может назначать слишком экстремальные вероятности, что приводит к принятию неверных решений. Например, если модель присваивает кредитному договору вероятность дефолта 0,6, в то время как реальная вероятность такого кредита составляет всего 0,3, то эмитент кредита может завысить цену или отклонить заявку на кредит.

Что такое калибровка вероятности?

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

Методы калибровки вероятности

Существует несколько методов калибровки вероятностей, включая шкалу Платта и изотоническую регрессию.

Масштабирование Платта – это параметрический метод, который подгоняет модель логистической регрессии к прогнозируемым вероятностям и использует эту модель для преобразования вероятностей.

from sklearn.calibration import CalibratedClassifierCV
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier

# Create an uncalibrated classifier
clf = RandomForestClassifier()

# Fit the classifier to your data
clf.fit(X_train, y_train)

# Calibrate the probabilities using Platt scaling
platt_clf = CalibratedClassifierCV(
clf, method='sigmoid', cv='prefit', base_estimator=LogisticRegression()
)
platt_clf.fit(X_train, y_train)

# Use the calibrated classifier to make predictions
y_calibrated_pred = platt_clf.predict(X_test)

Изотоническая регрессия – это непараметрический метод, который подбирает кусочно-постоянную функцию (неубывающую) к прогнозируемым вероятностям и корректирует вероятности на основе этой функции. Изотоническая регрессия, как правило, работает лучше, чем масштабирование Платта, особенно когда исходная модель имеет сильно нелинейные границы решений.

from sklearn.isotonic import IsotonicRegression
from sklearn.ensemble import RandomForestClassifier

# Create an uncalibrated classifier
clf = RandomForestClassifier()

# Fit the classifier to your data
clf.fit(X_train, y_train)

# Calibrate the probabilities using isotonic regression
iso_reg = IsotonicRegression()
calibrated_probs = iso_reg.fit_transform(clf.predict_proba(X_test)[:, 1])

# Use the calibrated probabilities to make predictions
y_calibrated_pred = (calibrated_probs >= 0.5).astype(int)

Как мы оцениваем, хорошо ли откалибрована модель?

Существует несколько методов оценки калибровки модели бинарной классификации, включая калибровочные графики, ошибку калибровки и оценку Бриера.

Одним из распространенных методов визуализации калибровки модели бинарной классификации является использование калибровочного графика. Калибровочный график сравнивает предсказанные вероятности с истинными вероятностями положительного класса путем разделения предсказанных вероятностей на ячейки и построения графика средней предсказанной вероятности и истинной частоты положительного класса в каждой ячейке. Хорошо откалиброванная модель должна иметь калибровочный график, на котором предсказанные вероятности близко соответствуют истинным вероятностям.

import matplotlib.pyplot as plt
from sklearn.calibration import calibration_curve

# Generate calibration plot
prob_true, prob_pred = calibration_curve(y_true, y_pred, n_bins=10)
plt.plot(prob_pred, prob_true, marker='o')
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('Predicted Probability')
plt.ylabel('True Probability')
plt.title('Calibration Plot')

Оценка Брайера — еще одна распространенная метрика для оценки калибровки модели бинарной классификации. Оценка Бриера рассчитывается как среднеквадратическая разница между предсказанными вероятностями и истинными бинарными результатами. Хорошо откалиброванная модель должна иметь низкий показатель Бриера, указывающий на то, что предсказанные вероятности хорошо откалиброваны и близко соответствуют истинным вероятностям.

from sklearn.metrics import brier_score_loss

# y_true: true binary labels (0 or 1)
# y_prob: predicted probabilities of the positive class
brier_score = brier_score_loss(y_true, y_prob)

print('Brier score:', brier_score)

Заключение

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