Ответ
Значение PR AUC (Area Under the Precision-Recall Curve) для классификатора, который угадывает случайным образом, равно доле положительных объектов в выборке (prevalence).
Объяснение: Precision (точность) для случайного классификатора при любом пороге в среднем будет равна этой доле. Например, если вы случайно помечаете 10% объектов как положительные, то из них в среднем и будет 10% истинно положительных (если положительных в данных 10%). Таким образом, кривая Precision-Recall для случайного угадывания будет представлять собой примерно горизонтальную линию на уровне y = prevalence. Площадь под такой линией (PR AUC) и будет равна этой доле.
Практическая демонстрация:
import numpy as np
from sklearn.metrics import precision_recall_curve, auc
# Создаем несбалансированный датасет: 20% положительных меток
n_samples = 10000
prevalence = 0.2
y_true = np.random.binomial(1, prevalence, n_samples)
# Случайные предсказания (угадывание)
y_score_random = np.random.rand(n_samples)
precision, recall, _ = precision_recall_curve(y_true, y_score_random)
pr_auc_random = auc(recall, precision)
print(f"Доля положительных классов (prevalence): {prevalence:.3f}")
print(f"PR AUC для случайного угадывания: {pr_auc_random:.3f}")
# Результаты будут близки: ~0.2
Это важное свойство: в отличие от ROC-AUC, где случайный классификатор всегда дает 0.5, базовым уровнем для PR AUC является prevalence. Поэтому PR AUC особенно полезна для оценки моделей на сильно несбалансированных данных.
Ответ 18+ 🔞
Да ты посмотри, какая интересная штука выясняется! Сидишь ты, значит, пытаешься свою модель оценить, смотришь на PR AUC, а оно тебе какое-то число показывает. И ты думаешь: "Ну, 0.6, вроде норм?" А потом узнаёшь, что если бы ты просто, блядь, тыкал пальцем в небо, то получил бы уже 0.2! И тут волнение ебать — оказывается, твоя-то "умная" модель всего на 0.4 от этого рандома ушла, хитрая жопа.
Вот смотри, в чём прикол. Есть у нас метрика Precision-Recall, площадь под её кривой (PR AUC). Так вот, если твой классификатор — полный распиздяй и предсказывает чисто наугад, то его PR AUC будет в точности равна доле положительных штук в твоих данных. Это называется prevalence. Ёпта, логично же: если у тебя 20% котов на фото, а ты случайно тычешь "здесь кот", то из всех твоих тыков верными окажутся как раз эти 20%. Precision так и будет болтаться около 0.2, вот и вся кривая. Площадь под ней — та же доля, prevalence.
А теперь главный пиздец, из-за которого все мозги кипят. Все привыкли к ROC-AUC, где рандом — это всегда 0.5, серединка. И кажется, что всё понятно: больше 0.5 — хорошо, меньше — плохо. А тут, бля, базовая линия — плавающая! На несбалансированных данных, где положительных всего 1%, рандомный классификатор даст PR AUC = 0.01. И если твоя модель выдала 0.5, то это не "чуть выше среднего", а овердохуища хороший результат, потому что она в 50 раз лучше рандома! Вот где собака зарыта, сука.
Смотри, как это на практике выглядит, чтоб совсем ясно было. Берём и делаем всё, как ты любишь — через код.
import numpy as np
from sklearn.metrics import precision_recall_curve, auc
# Делаем данные, где только 20% — это то, что нам нужно (положительный класс)
n_samples = 10000
prevalence = 0.2
y_true = np.random.binomial(1, prevalence, n_samples)
# А предсказания — просто рандомные числа, как будто обезьяна на клавиатуре стучит
y_score_random = np.random.rand(n_samples)
precision, recall, _ = precision_recall_curve(y_true, y_score_random)
pr_auc_random = auc(recall, precision)
print(f"Доля положительных классов (prevalence): {prevalence:.3f}")
print(f"PR AUC для случайного угадывания: {pr_auc_random:.3f}")
# Результаты будут близки: ~0.2
Запустишь этот код — и увидишь, что PR AUC будет плавать где-то около 0.2. Не 0.5, как в ROC, а ровно столько, сколько у тебя "единичек" в данных. Вот поэтому, чувак, когда работаешь с данными, где одного хуй с горы, а другого — овердохуища, смотри на PR AUC. Потому что она сразу показывает: твоя модель реально научилась что-то находить или она просто отражает общую долю класса в данных, как тот самый рандомный угадыватель. И если твой PR AUC близок к prevalence — это знак, что пора, блядь, идти пересматривать фичи, а то получится манда с ушами, а не модель.