Пороговый детектор намерения

Самый простой классификатор — порог. Разберём его честно: с метриками, ошибками и компромиссом чувствительности.

Пороговый детектор объявляет «намерение есть», если признак превысил порог; иначе — «нет». Это бинарный классификатор с одним параметром.

Четыре исхода

Сравнивая решение детектора с истиной, получаем таблицу ошибок:

Намерение естьНамерения нет
Детектор: да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 — компромисс неизбежен.
Проверьте себя
1. Что такое FP (false positive) в детекторе намерения?
AПропуск настоящего намерения
BЛожная тревога: детектор сказал «да», а намерения не было
CВерное «нет»
DВерное «да»
2. Что показывает recall?
AДолю верных среди сказавших «да»
BДолю пойманных настоящих намерений (TP/(TP+FN))
CСкорость BCI
DЧисло каналов
3. Почему опасно судить классификатор только по точности?
AТочность всегда врёт
BПри редком классе можно получить высокую точность, всегда отвечая «нет»
CТочность нельзя посчитать
DОна зависит от цвета