Как изменится метрика ROC AUC, если к предсказанным вероятностям положительного класса применить логарифм?

«Как изменится метрика ROC AUC, если к предсказанным вероятностям положительного класса применить логарифм?» — вопрос из категории Метрики и функции потерь, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ROC AUC не изменится. Это ключевое свойство метрики: она оценивает качество ранжирования (упорядочивания) объектов, а не абсолютные значения вероятностей.

Причина: Логарифмирование — монотонное преобразование. Если для двух объектов изначально было prob_A > prob_B, то после применения логарифма (при prob > 0) сохранится log(prob_A) > log(prob_B). Поскольку ROC AUC зависит только от относительного порядка оценок, а не от их конкретных величин, её значение останется прежним.

Демонстрация на Python:

import numpy as np
from sklearn.metrics import roc_auc_score

# Исходные данные
y_true = [0, 1, 0, 1, 0]
y_prob = [0.1, 0.9, 0.3, 0.8, 0.2]  # Исходные вероятности

# ROC AUC для исходных вероятностей
auc_original = roc_auc_score(y_true, y_prob)
print(f'ROC AUC (оригинал): {auc_original:.4f}')

# Применяем логарифм (добавляем эпсилон для избежания log(0))
y_log_prob = np.log(np.array(y_prob) + 1e-10)

# ROC AUC после преобразования
auc_log = roc_auc_score(y_true, y_log_prob)
print(f'ROC AUC (после log): {auc_log:.4f}')

# Проверяем равенство
print(f'Метрики равны? {np.isclose(auc_original, auc_log)}')

Важное замечание: Это справедливо для любого монотонного преобразования (квадрат, экспонента, логарифм и т.д.), при условии, что оно применяется ко всем вероятностям одинаково и не нарушает порядок. Однако на практике логарифмирование вероятностей, близких к нулю, может привести к численной нестабильности (-inf).