Помнишь, что логистическая регрессия выдаёт вероятность от 0 до 1
# Модель вернула вероятность
probability = model.predict(x) # например, 0.73
# Как решить: это класс 0 или класс 1?
if probability >= 0.5:
prediction = 1 # положительный класс
else:
prediction = 0 # отрицательный класс
0.5 — это порог классификации (threshold).
А что если взять другой порог?
Пример: Медицинский тест
Модель оценила 5 пациентов:
| Пациент |
Вероятность болезни |
Реально болен? |
| 1 |
0.95 |
Да |
| 2 |
0.73 |
Да |
| 3 |
0.52 |
Нет |
| 4 |
0.48 |
Да |
| 5 |
0.12 |
Нет |
С порогом 0.5:
Положительные (≥0.5): пациенты 1, 2, 3
- TP = 2 (пациенты 1, 2)
- FP = 1 (пациент 3)
- FN = 1 (пациент 4)
Precision = 2/3 = 66.7%
Recall = 2/3 = 66.7%
С порогом 0.4 (ниже!):
Положительные (≥0.4): пациенты 1, 2, 3, 4
- TP = 3 (пациенты 1, 2, 4)
- FP = 1 (пациент 3)
- FN = 0 (никого не пропустили!)
Precision = 3/4 = 75%
Recall = 3/3 = 100% ✨
Эффект: Снизив порог, мы нашли всех больных (Recall = 100%)!
С порогом 0.7 (выше!):
Положительные (≥0.7): пациенты 1, 2
- TP = 2 (пациенты 1, 2)
- FP = 0 (ни одной ошибки!)
- FN = 1 (пропустили пациента 4)
Precision = 2/2 = 100% ✨
Recall = 2/3 = 66.7%
Эффект: Подняв порог, мы стали точнее (Precision = 100%), но пропустили одного.
Как выбрать порог?
- Низкий порог (0.3-0.4) → больше положительных предсказаний
- ⬆️ Recall (находим больше)
- ⬇️ Precision (больше ложных тревог)
- Использовать: когда важно не пропустить (медицина, безопасность)
- Высокий порог (0.6-0.7) → меньше положительных предсказаний
- ⬇️ Recall (находим меньше)
- ⬆️ Precision (меньше ошибок)
- Использовать: когда важно не ошибаться (спам-фильтр, рекомендации)
- Порог 0.5 — это просто удобное значение по умолчанию, не всегда оптимальное!
Практический совет
В реальных проектах:
- Обучаем модель
- Тестируем с разными порогами (0.3, 0.4, 0.5, 0.6, 0.7...)
- Смотрим на Precision/Recall для каждого порога
- Выбираем порог, который даёт нужный баланс для нашей задачи