Ответ
ROC-AUC (Area Under the ROC Curve) для случайного классификатора, который не обладает дискриминативной способностью (т.е. его предсказания не коррелируют с истинными метками), равна 0.5.
Объяснение: ROC-кривая строится как зависимость True Positive Rate (TPR) от False Positive Rate (FPR) при варьировании порога классификации. Случайный классификатор с равной вероятностью предсказывает положительный класс для объектов любого истинного класса. Это означает, что на любом пороге TPR ≈ FPR. Такая кривая будет идти по диагонали из точки (0,0) в (1,1), а площадь под ней составит 0.5.
Практическая проверка:
import numpy as np
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
np.random.seed(42)
n_samples = 1000
# Истинные метки (случайные)
y_true = np.random.randint(0, 2, n_samples)
# Случайные вероятности для положительного класса
y_pred_proba_random = np.random.rand(n_samples)
# Расчет ROC-AUC
auc_random = roc_auc_score(y_true, y_pred_proba_random)
print(f"ROC-AUC случайного классификатора: {auc_random:.3f}") # Будет ~0.5
# Построение ROC-кривой для наглядности
fpr, tpr, _ = roc_curve(y_true, y_pred_proba_random)
plt.plot(fpr, tpr, label=f'Random (AUC = {auc_random:.2f})')
plt.plot([0, 1], [0, 1], 'k--', label='Chance level (AUC = 0.5)') # Диагональ
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
plt.show()
Важное следствие: Значение ROC-AUC значительно ниже 0.5 (например, 0.2) — это тревожный сигнал. Оно означает, что модель работает хуже случайного угадывания. Частая причина — перепутаны метки классов в предсказаниях (модель «инвертировала» классы). В таком случае простое инвертирование предсказаний (y_pred_corrected = 1 - y_pred) поднимет AUC выше 0.5.