🤔 Что такое ROC/AUC?



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



🚩Что такое ROC-кривая



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



🟠Истинно положительные срабатывания (True Positive Rate, TPR)

Доля правильно предсказанных положительных примеров из всех положительных примеров (также называется чувствительность или recall).

\text{TPR} = \frac{\text{TP}}{\text{TP} + \text{FN}} 




🟠Ложноположительные срабатывания (False Positive Rate, FPR)

Доля неправильно предсказанных положительных примеров из всех отрицательных примеров.

\text{FPR} = \frac{\text{FP}}{\text{FP} + \text{TN}} 




🚩Построение



Строится путем изменения порога классификации модели от 0 до 1 и вычисления TPR и FPR для каждого значения порога. График строится с FPR по оси X и TPR по оси Y.



🚩Что такое AUC



Это площадь под ROC-кривой. Значение AUC варьируется от 0 до 1 и интерпретируется следующим образом:



🟠AUC = 0.5

Модель не лучше случайного угадывания.

🟠AUC < 0.5

Модель хуже случайного угадывания (что редко случается в практике).

🟠AUC > 0.5

Модель лучше случайного угадывания.

🟠AUC = 1

Идеальная модель.



Пример

import numpy as np

import matplotlib.pyplot as plt

from sklearn.metrics import roc_curve, roc_auc_score



# Пример данных

y_true = [0, 0, 1, 1] # Истинные значения

y_scores = [0.1, 0.4, 0.35, 0.8] # Предсказанные вероятности



# Вычисление ROC-кривой

fpr, tpr, thresholds = roc_curve(y_true, y_scores)

roc_auc = roc_auc_score(y_true, y_scores)



# Построение графика

plt.figure()

plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC-кривая (AUC = {roc_auc:.2f})')

plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')

plt.xlim([0.0, 1.0])

plt.ylim([0.0, 1.0])

plt.xlabel('False Positive Rate')

plt.ylabel('True Positive Rate')

plt.title('ROC-кривая')

plt.legend(loc="lower right")

plt.show()




Ставь 👍 и забирай 📚 Базу знаний