← Назад к вопросам

Какой будет recall для алгоритма, который всегда прогнозирует 1?

1.7 Middle🔥 131 комментариев
#Метрики и оценка моделей

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Recall для алгоритма, предсказывающего всегда 1

Ответ: Recall = 1.0 (или 100%). Это важный результат для понимания метрик, давайте разберемся почему и что это означает.

Вывод из определения recall

Recall определяется как:

Recall = TP / (TP + FN)

Где:

  • TP (True Positive): модель предсказала 1, реальное значение 1 ✓
  • FN (False Negative): модель предсказала 0, реальное значение 1 ✗
  • TN (True Negative): модель предсказала 0, реальное значение 0 ✓
  • FP (False Positive): модель предсказала 1, реальное значение 0 ✗

Если алгоритм всегда предсказывает 1, то:

y_pred = [1, 1, 1, 1, 1, ...] (все единицы)

Что происходит:

  • Все реальные 1 будут предсказаны как 1 → TP = количество реальных 1
  • Все реальные 0 будут предсказаны как 1 → FP = количество реальных 0
  • Нет ложных негативов: FN = 0 (потому что мы никогда не предсказываем 0)
  • Нет истинных негативов: TN = 0

Подстановка в формулу:

Recall = TP / (TP + 0) = TP / TP = 1.0

Recall = 1.0 = 100% — мы поймали ВСЕ положительные примеры!

Пример с цифрами

from sklearn.metrics import recall_score, precision_score, f1_score, confusion_matrix

y_true = [0, 1, 1, 0, 1, 0, 1, 1]
y_pred = [1, 1, 1, 1, 1, 1, 1, 1]  # всегда 1

recall = recall_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print(f"Recall: {recall:.3f}")      # 1.0
print(f"Precision: {precision:.3f}")
print(f"F1: {f1:.3f}")

cm = confusion_matrix(y_true, y_pred)
print(f"\nConfusion Matrix:")
print(cm)
# [[0 3]   <- TN=0, FP=3 (все нули предсказаны как 1)
#  [0 5]]  <- FN=0, TP=5 (все единицы предсказаны как 1)

Вывод:

Recall: 1.0
Precision: 0.625
F1: 0.769

Confusion Matrix:
[[0 3]
 [0 5]]

Разберем:

  • Recall = 1.0: Из 5 реальных положительных, мы поймали все 5. Perfect!
  • Precision = 5/8 = 0.625: Из 8 предсказанных положительных, только 5 правильные. Плохо!
  • F1 = 0.769: Усредненный баланс двух метрик

Интерпретация результата

Это не хороший алгоритм! Хотя recall идеален:

Плюсы:

  • Мы ловим ВСЕ положительные примеры (высокий recall)
  • Хорошо для задач где FN (ложный негатив) дорогостоящий
  • Пример: детекция болезни, fraud detection, безопасность — лучше пропустить, чем пропустить реальную угрозу

Минусы:

  • Precision = 0.625 — много ложных срабатываний
  • Мы предсказываем положительный класс для всех примеров
  • Очень неполезно в production (слишком много false alarms)

Когда это имеет смысл

Этот алгоритм может быть базелайном для понимания:

Пример 1: Детекция редкого события (1% положительных)

y_true = [0]*99 + [1]  # 1% положительных
y_pred = [1]*100      # всегда 1

recall = 1.0          # поймали единственный positive
precision = 1/100     # но предсказали 100 положительных!
f1 ≈ 0.02            # ужасно

Это показывает: высокий recall может скрывать плохую точность!

Пример 2: Спам-фильтр

Если фильтр говорит "все письма спам", то:

  • Recall = 1.0 (ловим всех спаммеров)
  • Но 99% легитимных писем в спаме (плохо!)

Сравнение с другими алгоритмами

# Алгоритм 1: Всегда 1
y_pred_always_1 = [1]*100
recall_1 = 1.0      # ловим всех
precision_1 = 0.1  # много ложных

# Алгоритм 2: Всегда 0
y_pred_always_0 = [0]*100
recall_2 = 0.0      # не ловим никого
precision_2 = NaN   # не предсказали ни одного положительного

# Алгоритм 3: Случайный
y_pred_random = np.random.binomial(1, 0.5, 100)
recall_3 ≈ 0.5      # в среднем ловим половину
precision_3 ≈ 0.5   # в среднем половина предсказаний верные

# Алгоритм 4: Хороший (гипотетический)
recall_4 = 0.85
precision_4 = 0.9
f1_4 ≈ 0.87

Таблица recall для разных сценариев

АлгоритмRecallPrecisionF1Смысл
Всегда 11.0LowMediumЛовит всех, но много false alarms
Всегда 00.0N/A0.0Не ловит никого
Случайный0.50.50.5Как монета
Хороший0.8-0.950.8-0.950.8-0.95Баланс обеих метрик

Практический вывод

Recall = 1.0 означает:

  1. Мы поймали ВСЕ положительные примеры (отлично для recall)
  2. Но скорее всего много false positives (плохо для precision)
  3. F1 score будет средним
  4. Для реальной задачи нужен баланс между recall и precision

Выбор метрики зависит от задачи:

  • Нужен высокий recall: medical diagnosis (не пропустить болезнь), fraud detection (не пропустить fraud)
  • Нужна высокая precision: spam filter (не отправлять письма в спам), email notifications (не беспокоить юзера)
  • Нужен баланс: recommendation systems (и ловить, и не раздражать)

Практический совет: если у тебя recall = 1.0, проверь precision и confusion matrix. Скорее всего алгоритм не достаточно хорош для production.

Какой будет recall для алгоритма, который всегда прогнозирует 1? | PrepBro