Precision-Recall Curve
На графике точности-полноты показана зависимость точности от полноты при разных порогах, что позволяет оценить качество модели и компромисс между ложными срабатываниями и пропущенными объектами.
Кривая точности-полноты показывает, как меняются точность и полнота модели при изменении порога принятия решения. Полнота отложена по горизонтальной оси, а точность — по вертикальной. Каждая точка соответствует порогу и показывает, сколько положительных случаев находит модель и насколько надёжны её положительные прогнозы. Кривая помогает оценивать классификаторы и детекторы, когда ложные срабатывания и пропущенные случаи имеют разную цену.
Как работает кривая точности-полноты#
Точность — это доля правильных положительных прогнозов: TP / (TP + FP). Полнота, также называемая чувствительностью, — это доля найденных фактических положительных случаев: TP / (TP + FN). TP означает истинно положительные случаи, FP — ложно положительные, а FN — ложно отрицательные; эти результаты учитываются в матрице ошибок.
Если перебрать порог уверенности для оценок прогнозов, получатся пары значений точности и полноты. При снижении порога принимается больше прогнозов, поэтому полнота растёт или остаётся неизменной. Точность может как расти, так и снижаться по мере добавления правильных и неправильных прогнозов, формируя ступенчатую кривую.
Сирил Клевердон представил графики зависимости полноты от релевантности в своём отчёте по Кранфилдскому исследованию 1962 года, заложив основу оценки точности-полноты в области информационного поиска. При поиске документов релевантные найденные документы считаются истинно положительными, а нерелевантные — ложно положительными.
Интерпретация кривой и базовый уровень#
Если при приближении полноты к 1 кривая сохраняет высокую точность, это указывает на высокое качество модели. Если кривые пересекаются, каждая модель лучше работает в своей области режимов. Резкое падение точности показывает, где дополнительные прогнозы приводят к множеству ложных срабатываний.
Базовый уровень для неинформативного случайного ранжирования равен доле положительного класса — доле примеров с положительной меткой. Если положительных примеров 1%, базовая точность равна 0,01. Изменение доли положительных примеров меняет точность, поэтому выборка для оценки влияет на результат.
Вместо этого кривая рабочей характеристики приёмника (ROC) показывает зависимость полноты от доли ложно положительных случаев: FP / (FP + TN), где TN означает истинно отрицательные случаи. Оценка точности-полноты напрямую показывает долю правильных оповещений, поэтому она полезна для редких положительных случаев. Точность классификации может определяться преимущественно классом большинства.
Выбор рабочего порога#
Выбери рабочую точку на валидационных данных с учётом цены ошибок. Если требуется минимальная полнота, выбери допустимую точку с наивысшей точностью; если требуется минимальная точность — допустимую точку с наивысшей полнотой. Максимизация F1-меры, гармонического среднего точности и полноты, придаёт обеим метрикам одинаковый вес. Значения порога определяются по исходным оценкам или графикам зависимости точности и полноты от уверенности.
В режиме предсказания Ultralytics YOLO этот выбор задаётся через conf, который фильтрует детекции по оценкам. В оценке Academy модели YOLO26n на четырёх валидационных изображениях COCO8 при IoU 0.50 повышение conf с 0.10 до 0.25 изменило интерполированные точность/полноту для класса «человек» с 0.63/0.80 до 1.00/0.54: ложных срабатываний стало меньше, но пропущенных людей — больше.
При оценке на отдельных тестовых данных не меняй выбранный порог.
Построение кривой точности-полноты в Python#
В этом примере рукописная цифра 9 отличаетcя от остальных цифр с помощью встроенных изображений и логистической регрессии. Установи зависимости с помощью pip install scikit-learn matplotlib, а затем используй API scikit-learn для построения графика точности-полноты.
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import PrecisionRecallDisplay
from sklearn.model_selection import train_test_split
X, digits = load_digits(return_X_y=True)
y = digits == 9
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)
model = LogisticRegression(max_iter=2000)
model.fit(X_train, y_train)
PrecisionRecallDisplay.from_estimator(model, X_test, y_test)
plt.savefig("precision_recall_curve.png", bbox_inches="tight")На сохранённом графике показана точность при каждом достижимом уровне полноты для отложенных изображений цифр.
Обнаружение объектов и средняя точность#
При обнаружении объектов предсказанный ограничивающий прямоугольник считается истинно положительным, если он соответствует ещё не сопоставленному размеченному объекту того же класса и значение пересечения над объединением (IoU) не ниже порога. Несопоставленные предсказания, включая дубликаты, считаются ложно положительными. Для каждого класса строится отдельная кривая с фиксированным требованием к IoU.
Средняя точность (AP) суммирует значения кривой на разных уровнях полноты. Трапецеидальная PR-AUC и AP без интерполяции используют разные правила интегрирования. Среднее значение средней точности (mAP) — это среднее AP по классам. В метриках качества обнаружения mAP50 использует IoU 0.50, а mAP50–95 усредняется по десяти порогам IoU от 0.50 до 0.95 с шагом 0.05.










