Пороговый детектор намерения
Самый простой классификатор — порог. Разберём его честно: с метриками, ошибками и компромиссом чувствительности.
Пороговый детектор объявляет «намерение есть», если признак превысил порог; иначе — «нет». Это бинарный классификатор с одним параметром.
Четыре исхода
Сравнивая решение детектора с истиной, получаем таблицу ошибок:
| Намерение есть | Намерения нет | |
| Детектор: да | TP (верно) | FP (ложная тревога) |
| Детектор: нет | FN (пропуск) | TN (верно) |
Метрики
$$ \text{Точность} = \frac{TP + TN}{TP+TN+FP+FN}, \quad \text{Precision} = \frac{TP}{TP+FP}, \quad \text{Recall} = \frac{TP}{TP+FN} $$
Precision — какая доля сигналов «да» верна (цена ложных тревог), recall — какую долю настоящих намерений мы поймали (цена пропусков). Повышая порог, мы уменьшаем FP, но рискуем увеличить FN — это вечный компромисс.
Как работает под капотом
Сымитируем 1000 проб: при намерении признак в среднем выше. Поставим порог и посчитаем все метрики:
import random
random.seed(3)
def trial(intent):
base = 0.3 if intent else 0.1
return base + random.gauss(0, 0.05) # признак с шумом
thr = 0.2
TP = TN = FP = FN = 0
for _ in range(1000):
intent = random.random() < 0.5
detected = trial(intent) > thr
if intent and detected: TP += 1
elif intent and not detected: FN += 1
elif not intent and detected: FP += 1
else: TN += 1
acc = (TP + TN) / 1000
precision = TP / (TP + FP)
recall = TP / (TP + FN)
print(f"TP={TP} TN={TN} FP={FP} FN={FN}")
print(f"Точность: {acc:.1%}")
print(f"Precision: {precision:.3f}")
print(f"Recall: {recall:.3f}")
Вывод:
TP=484 TN=501 FP=8 FN=7 Точность: 98.5% Precision: 0.984 Recall: 0.986
Классы хорошо разделены (0.3 против 0.1 при шуме 0.05), поэтому порог 0.2 ловит почти всё. В реальной ЭЭГ перекрытие классов больше — и тогда выбор порога становится тонким компромиссом между ложными тревогами и пропусками.
Частые ошибки
- Смотреть только на точность: при редком классе высокая точность достигается «всегда нет».
- Ставить порог на глаз: его подбирают по обучающим данным и проверяют на отдельной выборке.
- Игнорировать компромисс precision/recall — он диктуется ценой ошибок в конкретной задаче.
Итог
- Пороговый детектор — бинарный классификатор с одним параметром.
- Метрики: точность, precision (цена ложных тревог), recall (цена пропусков).
- Повышение порога снижает FP, но повышает FN — компромисс неизбежен.