Какое значение precision будет у алгоритма, который всегда прогнозирует положительный класс (1)?

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

Ответ

Precision (точность) для алгоритма, всегда предсказывающего 1, равна доле реальных положительных примеров (класса 1) в датасете.

Формула и вывод: Precision = TP / (TP + FP)

  • TP (True Positive): Количество реальных единиц, которые модель правильно предсказала как 1. Поскольку модель всегда говорит «1», TP равно общему количеству реальных единиц в данных.
  • FP (False Positive): Количество реальных нулей, которые модель ошибочно предсказала как 1. Поскольку модель всегда говорит «1», FP равно общему количеству реальных нулей в данных.

Следовательно, Precision = (# реальных 1) / (# реальных 1 + # реальных 0). Это в точности баланс классов (class balance) для положительного класса.

Примеры на Python:

from sklearn.metrics import precision_score

# Пример 1: Сбалансированные классы (50% единиц)
y_true_balanced = [0, 1, 0, 1, 0, 1]
y_pred_always_1  = [1, 1, 1, 1, 1, 1]
print(precision_score(y_true_balanced, y_pred_always_1))  # 0.5 (3 TP / (3 TP + 3 FP))

# Пример 2: Дисбаланс в пользу класса 0 (10% единиц)
y_true_imbalanced = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
y_pred_always_1    = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
print(precision_score(y_true_imbalanced, y_pred_always_1))  # 0.1 (1 TP / (1 TP + 9 FP))

# Пример 3: Все данные — класс 1
print(precision_score([1, 1, 1], [1, 1, 1]))  # 1.0 (3 TP / (3 TP + 0 FP))

# Пример 4: Все данные — класс 0
# В sklearn precision для случая, когда нет предсказанных положительных классов (TP+FP=0),
# по умолчанию равна 0. Но наша модель всегда предсказывает 1, поэтому FP > 0.
print(precision_score([0, 0, 0], [1, 1, 1]))  # 0.0 (0 TP / (0 TP + 3 FP))

Вывод для собеседования: Precision такой наивной модели полностью определяется распределением целевой переменной. Это наглядно показывает, почему precision в отрыве от recall и контекста задачи (например, при сильном дисбалансе) может быть неинформативной. Всегда нужно смотреть на полную матрицу ошибок или F-меру.