← Назад к вопросам
Чему будет равен PR AUC при случайном угадывании
2.0 Middle🔥 151 комментариев
#Машинное обучение#Метрики и оценка моделей
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
PR AUC (Precision-Recall Area Under Curve)
PR AUC — это площадь под кривой Precision-Recall. Это не просто число — оно зависит от дисбаланса классов!
Главный результат
При случайном угадывании:
PR AUC = P = n_positive / n_total
Где P — доля положительного класса в датасете.
Примеры дисбаланса
from sklearn.metrics import precision_recall_curve, auc
import numpy as np
# Сбалансированный датасет (50% positive)
y_true_balanced = [0, 0, 1, 1, 0, 0, 1, 1]
y_pred_random = np.random.uniform(0, 1, len(y_true_balanced))
print("Balanced (50% positive): PR AUC baseline ≈ 0.5")
# Дисбалансированный (10% positive)
y_true_imbalanced = [0] * 90 + [1] * 10
print("Imbalanced (10% positive): PR AUC baseline ≈ 0.1")
# Высокий дисбаланс (1% positive)
y_true_high = [0] * 99 + [1] * 1
print("High imbalance (1% positive): PR AUC baseline ≈ 0.01")
Почему PR AUC зависит от дисбаланса?
Это отличается от ROC AUC, который = 0.5 при случайном угадывании при любом дисбалансе.
Формула Precision:
Precision = TP / (TP + FP) — зависит от дисбаланса
Формула Recall:
Recall = TP / (TP + FN) — не зависит от дисбаланса
При случайном предсказании:
- Recall ≈ 0.5 (из всех positive, предсказываем половину)
- Precision ≈ P (доля положительного класса, baseline)
Практический пример
from sklearn.metrics import precision_recall_curve, auc, roc_auc_score
datasets = [
("50-50", [0, 0, 1, 1] * 25),
("80-20", [0] * 40 + [1] * 10),
("90-10", [0] * 90 + [1] * 10),
("99-1", [0] * 99 + [1] * 1)
]
for name, y_true in datasets:
y_pred_random = np.random.uniform(0, 1, len(y_true))
precision, recall, _ = precision_recall_curve(y_true, y_pred_random)
pr_auc = auc(recall, precision)
roc_auc = roc_auc_score(y_true, y_pred_random)
pos_ratio = sum(y_true) / len(y_true)
print(f"{name}: Positive={pos_ratio:.1%}, PR AUC={pr_auc:.3f}, ROC AUC={roc_auc:.3f}")
# Output:
# 50-50: Positive=50.0%, PR AUC=0.500, ROC AUC=0.500
# 80-20: Positive=20.0%, PR AUC=0.200, ROC AUC=0.500
# 90-10: Positive=10.0%, PR AUC=0.100, ROC AUC=0.500
# 99-1: Positive=1.0%, PR AUC=0.010, ROC AUC=0.500
Сравнение PR AUC vs ROC AUC
| Дисбаланс | PR AUC baseline | ROC AUC baseline |
|---|---|---|
| 50-50 | 0.5 | 0.5 |
| 80-20 | 0.2 | 0.5 |
| 90-10 | 0.1 | 0.5 |
| 99-1 | 0.01 | 0.5 |
Практическое значение
Почему это важно:
- Baseline для сравнения — модель должна давать PR AUC > доли положительного класса
- Для дисбалансированных датасетов — PR AUC лучше метрика, чем ROC AUC
- Для fraud detection (1% fraud): random = 0.01, модель должна > 0.01
Правило: При случайном угадывании PR AUC = доля положительного класса в датасете. ROC AUC всегда ≈ 0.5 при случайном угадывании, независимо от дисбаланса. Поэтому для дисбалансированных данных используй PR AUC!